매우 큰 파일 시스템 및 높은 IOWAIT에서 성능 향상을위한 옵션


10

SATA 3.0 백플레인을 통해 8x10TB HDD가 장착 된 Ubuntu 16.04 백업 서버가 있습니다. 8 개의 하드 디스크가 RAID6에 조립되어 EXT4 파일 시스템이 사용 중입니다. 이 파일 시스템은 SEEK 작업이 많지만 IO 처리량이 적은 대량의 작은 파일을 저장합니다. 실제로 서로 다른 서버의 많은 작은 파일이 매일 rsnapshot을 통해 스냅 샷됩니다 (여러 개의 INODES가 동일한 파일을 지시합니다. 파일 시스템 (60TB 네트)의 사용량이 50 %를 초과하여 성능이 매우 떨어졌습니다. 사용량이 75 %이고

du -sch /backup-root/

며칠이 걸립니다 (!). 이 기계에는 8 개의 코어와 16G의 RAM이 있습니다. RAM은 OS 파일 시스템 캐시에서 완전히 활용되며 8 개 중 7 개 코어는 IOWAIT로 인해 항상 유휴 상태입니다.

Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          5af205b0-d622-41dd-990e-b4d660c12bd9
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              912203776
Block count:              14595257856
Reserved block count:     0
Free blocks:              4916228709
Free inodes:              793935052
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         2048
Inode blocks per group:   128
RAID stride:              128
RAID stripe width:        768
Flex block group size:    16
Filesystem created:       Wed May 31 21:47:22 2017
Last mount time:          Sat Apr 14 18:48:25 2018
Last write time:          Sat Apr 14 18:48:18 2018
Mount count:              9
Maximum mount count:      -1
Last checked:             Wed May 31 21:47:22 2017
Check interval:           0 (<none>)
Lifetime writes:          152 TB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       513933330
Default directory hash:   half_md4
Directory Hash Seed:      5e822939-cb86-40b2-85bf-bf5844f82922
Journal backup:           inode blocks
Journal features:         journal_incompat_revoke journal_64bit
Journal size:             128M
Journal length:           32768
Journal sequence:         0x00c0b9d5
Journal start:            30179

이런 종류의 파일 시스템 사용 경험이 부족합니다. 이것을 조정하려면 어떤 옵션이 필요합니까? 이 시나리오에서 어떤 파일 시스템이 더 잘 작동합니까? OS 내장 옵션 이외의 다른 캐싱 옵션에 RAM을 포함하는 옵션이 있습니까?

큰 RAID 어셈블리에서 대량의 작은 파일을 어떻게 처리합니까?

감사합니다, 세바스찬


2
더 빠른 디스크, 바람직하게는 SSD. 읽기 캐싱에 가능한 한 많은 RAM. 16GiB는 충분한 RAM과 동일한 행성에도 없습니다. 512GiB 이상에서도 많은 정보를 얻을 수 있습니다. 그리고 물론 RAID 6을 사용하지 마십시오.
Michael Hampton

답장을 보내 주셔서 감사합니다. SSD 옵션을 알고 있지만 데이터 백업을 위해 7000 $ 서버 또는 70000 $ 서버의 차이를 만듭니다. RAM 힌트는 좋은 것이지만 60TB의 네트워크를 의미하는 SEEK 작업을 위해 DISK IO를 완전히 피하면 처녀 같은 파일 시스템 성능 만 얻을 것이라고 두려워합니다. 60TB RAM 캐시 용량? 과거에는 EXT2 / 3 / 4 이외의 다른 파일 시스템을 피했지만 이제는 도움이된다면이 방향으로 옵션을 열 수 있습니다. :)
t2m

이 디스크 구성에서 RAID6 교체에 대한 권장 사항은 무엇입니까?
t2m

1
"사실 서버마다 여러 개의 작은 파일이 rsnapshot을 통해 매일 스냅 샷되는 경우가 많습니다 (여러 개의 INODES가 동일한 파일을 지시합니다." -동일한 inode에 대한 여러 개의 링크 / 이름을 의미한다고 생각합니다. 파일을 하드 링크 할 때 하나의 inode, 그러나 두 개 이상의 링크 / 이름
marcelm

1
친구, 그것이 7000 USD 서버 인 경우 중지 해제 해제. PCIe SSD에 1000 USD를 서버에 추가해도 70k SSD 서버가 될 수는 없습니다.
TomTom

답변:


11

RAID6 어레이에 12x 2TB 디스크를 사용하는 비슷한 (더 작은) 설정이 있으며 동일한 목적 ( rsnapshot백업 서버)에 사용됩니다.

첫째, du -hs그렇게 크고 사용되는 파일 시스템에서 많은 시간이 걸리는 것은 완전히 정상입니다 . 또한 du하드 링크를 고려하여 명백한 IO로드 외에도 상당한 양의 CPU로드가 발생합니다.

파일 시스템 메타 데이터가 LBA 용어로 매우 먼 블록에 위치하여 많은 탐색이 발생하기 때문에 속도가 느려집니다. 일반적인 7.2K RPM 디스크는 약 100 IOPS를 제공하므로 모든 메타 데이터를로드하는 데 며칠이 아닌 몇 시간이 필요한지 알 수 있습니다.

상황을 (비파괴 적으로) 개선하려고 시도 할 수있는 것 :

  • 확실 할 수 없습니다 가진 mlocate/slocate당신의 색인 /backup-root/(당신은 사용할 수 있습니다 prunefs 시설을 하지 않는 것이에) 또는 메타 데이터 캐시 부수고하게 손상 백업 시간을 어떤 severly 것이다;
  • 같은 이유로 피가 실행 du/backup-root/. 필요한 경우 du관심있는 특정 하위 폴더에서만 실행 하십시오.
  • vfs_cache_pressure기본값 (100)에서 더 보수적 인 값 (10 또는 20)으로 낮 춥니 다 . 이것은 커널에게 데이터 캐싱보다는 메타 데이터 캐싱을 선호하도록 지시합니다. 결과적으로 rsnapshot/rsync발견 단계를 가속화해야합니다 .
  • 당신은을 통해 예를 들어, 연속 기입 메타 데이터 캐싱 장치를 추가하는 시도 할 수 lvmcache 또는 Bcach 읽기 . 이 메타 데이터 장치는 분명히 SSD 여야합니다.
  • 사용 가능한 RAM을 늘리십시오.
  • ext4를 사용할 때 inode 할당 문제에주의하십시오 ( 예를 들어 여기 를 읽으 십시오 ). 이것은 성능과 직접 관련이 없지만 ext 기반 파일 시스템에 너무 많은 파일이있을 때 중요한 요소입니다.

시도 할 수있는 다른 것들-그러나 이들은 파괴적인 작업입니다.

  • 모두 XFS를 사용 -ftype하고 -finobt옵션을 설정;
  • 압축 ARC 및 primarycache=metadata설정 (및 읽기 전용 캐시의 경우 L2ARC )과 함께 Linux (ZoL)에서 ZFS를 사용하십시오 .

이 답장을 보내 주셔서 감사합니다. 예상했던대로 지금 읽어야 할 것이 있습니다. vfs_cache_pressure 옵션은 매우 흥미 롭습니다. 나는 지금 몇 분 동안 캐시를 가지고 놀았으며 시스템은 약간 더 반응이 좋았다 (디렉토리 목록, 자동 완성 등). 다른 사항도 확인하고 피드백을 제공하겠습니다. 다시 감사합니다.
t2m

"primarycache = 메타 데이터 설정 (및 읽기 전용 캐시의 경우 L2ARC)." ZFS는 두 가지를 모두 수행 할 수 없습니다. 나는 가장 눈에 띄는 단점을
poige

@poige는 RAM 양이 적기 때문에 L2ARC의 메타 데이터 캐싱 (ARC에 이미 캐시 된 것 외에도)에 대해 이야기했습니다. 결국, 데이터 캐싱은 rsnapshot백업 서버에 큰 영향을 미치지 않아야 합니다.
shodanshok 님의

1
나는 L2ARC의 유일한 것은 그 당시의 메타 데이터 일 뿐이라는 것을 분명히했다. :) RAM 용량에 관해서는 16GB는 해당 HDD 전체 볼륨에 대해 RAM이 전혀 없습니다. 그것의 업그레이드가 어쨌든, 당신은 더 이상 16기가바이트로 제한하는 경우 합리적인 최소 따라서, 1백28기가바이트 주위 없을 것
poige

당신이 맞다 @marcelm : 나는 혼란 -h(완전히 다른 것들을 -H위해 rsync...). 내 답변을 업데이트했습니다.
shodanshok

6

이 파일 시스템은 SEEK 작업이 많지만 IO 처리량이 적은 대량의 작은 파일을 저장합니다.

🎉

이것은 오늘날 많은 사람들을 사로 잡는 것입니다. 아아, 기존의 FS는 여기서 잘 확장되지 않습니다. 이미 가지고있는 설정과 관련하여 몇 가지 조언을 해줄 수 있습니다. HDD의 RAID-6에 대한 EXT4 :

  1. 낮추고 vm.vfs_cache_pressure그것은 1이라고 말할 아래 바이어스 캐싱 등 변경 데이터 대신 이상의 메타 데이터 (아이 노드 dentry)를 향해 자체를 보존하며 구하고 수를 감소시키는 긍정적 인 효과를 가져야
  2. RAM을 더 추가하십시오 . 피기 앱을 실행하지 않는 서버에서는 이상하게 보일 수 있지만 검색을 줄이는 유일한 방법은 16GB 만 있다면 더 많은 메타 데이터를 더 빠른 스토리지에 보관하는 것입니다. RAM 양을 늘리십시오
  3. 내가 말했듯이 EXT4는 사용 사례에 적합하지 않지만 여전히 통증을 완화하기 위해 제공되는 기능 중 일부를 사용할 수 있습니다.
    • 외부 저널 이 지원되므로 SSD (더 나은 미러링)를 추가하고 저널을 그곳에 배치 할 수 있습니다. " ext4 : 외부 저널주의 사항 "을 확인하십시오 .
    • 다음을 사용 하여 저널 모드 를 "모든 데이터 저널링"마운트로 전환하십시오.data=journal
  4. 단일 FS 범위 밖으로 파일을 이동해 보십시오 . 예를 들어, 여기에 LVM-2가있는 경우 더 작은 크기의 볼륨을 생성하고 한동안 사용할 수 있습니다.
    • LVM-2가 없다면 / dev / loop를 사용하여 시도해 볼 수는 있지만 그렇게 편리하지는 않을 것입니다.

UPD. : LSR ( Linux Software RAID ) RAID-6으로 밝혀 졌으므로 여기에 추가 항목이 있습니다.

  1. LSR에는 많은 사람들이 간과하는 것처럼 보이는 자체 튜닝 옵션이 있습니다

— 그것은 처음부터 다시 디자인하지 않고도 개선 될 수있는 것의 대부분 일 것입니다.

파일 시스템 (60TB 네트)이 사용량이 50 %를 초과하여 성능이 매우 떨어집니다. 현재 사용량은 75 %입니다

디스크 공간 점유 수준이 높으면 조각화가 악화되기 때문에 이는 매우 심각한 문제입니다. 그리고 더 많은 조각화는 더 많은 탐색을 의미합니다. 더 이상 50 %에 도달하기 전에 허용 가능한 성능을 제공 한 이유가 더 이상 없습니다. 많은 매뉴얼에는 FS가 75-80 % 뒤에서 자라지 않도록하는 명확한 권장 사항이 있습니다.


raid-6의 ext4가 원하는 방식이 아니라는 것을 분명히 암시하고 있습니다. 권장하는 설정을 간략하게 설명 하시겠습니까?
marcelm

2
실제로 그것을 설명하기에는 너무 복잡한 작업입니다. 어떤 경우에는 파일이 많은 경우에도 기존의 FS를 선택하는 것이 좋으며, 다른 경우에는 처음에는 방법이 없습니다. CEPH가 왜 POSIX FS를 포기하고 DB로 전환했는지에 대한 좋은 소개를 볼 수 있습니다. BTW는 FS를 사용할 때 XFS를 선호했습니다. 아마 똑같이 할 것입니다. RAID-6의 주요 IOPS 승수는 모든 쓰기 작업마다 2 개의 다른 장치에서 패리티를 업데이트해야합니다. 따라서 일종의 RAID-x0 방식 일 것입니다. 즉각적인 압축 지원을 사용하면 RAID-10도 사용하는 것이 좋습니다. 물론 방법이 있습니다 ...
poige

1
… SSD 캐시 (bcache, dm-cache, ZFS의 사내 ZIL + L2ARC)를 사용하여 속도를 더 높이려면 실습에서는 자체적으로 제약 조건을 효과적으로 사용하지 못할 수 있습니다. 이것이 제가 "너무 복잡하다"고 말한 이유입니다. 목표를 달성하기 위해 사용할 수있는 요구 사항과 리소스를 알아야합니다.
poige

1
나는 완전한 해결책을 제시하기에는 너무 많은 것을 요구하고 있음을 이해하지만, 위에서 언급 한 브레인 덤프조차도 비슷한 문제에 직면 한 모든 사람에 대한 추가 연구를위한 좋은 출발점이 될 수 있습니다. thanks :)
marcelm

0

이 경우 RAID6는 큰 도움이되지 않습니다. ZFS와 같은 것은 훨씬 빠른 메타 데이터 및 디렉토리 액세스를 가능하게하고 속도는 동일하게 유지합니다.


0

RAID-6은 드라이브를 스트라이핑하므로 모든 IO가 모든 드라이브로 이동합니다. 작은 파일이 많으면 비효율적입니다. 그러나 이것은 아마도 당신의 주요 문제가 아닙니다 ...

Ext4는 수백만 개의 파일이있는 큰 파일 시스템에는 적합하지 않습니다. XFS를 사용하십시오 . 1,2 PB만큼 큰 XFS 파일 시스템과 10 억 개의 파일로 문제없이 XFS 파일 시스템을 실행하고 있습니다. XFS를 사용하면됩니다 .


0

내 질문에 대답 한 모든 사람에게 감사합니다.

이것은 내가 어떻게 해결했는지입니다.

우선, 보드에 최대량의 RAM을 추가했습니다. 불행하게도, 보드는 최대 64GB의 RAM 만 지원합니다. 확장 후 동작을 관찰했으며 실망했습니다. 사용 가능한 모든 RAM이 IO 캐시에 사용되었지만 RSNAPSHOT-Backup의 성능은 크게 향상되지 않았습니다.

그래서 나는 큰 철퇴를 당겨야했습니다. 2 개의 1TB NVME 디스크를 추가하고 RAID 1에 조립했습니다. 8x 10TB HDD로 구성된 RAID 6은 하나의 RAID 1 (2x 10TB HDD, ext4로 구성) 및 하나의 RAID 5 (6x10TB HDD로 구성)로 분해되었습니다. RAID 1에는 운영 체제와 서버의 작업 복사본이 포함되어 있습니다 (이 드라이브와 하루에 4 번 재 동기화 됨).

RAID5는 이제 BCACHE 지원 장치이며 NVME-RAID 1에 의해 지원되며 ext4로 포맷됩니다. 이 드라이브에는 RSNAPSHOT 사본이 포함되어 있습니다. 매일 밤 파일이 RAID1에서 RAID5로 재 동기화되어 작업 사본과 백업 스냅 샷이 포함 된 이전 RAID6에 비해 RAID5의 IO 처리량이 절반으로 줄어 듭니다. BCache 덕분에 문자 그대로 모든 단일 파일이 디스크에 기록되는 것은 아니지만 하나의 블록에 대한 모든 변경 사항은 몇 번의 단일 파일 변경 사항이 포함되어 있어도 한 번 기록됩니다. 이는 HDD의 IOPS를 더욱 줄였습니다.

마지막으로 RSnapshot 구성을 변경했습니다. 이전에는 31 개의 일일 스냅 샷과 18 개의 월간 스냅 샷이 있었으므로 49 개의 백업 생성이 발생했습니다. 이제 고전적인 7d / 4w / 12m / 1y-Design을 사용하여 백업 생성량을 24로 줄입니다.

이러한 변경 후 (그리고 위에서 언급 한 64GB RAM으로) 한 스냅 샷의 지속 시간은 ~ 20 시간에서 1.5 시간으로 줄었습니다. BCache 장치의 캐시 적중률은 82 %입니다 (정기 작동 6 주 후).

임무 완수. 여러분의 생각과 의견에 감사드립니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.