XFS : 마운트는 sunit 및 swidth 옵션보다 우선합니다.


2

MDADM을 사용하여 청크 크기가 256KB 인 RAID-5 어레이에 4 개의 3TB 디스크로 구성된 9TB XFS 파티션이 있습니다.

파티션을 만들 때 최적의 스트라이프 단위와 너비 값 (64 및 192 블록)이 자동으로 감지되고 설정되어 xfs_info가 확인합니다.

# xfs_info /dev/md3
meta-data=/dev/md3               isize=256    agcount=32, agsize=68675072 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=2197600704, imaxpct=5
         =                       sunit=64     swidth=192 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal               bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=64 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

그러나 나는 느린 전송 속도를 겪고 있었고 조사하면서 특별히 파티션을 마운트하지 않으면 -o sunit=64,swidth=192스트라이프 장치는 항상 512로 설정되고 너비는 1536으로 설정되었습니다.

# umount /dev/md3
# mount -t xfs -o rw,inode64 /dev/md3 /data
# grep xfs /proc/mounts
/dev/md3 /data xfs rw,relatime,attr2,delaylog,inode64,logbsize=256k,sunit=512,swidth=1536,noquota 0 0

의도 된 동작입니까? sunit=64,swidth=192매번 마운트를 시작할 수 있다고 생각 하지만 현재 데이터 (로 마운트 된 상태에서 작성된 sunit=512,swidth=1536)가 잘못 정렬되지 않습니까?

운영 체제는 커널 3.2.51이 설치된 Debian Wheezy입니다. 4 개의 하드 디스크는 모두 고급 포맷 디스크입니다 (smartctl 512 bytes logical, 4096 bytes physical). 값에 8을 곱한다는 사실은 이것이 문제가 512와 4096 섹터 크기 디스크의 곱셈 계수와 일치한다는 것을 알면 문제와 관련이 있는지 궁금합니다.

누구든지 이것에 대해 약간의 빛을 비출 수 있습니까? :-)


마운트 옵션은 기존 블록 장치 스트라이프 형상을 기준으로 기존 데이터를 이동할 수 없습니다. 디스크의 데이터가 정렬되었거나 정렬되지 않았습니다. 다행히 정렬은 읽기보다 RAID5에서 쓰기에 훨씬 더 중요합니다. 따라서 VM 이미지, 스왑 파일 또는 제자리에서 다시 작성 될 수있는 다른 항목 (예 : dd conv=notrunc) 없이는 문제가되지 않습니다 .
Peter Cordes

기본 스트라이프 형상의 자동 감지가 작동하지 않는 경우 RAID에서 XFS를 작성하는 방법 은 raid.wiki.kernel.org/index.php/RAID_setup#XFS 를 참조하십시오 .
Peter Cordes

요즘 대부분의 물건에 큰 줄무늬 크기가 적합합니다. 512k 스트라이프 폭이 적당합니다. 하드웨어로 전송되는 I / O 명령은 상당히 큰 단위로 수행 될 수 있으므로 더 작은 스트라이프 크기는 최적의 것보다 작은 하드웨어 명령을 유발하는 경향이 있습니다. raid.wiki.kernel.org/index.php/Performance에 오래된 것들이 있으며 일부 링크가 작동하지 않습니다. 쓰기가 많은 워크로드가있는 경우 요청을 특정 크기 (최대)는 아니지만 순차적 청크로 일괄 처리 할 수있는 RAID5의 작은 청크가 정당화 될 수 있습니다. 쓰기 커버를 전체 스트라이프로 만들려면 청크 크기를 설정하십시오.
Peter Cordes

답변:


3

미스터리에 8을 곱하면 xfs_info가 햇볕 / 폭을 bsize 블록 (일반적으로 4096 바이트)으로 표시하기 때문입니다. -o 또는 fstab을 사용하여 mount에 sunit / swidth를 지정하면 512 바이트 단위로 지정됩니다. 샘플 xfs_info 출력에서 ​​sunit / swidth 번호 뒤에 "blks"문자열을 기록하십시오. 4096 / 512 = 8이므로 미스터리 승수입니다.

man 5 xfs는 mkfs.xfs와 마찬가지로 512B 단위와 관련하여 햇볕이 잘 드는 스탠자에서 이것을 설명합니다.

xfs_info의 맨 페이지로 두 배가되는 man xfs_growfs는 xfs_info의 단위가 bsize 바이트 인 방법을 설명합니다.

혼란 스럽습니다. UI 관점에서 디자인 선택이 매우 잘못되었습니다.

"-o sunit = 64, swidth = 192"를 지정하는 것은 실제로 64 / 8 = 8 및 192 / 8 = 24를 원했기 때문에 잘못된 생각 일 것입니다. 8 배 더 큰 값을 FS에 "하드 코딩"하여 더 큰 숫자로 마운트했습니다. 맨 페이지는 더 낮은 햇볕으로 전환 할 수 없다는 것에 대해 매우 명시 적입니다. 그러나 아마도 시도해 볼 수 있으며 마운트 오류가 있는지 확인하십시오. XFS 용 마운트는 데이터를 먹지 않을만큼 충분히 견고해야하지만 보장 할 수는 없습니다. 오류를 내뱉고 마운트를 거부하거나 지정한 옵션을 무시하고 제정신 옵션으로 마운트해야합니다. 먼저 백업하십시오.

즉, 실제로 8 배 더 큰 sunit / swidth에는 아무런 문제가 없을 수 있습니다. 이것이 정렬에 관한 것이므로 숫자는 여전히 정렬되어 있기 때문입니다. 대부분의 파일이 작은 경우 조각화 문제 나 문제가있을 수 있습니다.

따로 : 내가 지금 작업하고 흥미로운 것을 찾는 것은 1 개의 디스크를 추가하여 md RAID를 늘리거나 바꿀 때 햇볕 / 폭 값을 변경하는 것입니다. 매뉴얼 페이지에서 문자 그대로 디스크 수를 두 배로 늘리지 않으면 sunit을 변경할 수 없지만 너비 변경은 여전히 ​​가능합니다. 이것이 대부분의 경우에 적절한 정렬을하는지 여부는 여전히 남아 있습니다. 실제로이 작업을 수행하는 사람들의 정보는 부족한 것 같습니다.


xfs.org/index.php/... . 마운트 옵션은 512B 단위이므로 HW의 올바른 설정은 sunit=256* 1024/ 512=512swidth=sunit*4=2048입니다.
Peter Cordes

re : RAID 디스크를 추가 한 후 모양 변경 맞습니다. sunit은 변하지 않고 너비 만 변경합니다. sunit은 당신이 경우에만 변경됩니다 mdadm --grow --chunk something_new. 걱정하지 마십시오. 잘못하면 기본 스토리지와 일치하지 않는 지오메트리로 FS를 마운트하는 동안 데이터 및 메타 데이터가 느리게 작성되지만 데이터 손실이 발생할 가능성은 없습니다. 나중에 데이터를 사용할 때 읽기 성능이 저하 될 가능성이 거의 없습니다.
Peter Cordes

또한, Cordes. 나는 의견이 토론에 적합한 장소는 아니라는 것을 알고 있지만 실제로 온라인 에서조차 같은 성으로 다른 사람을 만나는 일은 거의 없습니다.
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.