소프트웨어 RAID10 설정이 작은 파일을 매우 느리게 기록하는 것이 정상입니까?

소프트웨어 RAID10 설정이 작은 파일을 매우 느리게 기록하는 것이 정상입니까?

1.2 메타데이터 및 기본 블록 크기(512K)를 사용하여 Linux 3.16.6-203.fc20.x86_64에서 소프트웨어 RAID-10을 설정했습니다.

$ cat /proc/mdstat
md0 : active raid10 sdc1[4] sdb1[0] sdd1[2] sde1[3]
      3907023872 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      bitmap: 4/30 pages [16KB], 65536KB chunk

unused devices: <none>

파일 시스템은 RAID-10 볼륨 그룹 위에 있는 LVM 위에 있는 ext4입니다.

$ df -k .
Filesystem                     1K-blocks      Used  Available Use% Mounted on
/dev/mapper/vg_raid10-lv_home 2015734504 810039552 1103278568  43% /home

설치 옵션 포함:

$ mount | grep vg_raid10-lv_home
/dev/mapper/vg_raid10-lv_home on /home type ext4 (rw,relatime,seclabel,stripe=256)

모든 것이 괜찮아 보입니다. SMART는 모든 디스크가 재할당되거나 보류되거나 오프라인된 섹터 없이 완전히 정상임을 의미합니다. 원시 동기 쓰기 처리량은 꽤 좋아 보입니다.

$ dd if=/dev/zero of=tmp.bin bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 7.85743 s, 137 MB/s

그러나 작은 100b(편집: 답변에서 지적했듯이 100바이트 청크가 아닌 512바이트 청크를 쓰고 있습니다.)를 RAID 어레이에 추가합니다.극도로느림(동기 쓰기당 ~84ms):

$ dd if=/dev/zero of=tmp.bin bs=512 count=1000 oflag=dsync
1000+0 records in
1000+0 records out
512000 bytes (512 kB) copied, 84.2859 s, 6.1 kB/s

내 RAID-10 구성에서 이것이 정상입니까?

답변1

O_*SYNCRAID10은 어떤 종류의 파일 , 적어도 작은 파일의 속도를 높이지 않습니다 . 한 번에 512b를 쓰며, 각 쓰기 후에 강제로 디스크에 기록됩니다(파일 크기와 같이 다시 읽는 데 필요한 메타데이터도 포함).

이를 위해서는 최소 2개 디스크, 가능하면 4개(즉, 모든 디스크)에 RAID10 쓰기가 필요합니다. 이러한 모든 쓰기는 dd를 반환하기 전에 완료되어야 합니다. 이는 O_DSYNC필수 보장이기 때문입니다.

답변2

귀하의 dd 명령은 SSD에서 73.7kB/s를 제공했습니다. 그렇죠, 그게 정상인 것 같아요. 아니면 오히려 dd는 좋은 벤치마크가 아닙니다.

RAID는 확실히 작은 파일에 대해서는 가속을 수행하지 않습니다. 액세스 시간은 여전히 ​​동일하게 유지됩니다. HDD의 경우 작은 파일의 경우 가장 많은 노력이 필요합니다. 먼저 읽기 헤드를 파일의 물리적 주소로 가져오는 것은 실제로 읽는 것보다 오래 걸립니다.

(4K 섹터 디스크가 있는 경우 전체 섹터보다 적은 데이터를 쓰기 위해 디스크가 몇 가지 특수 작업을 수행해야 하기 때문에 속도가 더욱 느려집니다.)

답변3

"100b"(바이트? 청크? 의도가 무엇입니까?) 청크를 수행하는 것이 아니라 512바이트 청크를 수행하고 있습니다. RAID는 512k 블록을 사용하기 때문에 항상 느립니다. 이는 다음을 의미합니다.모든512바이트 RAID 시스템은 512k 블록을 읽고, 블록의 512바이트를 업데이트하고, 패리티를 계산하고, 데이터 + 패리티를 디스크에 써야 합니다. 작성 중인 1000개 블록 각각에 대해 업데이트, 패리티 계산 및 512k + 512k 패리티 쓰기를 수행해야 합니다. 읽기는 버퍼 캐시에 저장되기 때문에 한 번만 수행되며 전체 작업은 하나의 RAID 블록만 차지합니다.

네, 이것은 정상입니다. 이러지 마세요 :-)

편집: 위의 내용은 RAID5에 해당됩니다. RAID10에서는 패리티가 계산되지 않지만 dd각 512바이트 블록에 대해 여전히 2개의 512k 쓰기(각 미러당 하나씩)가 있습니다. 따라서 여전히 총 ​​1000MB의 콘텐츠를 작성했고 512k만 업데이트했습니다. 어쩌면 시스템이 새로운 섹터만 쓸 만큼 똑똑할 수도 있지만, 나는 그렇지 않을 것이라고 강하게 의심합니다. 또한 쓰기 의도 비트맵 업데이트를 고려하세요.

관련 정보