Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.4. 구성 툴

Red Hat Enterprise Linux는 관리자가 스토리지 및 파일 시스템 구성을 지원하는 다양한 툴을 제공합니다. 이 섹션에서는 사용 가능한 툴을 간략하게 설명하고 Red Hat Enterprise Linux 7의 I/O 및 파일 시스템 관련 성능 문제를 해결하는 데 사용할 수 있는 방법에 대한 예를 제공합니다.

8.4.1. 스토리지 성능을 위한 튜닝 프로필 구성

Tuned 서비스는 특정 사용 사례의 성능을 개선하도록 설계된 여러 프로필을 제공합니다. 다음 프로필은 스토리지 성능을 개선하는 데 특히 유용합니다.
  • latency-performance
  • throughput-performance(기본값)
시스템에서 프로필을 구성하려면 다음 명령을 실행하고 이름을 사용할 프로필 이름으로 교체합니다.
$ tuned-adm profile name
tuned-adm recommend 명령은 시스템에 적절한 프로필을 권장합니다.
이러한 프로필 또는 추가 구성 옵션에 대한 자세한 내용은 A.5절. “tuned-adm” 을 참조하십시오.

8.4.2. 기본 I/O 스케줄러 설정

기본 I/O 스케줄러는 장치에 대해 다른 스케줄러를 명시적으로 지정하지 않은 경우 사용되는 스케줄러입니다.
기본 스케줄러를 지정하지 않으면 SATA 드라이브에 cfq 스케줄러가 사용되며 데드라인 스케줄러는 다른 모든 드라이브에 사용됩니다. 이 섹션의 지침에 따라 기본 스케줄러를 지정하면 기본 스케줄러가 모든 장치에 적용됩니다.
기본 I/O 스케줄러를 설정하려면 Tuned 툴을 사용하거나 /etc/default/grub 파일을 수동으로 수정할 수 있습니다.
Red Hat은 Tuned 툴을 사용하여 부팅된 시스템에서 기본 I/O 스케줄러를 지정하는 것이 좋습니다. elevator 매개변수를 설정하려면 디스크 플러그인을 활성화합니다. 디스크 플러그인에 대한 자세한 내용은 Tuned 장의 3.1.1절. “플러그인” 를 참조하십시오.
GRUB 2를 사용하여 기본 스케줄러를 수정하려면 부팅 시 또는 시스템이 부팅될 때 커널 명령줄에 elevator 매개변수를 추가합니다. 절차 8.1. “GRUB 2를 사용하여 기본 I/O 스케줄러 설정” 에 설명된 대로 Tuned 툴을 사용하거나 /etc/default/grub 파일을 수동으로 수정할 수 있습니다.

절차 8.1. GRUB 2를 사용하여 기본 I/O 스케줄러 설정

부팅된 시스템에서 기본 I/O 스케줄러를 설정하고 재부팅 후 구성을 유지하려면 다음을 수행하십시오.
  1. /etc/default/grub 파일의 GRUB_CMDLINE_LINUX 행에 elevator 매개변수를 추가합니다.
    # cat /etc/default/grub
    ...
    GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=vg00/lvroot rd.lvm.lv=vg00/lvswap elevator=noop"
    ...
    
    Red Hat Enterprise Linux 7에서 사용 가능한 스케줄러는 데드라인,noopcfq 입니다. 자세한 내용은 kernel-doc 패키지를 설치한 후 사용 가능한 커널 설명서의 cfq-iosched.txtdeadline-iosched.txt 파일을 참조하십시오.
  2. elevator 매개변수가 추가되어 새 구성을 생성합니다.
    GRUB 2 설정 파일의 위치는 BIOS 펌웨어가 있는 시스템과 UEFI 시스템이 있는 시스템에서 다릅니다. 다음 명령 중 하나를 사용하여 GRUB 2 설정 파일을 다시 생성합니다.
    • BIOS 펌웨어가 있는 시스템에서 다음을 사용합니다.
      # grub2-mkconfig -o /etc/grub2.cfg
    • UEFI 펌웨어가 있는 시스템에서 다음을 사용합니다.
      # grub2-mkconfig -o /etc/grub2-efi.cfg
  3. 변경 사항을 적용하려면 시스템을 재부팅합니다.
    GNU GRand Unified Bootloader(GRUB) 버전 2에 대한 자세한 내용은 Red Hat Enterprise Linux 7 시스템 관리자 가이드의 GRUB 2 부팅 로더 장을 참조하십시오.

8.4.3. 일반 블록 장치 튜닝 매개변수

이 섹션에 나열된 일반 튜닝 매개 변수는 /sys/block/sdX/queue/ 디렉터리 내에서 사용할 수 있습니다. 나열된 튜닝 매개변수는 I/O 스케줄러 튜닝과 분리되어 있으며 모든 I/O 스케줄러에 적용됩니다.
add_random
일부 I/O 이벤트는 /dev/random 의 엔트로피 풀에 기여합니다. 이러한 기여에 따른 오버헤드가 측정 가능한 경우 이 매개변수를 0 으로 설정할 수 있습니다.
iostats
기본값은 1 (enabled)입니다. iostats0 으로 설정하면 장치의 I/O 통계 수집이 비활성화됩니다. 이 통계는 I/O 경로로 적은 양의 오버헤드를 제거합니다. iostats0 으로 설정하면 특정 NVMe 솔리드 스테이트 스토리지 장치와 같은 매우 높은 성능 장치의 성능이 약간 향상될 수 있습니다. 벤더가 지정된 스토리지 모델에 달리 지정하지 않는 한 iostats 를 활성화 상태로 두는 것이 좋습니다.
iostats 를 비활성화하면 장치의 I/O 통계가 /proc/diskstats 파일에 더 이상 존재하지 않습니다. /sys/diskstats 의 콘텐츠는 sar 또는 iostats 과 같이 I/O 툴을 모니터링하기 위한 I/O 정보의 소스입니다. 따라서 장치에 대한 iostats 매개변수를 비활성화하면 장치가 더 이상 I/O 모니터링 툴 출력에 표시되지 않습니다.
max_sectors_kb
I/O 요청의 최대 크기를 킬로바이트 단위로 지정합니다. 기본값은 512 KB입니다. 이 매개 변수의 최소값은 스토리지 장치의 논리 블록 크기에 따라 결정됩니다. 이 매개변수의 최대값은 max_hw_sectors_kb 값에 따라 결정됩니다.
I/O 요청이 내부 삭제 블록 크기보다 크면 특정 솔리드 스테이트 디스크가 제대로 작동하지 않습니다. 시스템에 연결된 솔리드 스테이트 디스크 모델의 경우 이를 확인하려면 하드웨어 공급 업체에 문의하여 권장 사항을 따르십시오. Red Hat은 max_sectors_kb 에서 항상 최적의 I/O 크기와 내부 삭제 블록 크기 중 여러 개일 것을 권장합니다. 스토리지 장치에서 0이거나 지정하지 않은 경우 매개변수에 logical_block_size 값을 사용합니다.
nomerges
대부분의 워크로드는 요청 병합의 이점을 제공합니다. 그러나 병합을 비활성화하는 것은 디버깅 목적에 유용할 수 있습니다. 기본적으로 nomerges 매개변수는 0 으로 설정되어 병합을 활성화합니다. 간단한 일회성 병합을 비활성화하려면 nomerges1 로 설정합니다. 모든 유형의 병합을 비활성화하려면 nomerges2 로 설정합니다.
nr_requests
한 번에 대기열에 추가할 수 있는 최대 읽기 및 쓰기 요청 수를 지정합니다. 기본값은 128 입니다. 즉, 읽기 또는 쓰기를 요청하기 전에 128개의 읽기 요청 및 128개의 쓰기 요청을 대기열에 추가할 수 있습니다.
대기 시간에 민감한 애플리케이션의 경우 이 매개변수의 값을 줄이고 스토리지에 대한 명령 대기열 깊이를 제한하여 쓰기 요청으로 장치 큐를 채울 수 없도록 합니다. 장치 큐가 채워지면 대기열 공간을 사용할 수 있을 때까지 I/O 작업을 수행하려는 다른 프로세스가 유휴 상태가 됩니다. 그런 다음 하나의 프로세스가 큐의 모든 지점을 지속적으로 사용하지 못하도록 라운드 로빈 방식으로 요청이 할당됩니다.
I/O 스케줄러 내의 최대 I/O 작업 수는 nr_requests*2 입니다. 언급된 대로 nr_requests 는 읽기 및 쓰기에 별도로 적용됩니다. nr_requests 는 I/O 스케줄러 내의 I/O 작업에만 적용되며 이미 기본 장치에 디스패치된 I/O 작업에는 적용되지 않습니다. 따라서 장치에 대한 I/O 작업의 최대 미해결 제한은 (nr_requests*2)+(queue_depth) 입니다. 여기서 queue_depth/sys/block/sdN/device/queue_depth 이며, LUN 대기열 깊이라고도 합니다. 예를 들어 avgqu-sz 열에서 iostat 의 출력과 같은 총 I/O 작업 수를 확인할 수 있습니다.
optimal_io_size
일부 스토리지 장치는 이 매개변수를 통해 최적의 I/O 크기를 보고합니다. 이 값이 보고되는 경우 Red Hat은 애플리케이션이 가능한 경우 최적의 I/O 크기에 맞게 I/O를 발행하는 것이 좋습니다.
read_ahead_kb
순차적 읽기 작업 중에 운영 체제가 미리 읽을 수 있는 최대 킬로바이트 수를 정의합니다. 결과적으로 다음 순차적 읽기의 커널 페이지 캐시에 필요한 정보가 이미 있으므로 읽기 I/O 성능이 향상됩니다.
장치 매퍼는 종종 높은 read_ahead_kb 값의 이점을 제공합니다. 각 장치를 매핑할 수 있는 128KB는 좋은 시작점이지만 read_ahead_kb 값을 4-8MB까지 늘리면 대용량 파일을 순차적으로 읽는 애플리케이션 환경에서 성능이 향상될 수 있습니다.
rotational
일부 솔리드 스테이트 디스크는 솔리드 스테이트 상태를 올바르게 알리지 않으며 기존 회전 디스크로 마운트됩니다. 솔리드 스테이트 장치가 이 값을 자동으로 0 으로 설정하지 않으면 스케줄러에서 불필요한 검색 허용 논리를 비활성화하도록 수동으로 설정합니다.
rq_affinity
기본적으로 I/O 완료는 I/O 요청을 발행한 프로세서와 다른 프로세서에서 처리될 수 있습니다. 이 기능을 비활성화하고 I/O 요청을 발행한 프로세서에서만 완료를 수행하려면 rq_affinity1 로 설정합니다. 이렇게 하면 프로세서 데이터 캐싱의 효율성을 향상시킬 수 있습니다.
scheduler
특정 스토리지 장치에 대한 스케줄러 또는 스케줄러 기본 설정 순서를 설정하려면 /sys/block/devname/queue/scheduler 파일을 편집합니다. 여기서 devname 은 구성할 장치의 이름입니다.
# echo cfq > /sys/block/hda/queue/scheduler

8.4.4. 데드라인 스케줄러 튜닝

데드라인 이 사용 중인 경우 대기 중인 I/O 요청이 읽기 또는 쓰기 일괄 처리로 정렬된 다음 LBA 순서를 늘리도록 스케줄링됩니다. 애플리케이션이 읽기 I/O에서 차단될 가능성이 높기 때문에 읽기 배치는 기본적으로 쓰기 배치보다 우선합니다. 배치가 처리된 후 데드라인 은 프로세서 시간 쓰기 시간이 얼마나 오래되었는지 확인하고 필요에 따라 다음 읽기 또는 쓰기 배치를 예약합니다.
다음 매개변수는 데드라인 스케줄러의 동작에 영향을 미칩니다.
fifo_batch
단일 일괄 처리로 실행할 읽기 또는 쓰기 작업 수입니다. 기본값은 16 입니다. 값이 클수록 처리량이 증가할 수 있지만 대기 시간이 늘어납니다.
front_merges
워크로드가 프론트 병합을 생성하지 않으면 이 튜닝 가능 항목을 0 으로 설정할 수 있습니다. 그러나 이 검사의 오버헤드를 측정하지 않는 한 Red Hat은 기본값 1 을 권장합니다.
read_expire
읽기 요청을 서비스에 예약해야 하는 시간(밀리초)입니다. 기본값은 500 (0.5초)입니다.
write_expire
서비스에 대한 쓰기 요청을 예약해야 하는 시간(밀리초)입니다. 기본값은 5000 (5초)입니다.
writes_starved
쓰기 일괄 처리를 처리하기 전에 처리할 수 있는 읽기 배치 수입니다. 이 값이 높을수록 배치를 읽기 위해 지정된 기본 설정이 커집니다.

8.4.5. CFQ 스케줄러 튜닝

CFQ를 사용하는 경우 프로세스는 실시간, 최상의 노력 및 유휴 상태의 세 가지 클래스에 배치됩니다. 모든 실시간 프로세스는 최상의 작업 프로세스보다 먼저 예약되며, 이 프로세스는 유휴 프로세스보다 먼저 예약됩니다. 기본적으로 프로세스는 최상의 작업으로 분류됩니다. ionice 명령을 사용하여 프로세스의 클래스를 수동으로 조정할 수 있습니다.
다음 매개변수를 사용하여 CFQ 스케줄러의 동작을 추가로 조정할 수 있습니다. 이러한 매개변수는 /sys/block/devname/queue/iosched 디렉토리에서 지정된 파일을 변경하여 장치별로 설정됩니다.
back_seek_max
CFQ에서 이전 검색을 수행할 최대 거리(KB)입니다. 기본값은 16 KB입니다. 역추적 검색은 일반적으로 성능이 손상되므로 큰 값은 권장되지 않습니다.
back_seek_penalty
디스크 헤드가 앞으로 또는 뒤로 이동할지 여부를 결정할 때 역추적에 적용된 승수입니다. 기본값은 2 입니다. 디스크 헤드 위치가 1024KB이고 시스템(1008KB 및 1040KB)에 적절한 요청이 있는 경우 back_seek_penalty 는 이전 검색 거리에 적용되며 디스크가 앞으로 이동합니다.
fifo_expire_async
비동기(buffered write) 요청이 서비스되지 않은 상태로 유지될 수 있는 시간(밀리초)입니다. 이 시간이 만료되면 중단된 단일 비동기 요청이 디스패치 목록으로 이동합니다. 기본값은 250 밀리초입니다.
fifo_expire_sync
동기(읽기 또는 O_DIRECT 쓰기) 요청이 처리되지 않은 상태로 유지될 수 있는 시간(밀리초)입니다. 이 시간이 만료되면 중단된 단일 동기 요청이 디스패치 목록으로 이동합니다. 기본값은 125 밀리초입니다.
group_idle
이 매개변수는 기본적으로 0 (비활성화)으로 설정됩니다. 1 (enabled)로 설정하면 제어 그룹에서 I/O를 발행하는 마지막 프로세스의 cfq 스케줄러 유휴 상태가 됩니다. 이는 비례 가중치 I/O 제어 그룹을 사용하고 slice_idle0 (빠른 스토리지에서)으로 설정된 경우 유용합니다.
group_isolation
이 매개변수는 기본적으로 0 (비활성화)으로 설정됩니다. 1 (enabled)로 설정하면 그룹 간에 더 강력한 격리를 제공하지만 임의의 워크로드와 순차적 워크로드에 공정성이 적용되므로 처리량이 줄어듭니다. group_isolation 이 비활성화된 경우( 0으로 설정) 순차 워크로드에만 공정성이 제공됩니다. 자세한 내용은 /usr/share/doc/kernel-doc-version/Documentation/cgroups/blkio-controller.txt 에서 설치된 문서를 참조하십시오.
low_latency
이 매개변수는 기본적으로 1 (활성화)으로 설정됩니다. 활성화하면 cfq 는 장치에서 I/O를 발행하는 각 프로세스에 대해 최대 대기 시간을 제공하여 처리량에 대한 공정성을 제공합니다. 이 매개변수가 0 으로 설정되면(비활성화됨) 대상 대기 시간이 무시되고 각 프로세스는 전체 시간 슬라이스를 수신합니다.
Quomom
이 매개 변수는 cfq 가 한 번에 하나의 장치로 전송하는 I/O 요청 수를 정의합니다. 이 매개변수는 기본적으로 대기열 깊이를 제한합니다. 기본값은 8 개의 요청입니다. 사용되는 장치는 더 큰 대기열 깊이를 지원할 수 있지만, 특히 순차적 쓰기 작업 부하의 경우 레이턴시 값을 늘리면 레이턴시가 증가합니다.
slice_async
이 매개변수는 비동기 I/O 요청을 발행하는 각 프로세스에 할당된 시간 슬라이스(밀리초)를 정의합니다. 기본값은 40 밀리초입니다.
slice_idle
이 매개변수는 추가 요청을 기다리는 동안 cfq 유휴 상태로 유지되는 시간(밀리초)을 지정합니다. 기본값은 0 입니다(Queue 또는 서비스 트리 수준에서 유휴 상태 없음). 기본값은 외부 RAID 스토리지의 처리량에 적합하지만 전체 검색 작업 수가 증가함에 따라 내부 비RAID 스토리지에서 처리량을 저하시킬 수 있습니다.
slice_sync
이 매개변수는 동기 I/O 요청을 발행하는 각 프로세스에 할당된 시간 슬라이스(밀리초)를 정의합니다. 기본값은 100 ms입니다.

8.4.5.1. Fast Storage를 위한 CFQ 튜닝

빠른 외부 스토리지 어레이 또는 솔리드 스테이트 디스크와 같은 대규모 검색 페널티가 발생하지 않는 하드웨어에는 cfq 스케줄러를 사용하지 않는 것이 좋습니다. 사용 사례에 이 스토리지에 cfq 를 사용해야 하는 경우 다음 구성 파일을 편집해야 합니다.
  • /sys/block/devname/queue/iosched/slice_idle0으로 설정합니다.
  • /sys/block/devname/queue/iosched/quantum64로 설정합니다.
  • /sys/block/devname/queue/iosched/group_idle1로 설정합니다.

8.4.6. noop Scheduler 조정

noop I/O 스케줄러는 주로 빠른 스토리지를 사용하는 CPU 바인딩 시스템에 유용합니다. 또한 noop I/O 스케줄러는 일반적으로 가상 디스크에 대한 I/O 작업을 수행할 때 가상 머신에서 독점적으로 사용되는 것은 아닙니다.
noop I/O 스케줄러와 관련된 조정 가능한 매개변수는 없습니다.

8.4.7. 성능을 위해 파일 시스템 구성

이 섹션에서는 Red Hat Enterprise Linux 7에서 지원되는 각 파일 시스템에 특정한 튜닝 매개 변수에 대해 설명합니다. 매개변수는 스토리지 장치를 포맷할 때 또는 포맷된 장치를 마운트할 때 값을 구성해야 하는지에 따라 나뉩니다.
파일 조각화 또는 리소스 경합으로 인해 성능이 손실되는 경우 일반적으로 파일 시스템을 재구성하여 성능이 향상될 수 있습니다. 그러나 경우에 따라 애플리케이션을 변경해야 할 수도 있습니다. 이 경우 Red Hat은 고객 지원에 문의하는 것이 좋습니다.

8.4.7.1. XFS 튜닝

이 섹션에서는 포맷 및 마운트 시 XFS 파일 시스템에서 사용할 수 있는 몇 가지 튜닝 매개 변수에 대해 설명합니다.
XFS의 기본 포맷 및 마운트 설정은 대부분의 워크로드에 적합합니다. Red Hat은 특정 구성 변경이 워크로드에 도움이 될 경우에만 변경할 것을 권장합니다.
8.4.7.1.1. 포맷 옵션
이러한 포맷 옵션에 대한 자세한 내용은 도움말 페이지를 참조하십시오.
$ man mkfs.xfs
디렉터리 블록 크기
디렉터리 블록 크기는 I/O 작업별로 검색하거나 수정할 수 있는 디렉터리 정보의 양에 영향을 미칩니다. 디렉터리 블록 크기의 최소값은 파일 시스템 블록 크기(4KB)입니다. 디렉터리 블록 크기의 최대값은 64 KB입니다.
지정된 디렉터리 블록 크기에서 큰 디렉터리에는 작은 디렉터리보다 더 많은 I/O가 필요합니다. 디렉터리 블록 크기가 큰 시스템은 디렉터리 블록 크기가 작은 시스템보다 I/O 작업당 더 많은 처리 성능을 사용합니다. 따라서 워크로드에 대해 가능한 한 작은 디렉터리 및 디렉터리 블록 크기를 사용하는 것이 좋습니다.
Red Hat은 표 8.1. “디렉터리 블록 크기에 권장되는 최대 디렉터리 항목” 에 나열된 쓰기 및 읽기 복구 워크로드에 대해 나열된 항목 수를 초과하는 파일 시스템에 대해 에 나열된 디렉터리 블록 크기를 권장합니다.
다양한 크기의 파일 시스템에서 디렉터리 블록 크기가 읽기 및 쓰기 워크로드에 미치는 영향에 대한 자세한 내용은 XFS 설명서를 참조하십시오.
디렉터리 블록 크기를 구성하려면 mkfs.xfs -l 옵션을 사용합니다. 자세한 내용은 mkfs.xfs 도움말 페이지를 참조하십시오.
할당 그룹
할당 그룹은 파일 시스템의 섹션에서 사용 가능한 공간을 인덱스하고 할당된 inode를 인덱싱하는 독립적인 구조입니다. 각 할당 그룹은 독립적으로 수정할 수 있으므로 동시 작업이 다른 할당 그룹에 영향을 미치는 한 XFS는 할당 및 할당 작업을 동시에 수행할 수 있습니다. 따라서 파일 시스템에서 수행할 수 있는 동시 작업 수는 할당 그룹 수와 동일합니다. 그러나 동시 작업을 수행하는 기능도 작업을 수행할 수 있는 프로세서 수로 제한되므로 할당 그룹 수가 시스템의 프로세서 수보다 크거나 같을 것을 권장합니다.
단일 디렉터리는 여러 할당 그룹에서 동시에 수정할 수 없습니다. 따라서 Red Hat은 많은 수의 파일을 생성하고 제거하는 애플리케이션에서 모든 파일을 단일 디렉터리에 저장하지 않는 것이 좋습니다.
할당 그룹을 구성하려면 mkfs.xfs -d 옵션을 사용합니다. 자세한 내용은 mkfs.xfs 도움말 페이지를 참조하십시오.
성장 제한 조건
포맷 시간 후에 파일 시스템의 크기를 늘려야 하는 경우(하드웨어를 추가하거나 씬 프로비저닝을 통해) 포맷이 완료된 후 할당 그룹 크기를 변경할 수 없으므로 초기 파일 레이아웃을 신중하게 고려해야 합니다.
할당 그룹은 초기 용량이 아닌 파일 시스템의 최종 용량에 따라 크기를 조정해야 합니다. 할당 그룹이 최대 크기(1TB)를 초과하지 않는 한 완전히 성장하고 있는 파일 시스템의 할당 그룹 수는 백을 초과해서는 안 됩니다. 따라서 대부분의 파일 시스템에서 파일 시스템을 허용하는 권장 최대 증가는 초기 크기보다 10배입니다.
새 할당 그룹 헤더가 새로 추가된 스토리지에 올바르게 정렬되도록 장치 크기를 할당 그룹 크기의 정확한 배수에 정렬해야 하므로 RAID 배열에서 파일 시스템을 확장할 때 추가 주의를 수행해야 합니다. 또한 새 스토리지에는 포맷 시간 후에 변경할 수 없으므로 기존 스토리지와 동일한 스토리지가 있어야 하므로 동일한 블록 장치에서 다른 Cryostat의 스토리지에 최적화될 수 없습니다.
inode 크기 및 인라인 속성
inode에 사용 가능한 공간이 충분한 경우 XFS는 속성 이름과 값을 inode에 직접 작성할 수 있습니다. 이러한 인라인 속성은 추가 I/O가 필요하지 않으므로 별도의 속성 블록을 검색하는 것보다 빠른 순서로 검색 및 수정할 수 있습니다.
기본 inode 크기는 256바이트입니다. 이 중 약 100바이트만 inode에 저장된 데이터 범위 포인터의 수에 따라 속성 스토리지에 사용할 수 있습니다. 파일 시스템을 포맷하면 inode 크기를 늘리면 특성을 저장하는 데 사용할 수 있는 공간을 늘릴 수 있습니다.
특성 이름과 속성 값은 모두 254바이트의 최대 크기로 제한됩니다. 이름 또는 값이 길이에서 254바이트를 초과하는 경우, 속성은 인라인으로 저장되는 대신 별도의 특성 블록으로 푸시됩니다.
inode 매개 변수를 구성하려면 mkfs.xfs -i 옵션을 사용합니다. 자세한 내용은 mkfs.xfs 도움말 페이지를 참조하십시오.
RAID
소프트웨어 RAID를 사용 중인 경우 mkfs.xfs 는 적절한 스트라이프 단위 및 너비를 사용하여 기본 하드웨어를 자동으로 구성합니다. 그러나 일부 하드웨어 RAID 장치가 이 정보를 내보내는 것은 아니므로 하드웨어 RAID가 사용 중인 경우 스트라이프 단위와 너비를 수동으로 구성해야 할 수 있습니다. 스트라이프 단위 및 너비를 구성하려면 mkfs.xfs -d 옵션을 사용합니다. 자세한 내용은 mkfs.xfs 도움말 페이지를 참조하십시오.
로그 크기
동기화 이벤트가 트리거될 때까지 보류 중인 변경 사항은 해당 시점에 로그에 기록됩니다. 로그 크기는 한 번에 진행 중일 수 있는 동시 수정 수를 결정합니다. 또한 메모리에 집계할 수 있는 최대 변경 양과 로그 데이터가 디스크에 기록되는 빈도를 결정합니다. 작은 로그는 데이터가 더 큰 로그보다 더 자주 디스크에 기록되도록 합니다. 그러나 더 큰 로그는 더 많은 메모리를 사용하여 보류 중인 수정 사항을 기록하므로 메모리가 제한된 시스템은 더 큰 로그의 이점을 얻을 수 없습니다.
로그는 기본 스트라이프 단위에 정렬될 때 더 잘 수행됩니다. 즉, 스트라이프 단위가 스트라이프 단위 경계에서 시작하고 끝납니다. 스트라이프 단위에 로그를 정렬하려면 mkfs.xfs -d 옵션을 사용합니다. 자세한 내용은 mkfs.xfs 도움말 페이지를 참조하십시오.
로그 크기를 구성하려면 다음 mkfs.xfs 옵션을 사용하여 logsize 를 로그 크기로 교체합니다.
# mkfs.xfs -l size=logsize
자세한 내용은 mkfs.xfs 도움말 페이지를 참조하십시오.
$ man mkfs.xfs
로그 스트라이프 단위
RAID5 또는 RAID6 레이아웃을 사용하는 스토리지 장치에 대한 로그 쓰기는 스트라이프 단위 경계를 시작하고 종료할 때 더 잘 수행할 수 있습니다(기본 스트라이프 단위에 맞게 조정됨). mkfs.xfs 는 적절한 로그 스트라이프 장치를 자동으로 설정하려고 하지만 이 정보를 내보내는 RAID 장치에 따라 다릅니다.
큰 로그 스트라이프 장치를 설정하면 로그 스트라이프 단위의 크기에 작은 쓰기를 채워야 하므로 워크로드가 동기화 이벤트를 트리거하는 경우 성능이 저하될 수 있습니다. 워크로드가 로그 쓰기 대기 시간에 바인딩되는 경우 가능한 한 정렬되지 않은 로그 쓰기가 트리거되도록 로그 스트라이프 단위를 1 블록으로 설정하는 것이 좋습니다.
지원되는 최대 로그 스트라이프 단위는 최대 로그 버퍼 크기(256KB)의 크기입니다. 따라서 기본 스토리지에 로그에 구성할 수 있는 것보다 큰 스트라이프 단위가 있을 수 있습니다. 이 경우 mkfs.xfs 는 경고를 발행하고 32KB의 로그 스트라이프 단위를 설정합니다.
로그 스트라이프 장치를 구성하려면 다음 옵션 중 하나를 사용합니다. 여기서 N 은 스트라이프 단위로 사용할 블록 수이며 크기는 KB의 스트라이프 단위 크기입니다.
mkfs.xfs -l sunit=Nb
mkfs.xfs -l su=size
자세한 내용은 mkfs.xfs 도움말 페이지를 참조하십시오.
$ man mkfs.xfs
8.4.7.1.2. Mount Options
inode 할당
크기가 1TB보다 큰 파일 시스템에 권장됩니다. inode64 매개변수는 전체 파일 시스템에서 inode 및 데이터를 할당하도록 XFS를 구성합니다. 이렇게 하면 inode가 파일 시스템 시작 부분에 많이 할당되지 않고 파일 시스템 끝에 데이터가 크게 할당되지 않아 대용량 파일 시스템의 성능이 향상됩니다.
로그 버퍼 크기 및 번호
로그 버퍼가 클수록 로그에 모든 변경 사항을 쓰는 데 필요한 I/O 작업이 줄어듭니다. 더 큰 로그 버퍼는 비휘발성 쓰기 캐시가 없는 I/O 집약적인 워크로드가 있는 시스템의 성능을 향상시킬 수 있습니다.
로그 버퍼 크기는 logbsize 마운트 옵션으로 구성되며 로그 버퍼에 저장할 수 있는 최대 정보 양을 정의합니다. 로그 스트라이프 단위가 설정되지 않은 경우 버퍼 쓰기가 최대값보다 짧을 수 있으므로 동기화가 많은 워크로드에 대한 로그 버퍼 크기를 줄일 필요가 없습니다. 로그 버퍼의 기본 크기는 32KB입니다. 최대 크기는 256KB이고 기타 지원되는 크기는 32KB에서 256KB 사이의 로그 스트라이프 단위의 2KB, 128KB 또는 전원 2개입니다.
로그 버퍼 수는 logbufs 마운트 옵션으로 정의됩니다. 기본값은 8개의 로그 버퍼(최대)이지만 최소 두 개의 로그 버퍼를 구성할 수 있습니다. 일반적으로 추가 로그 버퍼에 메모리를 할당할 수 없는 메모리 바인딩된 시스템을 제외하고 로그 버퍼의 수를 줄일 필요가 없습니다. 로그 버퍼 수를 줄이면 로그 I/O 대기 시간에 민감한 워크로드에서 로그 성능을 줄이는 경향이 있습니다.
변경 로깅 지연
XFS에는 로그에 쓰기 전에 메모리에 변경 사항을 집계할 수 있는 옵션이 있습니다. delaylog 매개변수를 사용하면 변경될 때마다 정기적으로 로그에 메타데이터를 쓸 수 있습니다. 이 옵션은 충돌에서 손실될 가능성이 있는 작업 수를 늘리고 메타데이터를 추적하는 데 사용되는 메모리 양을 늘립니다. 그러나 데이터 및 메타데이터를 디스크에 쓰는 데 사용되는 경우 메타데이터 수정 속도와 확장성을 순서대로 늘릴 수 있으며 fsync, fdatasync 또는 sync 을 사용하여 데이터 또는 메타데이터 무결성을 줄일 수 없습니다.
마운트 옵션에 대한 자세한 내용은 man xfs를 참조하십시오.

8.4.7.2. ext4 튜닝

이 섹션에서는 포맷 및 마운트 시 ext4 파일 시스템에서 사용할 수 있는 몇 가지 튜닝 매개 변수에 대해 설명합니다.
8.4.7.2.1. 포맷 옵션
inode 테이블 초기화
파일 시스템의 모든 inode를 초기화하는 것은 매우 큰 파일 시스템에서 매우 오랜 시간이 걸릴 수 있습니다. 기본적으로 초기화 프로세스는 지연됩니다(lazy inode 테이블 초기화가 활성화됨). 그러나 시스템에 ext4 드라이버가 없는 경우 lazy inode 테이블 초기화는 기본적으로 비활성화되어 있습니다. lazy_itable_init 를 1)로 설정하여 활성화할 수 있습니다. 이 경우 커널 프로세스는 마운트된 후에도 파일 시스템을 계속 초기화합니다.
이 섹션에서는 형식 시 사용할 수 있는 일부 옵션만 설명합니다. 추가 포맷 매개변수는 mkfs.ext4 매뉴얼 페이지를 참조하십시오.
$ man mkfs.ext4
8.4.7.2.2. Mount Options
inode 테이블 초기화 속도
lazy inode 테이블 초기화가 활성화되면 init_itable 매개변수의 값을 지정하여 초기화가 수행되는 속도를 제어할 수 있습니다. 백그라운드 초기화를 수행하는 데 소비되는 시간은 대략 1의 값을 이 매개 변수의 값으로 나눈 것과 같습니다. 기본값은 10 입니다.
자동 파일 동기화
일부 애플리케이션은 기존 파일 이름 변경 후 또는 작성 후 fsync 를 올바르게 수행하지 않습니다. 기본적으로 ext4는 이러한 각 작업 후에 파일을 자동으로 동기화합니다. 그러나 시간이 많이 걸릴 수 있습니다.
이 수준의 동기화가 필요하지 않은 경우 마운트 시 noauto_da_alloc 옵션을 지정하여 이 동작을 비활성화할 수 있습니다. noauto_da_alloc 이 설정된 경우 애플리케이션에서 fsync를 명시적으로 사용하여 데이터 지속성을 확인해야 합니다.
저널 I/O 우선순위
기본적으로 저널 I/O의 우선 순위는 3 이며 일반 I/O의 우선 순위보다 약간 높습니다. 마운트 시 journal_ioprio 매개변수를 사용하여 저널 I/O의 우선 순위를 제어할 수 있습니다. journal_ioprio 의 유효한 값은 0 에서 7 사이이며, 0 은 가장 높은 우선 순위 I/O입니다.
이 섹션에서는 마운트 시 사용할 수 있는 일부 옵션만 설명합니다. 추가 마운트 옵션은 마운트 도움말 페이지를 참조하십시오.
$ man mount

8.4.7.3. Btrfs 튜닝

Red Hat Enterprise Linux 7.0부터 Btrfs는 기술 프리뷰로 제공됩니다. 현재 워크로드를 기반으로 시스템을 최적화하려면 튜닝을 수행해야 합니다. 옵션 생성 및 마운트에 대한 자세한 내용은 Red Hat Enterprise Linux 7 Storage 관리 가이드의 Btrfs에 대한 장을 참조하십시오.

데이터 압축

기본 압축 알고리즘은 zlib이지만 특정 워크로드에서는 압축 알고리즘을 변경할 이유를 제공할 수 있습니다. 예를 들어 파일 I/O가 많은 단일 스레드가 있는 경우 lzo 알고리즘을 사용하는 것이 더 적합할 수 있습니다. 마운트 시 옵션은 다음과 같습니다.
  • compress=zlib - 압축 비율이 높은 기본 옵션으로 이전 커널에 안전합니다.
  • compress=lzo - zlib보다 압축 속도가 빠르지만 낮습니다.
  • compress=no - 압축을 비활성화합니다.
  • compress-force=방법 - 비디오 및 디스크 이미지와 같이 잘 압축하지 않는 파일에도 압축을 활성화합니다. 사용 가능한 방법은 zliblzo 입니다.
마운트 옵션을 추가한 후 생성되거나 변경된 파일만 압축됩니다. 기존 파일을 압축하려면 방법을 zlib 또는 lzo 로 교체한 후 다음 명령을 실행하십시오.
$ btrfs filesystem defragment -cmethod
lzo 를 사용하여 파일을 다시 압축하려면 다음을 실행합니다.
$ btrfs filesystem defragment -r -v -clzo /

8.4.7.4. collectd2 튜닝

이 섹션에서는 format 및 at mount 시 Cryostat2 파일 시스템에서 사용할 수 있는 몇 가지 튜닝 매개변수에 대해 설명합니다.
디렉터리 간격
OVA2 마운트 지점의 최상위 디렉터리에 생성된 모든 디렉터리는 자동으로 조각화를 줄이고 해당 디렉터리의 쓰기 속도를 높이기 위해 배치됩니다. 최상위 디렉터리와 같은 다른 디렉터리를 배치하려면 표시된 대로 해당 디렉터리를 T 속성으로 표시하고 dirname 을 공백 디렉터리의 경로로 바꿉니다.
# chattr +T dirname
chattre2fsprogs 패키지의 일부로 제공됩니다.
경합 감소
polkit2는 클러스터 노드 간에 통신이 필요할 수 있는 글로벌 잠금 메커니즘을 사용합니다. 여러 노드 간 파일 및 디렉터리에 대한 경합으로 인해 성능이 저하됩니다. 여러 노드 간에 공유되는 파일 시스템의 영역을 최소화하여 교차 캐시 무효화 위험을 최소화할 수 있습니다.