8장. 스토리지 및 파일 시스템
이 장에서는 Red Hat Enterprise Linux 7의 I/O 및 파일 시스템의 애플리케이션 성능에 영향을 주는 지원되는 파일 시스템 및 구성 옵션에 대해 간단히 설명합니다. 8.1절. “고려 사항” 성능에 영향을 주는 I/O 및 파일 시스템 관련 요인에 대해 설명합니다. 8.2절. “성능 문제 모니터링 및 진단” Red Hat Enterprise Linux 7 툴을 사용하여 I/O 또는 파일 시스템 구성 세부 정보와 관련된 성능 문제를 진단하는 방법을 교육합니다. 8.4절. “구성 툴” Red Hat Enterprise Linux 7의 I/O 및 파일 시스템 관련 성능 문제를 해결하는 데 사용할 수 있는 툴과 전략에 대해 설명합니다.
8.1. 고려 사항
스토리지 및 파일 시스템 성능에 대한 적절한 설정은 스토리지의 목적에 따라 크게 달라집니다. I/O 및 파일 시스템 성능은 다음과 같은 요인의 영향을 받을 수 있습니다.
- 데이터 쓰기 또는 읽기 패턴
- 기본 데이터 정렬
- 블록 크기
- 파일 시스템 크기
- 저널 크기 및 위치
- 액세스 시간 기록
- 데이터 안정성 보장
- 사전 가져오기 데이터
- 디스크 공간 사전 할당
- 파일 조각화
- 리소스 경합
파일 시스템 처리량, 확장성, 응답성, 리소스 사용량 및 가용성에 영향을 주는 포맷 및 마운트 옵션을 이해하려면 이 장을 읽어 보십시오.
8.1.1. I/O 스케줄러
I/O 스케줄러는 I/O 작업이 스토리지 장치에서 실행되는 시기와 시간을 결정합니다. 또한 I/O 카운터라고도 합니다.
Red Hat Enterprise Linux 7은 세 가지 I/O 스케줄러를 제공합니다.
- 데드라인
- SATA 디스크를 제외한 모든 블록 장치의 기본 I/O 스케줄러입니다.
데드라인
은 요청이 I/O 스케줄러에 도달하는 시점부터 요청에 대해 보장된 대기 시간을 제공하려고 합니다. 이 스케줄러는 대부분의 사용 사례에 적합하지만 읽기 작업이 쓰기 작업보다 더 자주 발생하는 경우가 많습니다.대기 중인 I/O 요청은 읽기 또는 쓰기 일괄 처리로 정렬된 다음 LBA 순서를 늘리도록 스케줄링됩니다. 애플리케이션이 읽기 I/O에서 차단될 가능성이 높기 때문에 읽기 배치는 기본적으로 쓰기 배치보다 우선합니다. 배치가 처리된 후데드라인
은 프로세서 시간 쓰기 시간이 얼마나 오래되었는지 확인하고 필요에 따라 다음 읽기 또는 쓰기 배치를 예약합니다. 배치당 처리할 요청 수, 쓰기 배치당 발행할 읽기 배치 수, 요청이 만료되기 전의 시간은 모두 구성할 수 있습니다. 자세한 내용은 8.4.4절. “데드라인 스케줄러 튜닝” 을 참조하십시오. - cfq
- SATA 디스크로 식별되는 장치에 대해서만 기본 스케줄러입니다. Completely Fair Queueing scheduler,
cfq
에서는 프로세스를 실시간, 최상의 노력, 유휴 상태의 세 가지 클래스로 나눕니다. 실시간 클래스의 프로세스는 항상 최상의 작업 클래스의 프로세스보다 먼저 수행되며, 이 프로세스는 항상 유휴 클래스의 프로세스보다 먼저 수행됩니다. 즉, 실시간 클래스의 프로세스는 프로세서 시간의 최상의 노력과 유휴 프로세스를 유지할 수 있습니다. 프로세스는 기본적으로 최상의 작업 클래스에 할당됩니다.cfq
는 기록 데이터를 사용하여 애플리케이션이 가까운 시일 내에 더 많은 I/O 요청을 발행할지 여부를 예측합니다. 추가 I/O가 예상되는 경우, 다른 프로세스의 I/O가 처리되기를 기다리는 경우에도cfq
유휴 상태가 새 I/O를 기다립니다.유휴 상태로 유지되기 때문에 cfq 스케줄러는 이러한 목적으로 튜닝되지 않는 한 큰 검색 페널티를 발생하지 않는 하드웨어와 함께 사용해서는 안 됩니다. 또한 이러한 스케줄러를 스택링하면 많은 대기 시간을 유발하기 때문에 호스트 기반 하드웨어 RAID 컨트롤러와 같은 다른 비작업 사용 스케줄러와 함께 사용해서는 안 됩니다.cfq
동작은 구성할 수 있습니다. 자세한 내용은 8.4.5절. “CFQ 스케줄러 튜닝” 에서 참조하십시오. - noop
noop
I/O 스케줄러는 간단한 FIFO(first-in first-out) 스케줄링 알고리즘을 구현합니다. 요청은 간단한 마지막 캐시를 통해 일반 블록 계층에서 병합됩니다. 이는 빠른 스토리지를 사용하는 CPU 바인딩된 시스템에 가장 적합한 스케줄러일 수 있습니다.
다른 기본 I/O 스케줄러 설정 또는 특정 장치에 대해 다른 스케줄러를 지정하는 방법에 대한 자세한 내용은 8.4절. “구성 툴” 을 참조하십시오.
8.1.2. 파일 시스템
Red Hat Enterprise Linux 7에서 지원되는 파일 시스템과 권장 사용 사례, 일반적으로 파일 시스템에서 사용할 수 있는 형식 및 마운트 옵션에 대한 자세한 내용은 이 섹션을 참조하십시오. 이러한 파일 시스템에 대한 자세한 튜닝 권장 사항은 8.4.7절. “성능을 위해 파일 시스템 구성” 에서 확인할 수 있습니다.
8.1.2.1. XFS
XFS는 강력하고 확장성이 뛰어난 64비트 파일 시스템입니다. 이는 Red Hat Enterprise Linux 7의 기본 파일 시스템입니다. XFS는 범위 기반 할당을 사용하며 사전 할당 및 지연된 할당을 포함하여 여러 할당 체계를 갖추고 있어 조각화를 줄이고 성능을 지원합니다. 또한 충돌 복구를 용이하게 할 수 있는 메타데이터 저널링을 지원합니다. XFS는 마운트 및 활성화된 동안 조각 모음 및 확대될 수 있으며 Red Hat Enterprise Linux 7은 여러 XFS별 백업 및 복원 유틸리티를 지원합니다.
Red Hat Enterprise Linux 7.0 GA부터 XFS는 최대 파일 시스템 크기 500TB 및 최대 8 Cryostat 파일 오프셋(sparse 파일)으로 지원됩니다. XFS 관리에 대한 자세한 내용은 Red Hat Enterprise Linux 7 Storage 관리 가이드를 참조하십시오. 특정 목적을 위해 XFS 튜닝에 대한 지원은 8.4.7.1절. “XFS 튜닝” 에서 참조하십시오.
8.1.2.2. Ext4
Ext4는 ext3 파일 시스템의 확장 가능한 확장입니다. 기본 동작은 대부분의 작업 로드에 최적입니다. 그러나 최대 파일 시스템 크기 50TB 및 최대 파일 크기 16TB만 지원됩니다. ext4 관리에 대한 자세한 내용은 Red Hat Enterprise Linux 7 Storage 관리 가이드를 참조하십시오. 특정 목적을 위해 ext4 튜닝 지원의 경우 8.4.7.2절. “ext4 튜닝” 에서 참조하십시오.
8.1.2.3. Btrfs (기술 프리뷰)
Red Hat Enterprise Linux 7의 기본 파일 시스템은 XFS입니다. 비교적 새로운 COW(Copy-On-Write) 파일 시스템인 Btrfs(B-tree 파일 시스템)는 기술 프리뷰로 제공됩니다. 고유한 Btrfs 기능 중 일부는 다음과 같습니다.
- 전체 파일 시스템이 아닌 특정 파일, 볼륨 또는 하위 볼륨의 스냅샷을 생성하는 기능
- 저렴한 디스크 (RAID)의 중복 배열의 여러 버전 지원
- 맵 I/O 오류를 파일 시스템 오브젝트에 역참조
- 투명한 압축(파티션의 모든 파일이 자동으로 압축됨)
- 데이터 및 메타 데이터에 대한 체크섬입니다.
Btrfs는 안정적인 파일 시스템으로 간주되지만 지속적인 개발 상태에 있으므로 복구 툴과 같은 일부 기능은 더 성숙한 파일 시스템에 비해 기본 기능입니다.
현재 Btrfs를 선택하는 것은 고급 기능(예: 스냅샷, 압축, 파일 데이터 체크섬)이 필요하지만 성능이 상대적으로 중요하지 않은 경우 적합합니다. 고급 기능이 필요하지 않은 경우 시간이 지남에 따라 실패와 성능이 비교할 수 있으므로 다른 파일 시스템을 선호합니다. 다른 파일 시스템과 비교하여 또 다른 단점은 지원되는 최대 파일 시스템 크기 50TB입니다.
8.1.2.4. GFS2
GFS2(Global File System 2)는 Red Hat Enterprise Linux 7에 클러스터형 파일 시스템 지원을 제공하는 고가용성 애드온의 일부입니다. polkit2는 클러스터의 모든 서버에서 일관적인 파일 시스템 이미지를 제공하므로 서버가 단일 공유 파일 시스템에서 읽고 쓸 수 있습니다.
polkit2는 최대 파일 시스템 크기 100TB로 지원됩니다.
PKCS2 관리에 대한 자세한 내용은 Global File System 2 가이드 또는 Red Hat Enterprise Linux 7 Storage 관리 가이드를 참조하십시오. 특정 목적을 위해 polkit2 튜닝에 대한 자세한 내용은 8.4.7.4절. “collectd2 튜닝” 에서 참조하십시오.
8.1.3. 파일 시스템의 일반 튜닝 고려 사항
이 섹션에서는 모든 파일 시스템에 공통된 튜닝 고려 사항에 대해 설명합니다. 파일 시스템과 관련된 튜닝 권장 사항은 8.4.7절. “성능을 위해 파일 시스템 구성” 을 참조하십시오.
8.1.3.1. 형식 시 고려 사항
일부 파일 시스템 구성 결정은 장치를 포맷한 후에는 변경할 수 없습니다. 이 섹션에서는 스토리지 장치를 포맷하기 전에 수행해야 하는 결정에 사용할 수 있는 옵션에 대해 설명합니다.
- 크기
- 워크로드에 맞게 적절하게 크기의 파일 시스템을 생성합니다. 소규모 파일 시스템은 백업 시간이 비례적으로 단축되며 파일 시스템 검사를 위해 더 적은 시간과 메모리가 필요합니다. 그러나 파일 시스템이 너무 작으면 성능이 저하됩니다.
- 블록 크기
- 블록은 파일 시스템의 작업 단위입니다. 블록 크기는 단일 블록에 저장할 수 있는 데이터의 양을 결정하므로 한 번에 쓰거나 읽는 최소 데이터 양을 결정합니다.기본 블록 크기는 대부분의 사용 사례에 적합합니다. 그러나 블록 크기(또는 여러 블록의 크기)가 일반적으로 읽거나 쓰는 데이터 양보다 크거나 같으면 파일 시스템이 더 효율적으로 데이터를 저장합니다. 작은 파일은 여전히 전체 블록을 사용합니다. 파일이 여러 블록에 분산될 수 있지만 이로 인해 추가 런타임 오버헤드가 발생할 수 있습니다. 또한 일부 파일 시스템은 특정 수의 블록으로 제한되며, 이는 파일 시스템의 최대 크기를 제한합니다.블록 크기는 mkfs 명령을 사용하여 장치를 포맷할 때 파일 시스템 옵션의 일부로 지정됩니다. 블록 크기를 지정하는 매개 변수는 파일 시스템에 따라 다릅니다. 자세한 내용은 파일 시스템의 mkfs 도움말 페이지를 참조하십시오. 예를 들어 XFS 파일 시스템을 포맷할 때 사용 가능한 옵션을 보려면 다음 명령을 실행합니다.
$ man mkfs.xfs
- Cryostat
- 파일 시스템은 파일 시스템에서 데이터를 배포하는 것과 관련이 있습니다. 시스템에서 RAID와 같이 스트라이핑된 스토리지를 사용하는 경우 장치를 포맷할 때 데이터 및 메타데이터를 기본 스토리지와 조정하여 성능을 향상시킬 수 있습니다.많은 장치는 특정 파일 시스템으로 장치를 포맷할 때 자동으로 설정하는 것이 좋습니다. 장치가 이러한 권장 사항을 내보내지 않거나 권장 설정을 변경하려면 mkfs 를 사용하여 장치를 포맷할 때 수동으로 지정해야 합니다.파일 시스템을 지정하는 매개변수는 파일 시스템에 따라 다릅니다. 자세한 내용은 파일 시스템의 mkfs 도움말 페이지를 참조하십시오. 예를 들어 ext4 파일 시스템을 포맷할 때 사용 가능한 옵션을 보려면 다음 명령을 실행합니다.
$ man mkfs.ext4
- 외부 저널
- 저널링 파일 시스템은 작업이 실행되기 전에 저널 파일에서 쓰기 작업 중에 수행할 변경 사항을 설명합니다. 이렇게 하면 시스템 충돌 또는 정전 시 스토리지 장치가 손상될 가능성이 줄어들고 복구 프로세스의 속도가 빨라집니다.메타데이터 집약적인 워크로드는 저널에 매우 자주 업데이트됩니다. 더 큰 저널은 더 많은 메모리를 사용하지만 쓰기 작업의 빈도를 줄입니다. 또한 기본 스토리지만큼 빠르거나 더 빠른 전용 스토리지에 저널을 배치하여 메타데이터 집약적인 워크로드가 있는 장치의 검색 시간을 개선할 수 있습니다.주의외부 저널이 신뢰할 수 있는지 확인합니다. 외부 저널 장치를 손실하면 파일 시스템이 손상됩니다.마운트 시 저널 장치를 지정하고 형식 시 외부 저널을 생성해야 합니다. 자세한 내용은 mkfs 및 mount 도움말 페이지를 참조하십시오.
$ man mkfs
$ man mount
8.1.3.2. 마운트 시 고려 사항
이 섹션에서는 대부분의 파일 시스템에 적용되는 튜닝 결정에 대해 설명하고 장치가 마운트될 때 지정할 수 있습니다.
- 장애 발생
- 파일 시스템 부족을 통해 파일 시스템 메타데이터를 영구 스토리지에 올바르게 작성하고 정렬할 수 있도록 하며
fsync
로 전송된 데이터는 정전 시 유지됩니다. 이전 버전의 Red Hat Enterprise Linux에서 파일 시스템 부족을 사용하면fsync
에 크게 의존하는 애플리케이션의 속도가 크게 느려지거나 많은 작은 파일을 생성 및 삭제할 수 있습니다.Red Hat Enterprise Linux 7에서 파일 시스템 장벽 성능을 개선하여 파일 시스템 장애를 비활성화함으로써 성능상의 영향은 무시할 수 없습니다(3% 미만). - 액세스 시간
- 파일을 읽을 때마다 액세스가 발생한 시간(시간)으로 메타데이터
가
업데이트됩니다. 추가 쓰기 I/O가 포함됩니다. 대부분의 경우 이 오버헤드는 기본적으로 Red Hat Enterprise Linux 7에서 마지막 수정 시간(mtime
) 또는 상태 변경 시간보다 이전 액세스 시간이 지난 경우에만a
필드를 업데이트합니다.time
그러나 이 메타데이터를 업데이트하는 데 시간이 오래 걸리는 경우, 정확한 액세스 시간 데이터가 필요하지 않은 경우noatime
마운트 옵션을 사용하여 파일 시스템을 마운트할 수 있습니다. 이렇게 하면 파일을 읽을 때 메타데이터에 대한 업데이트가 비활성화됩니다. 또한 디렉터리를 읽을 때 메타데이터에 대한 업데이트를 비활성화하는nodiratime
동작을 활성화합니다. - Read-ahead
- 미리 읽기 동작은 곧 필요할 가능성이 있는 데이터를 미리 가져와서 페이지 캐시에 로드하여 파일 액세스 속도를 높이며 디스크에 있는 경우보다 빠르게 검색할 수 있습니다. read-ahead 값이 높을수록 시스템이 데이터를 미리 가져옵니다.Red Hat Enterprise Linux는 파일 시스템에 대해 감지한 내용에 따라 적절한 read-ahead 값을 설정하려고 합니다. 그러나 정확한 탐지가 항상 가능한 것은 아닙니다. 예를 들어 스토리지 배열이 단일 LUN으로 시스템에 표시되는 경우 시스템은 단일 LUN을 감지하고 배열에 대한 적절한 읽기-마운드 값을 설정하지 않습니다.순차적 I/O를 많이 스트리밍하는 워크로드는 종종 높은 읽기-ahead 값의 이점을 얻을 수 있습니다. Red Hat Enterprise Linux 7에서 제공되는 스토리지 관련 tuned 프로필은 LVM 스트라이핑을 사용하는 것처럼 read-ahead 값을 높이지만 이러한 조정은 모든 워크로드에 항상 충분하지는 않습니다.미리 읽기 동작을 정의하는 매개변수는 파일 시스템에 따라 다릅니다. 자세한 내용은 마운트 도움말 페이지를 참조하십시오.
$ man mount
8.1.3.3. 유지 관리
파일 시스템에서 사용하지 않는 블록을 정기적으로 삭제하는 것은 솔리드 스테이트 디스크와 씬 프로비저닝된 스토리지 모두에 권장되는 방법입니다. 사용되지 않는 블록을 삭제하는 방법에는 배치 삭제 및 온라인 삭제의 두 가지 방법이 있습니다.
- 배치 삭제
- 이러한 유형의 삭제는 fstrim 명령의 일부입니다. 파일 시스템에서 사용되지 않는 모든 블록을 관리자가 지정한 기준과 일치시킵니다.Red Hat Enterprise Linux 7은 물리적 삭제 작업을 지원하는 XFS 및 ext4 형식 장치에서 배치 삭제 기능을 지원합니다(즉,
/sys/block/devname/queue/discard_max_bytes
의 값이 0이 아닌 HDD 장치,/sys/block/devname/queue/discard_granularity
값이0
이 아닌 SSD 장치). - 온라인 삭제
- 이 유형의 삭제 작업은 마운트 시
삭제
옵션을 사용하여 구성되며 사용자 개입 없이 실시간으로 실행됩니다. 그러나 온라인 삭제는 사용에서 무료로 전환되는 블록만 삭제합니다. Red Hat Enterprise Linux 7은 XFS 및 ext4 형식의 장치에서 온라인 삭제 기능을 지원합니다.성능을 유지하기 위해 온라인 삭제가 필요한 경우 또는 시스템 워크로드에 배치 삭제가 불가능한 경우를 제외하고 배치 삭제가 권장됩니다. - 사전 할당
- 사전 할당은 해당 공간에 데이터를 쓰지 않고 파일에 디스크 공간을 할당한 것으로 표시합니다. 이는 데이터 조각화 및 잘못된 읽기 성능을 제한하는 데 유용할 수 있습니다. Red Hat Enterprise Linux 7은 마운트 시 XFS, ext4 및 Cryostat2 장치의 사전 위치 공간을 지원합니다. 파일 시스템의 적절한 매개 변수에 대한 마운트 도움말 페이지를 참조하십시오. 애플리케이션은
fallocate(2)
glibc
호출을 사용하여 사전 위치 지정 공간을 활용할 수도 있습니다.