md raid5 폐기 시 매우 느림

md raid5 폐기 시 매우 느림

안녕하세요, md raid 전문가 여러분

raid5에 3x2T Samsung SSD 860 QVO 2TB(일부 KVM VM의 기반으로 사용됨)가 있는 Centos 8(모든 최신 업데이트, 커널 4.18.0-240.1.1.el8_3.x86_64 포함)을 실행하고 다음 작업을 수행할 때 폐기를 포함하면 속도가 느릴 뿐만 아니라 사용할 수 없을 정도입니다. 나는 1.5T LV를 생성한 다음 "mkfs.ext4"를 수행했습니다. 4시간 후 폐기 단계에서 "장치 블록 폐기: 10489856/409148416"이라고 말했고 처음에는 "4시간 동안 25%, 이건 짜증나네요"라고 생각했습니다. 2.5%에 불과하다는 걸 깨달았으니 일주일 정도 얘기를 해보죠!

나는 습격을 중단하고 3개의 개별 드라이브에 대해 blkdiscard를 수행했는데 각각 약 18초가 걸렸습니다.

하드웨어는 HBA 모드용으로 구성한 Smart Array P420i 컨트롤러(특수 드라이버 없음, 모두 기본 Centos 드라이버 사용)가 포함된 HP Proliant DL380p Gen8이므로 단지 패스스루여야 합니다(hw를 사용하는 경우 폐기가 전혀 지원되지 않습니다). 습격).

장치를 폐기한 후 다음과 같이 공격대를 다시 만들었습니다.

mdadm --create /dev/md20 --level=5 --raid-devices=3 --chunk=64 /dev/sd{b,d,e}1

동기화를 위해 밤새도록 두었습니다. 그런 다음 vg를 만들고 lv 생성을 테스트했는데 100M을 삭제하는 데 7분이 걸렸습니다.

root@terrok:~ # lvcreate -nDELME -L100M vgssd2  && date && time mkfs.ext4 /dev/vgssd2/DELME && date && time lvremove -f /dev/vgssd2/DELME;date
  Logical volume "DELME" created.
Mon Dec 21 12:47:42 EST 2020
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done
Creating filesystem with 102400 1k blocks and 25688 inodes
Filesystem UUID: f7cf3bb6-2764-4eea-9381-c774312f463b
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done


real    7m20.095s
user    0m0.004s
sys     0m0.195s
Mon Dec 21 12:55:02 EST 2020
  Logical volume "DELME" successfully removed

real    7m17.881s
user    0m0.018s
sys     0m0.120s
Mon Dec 21 13:02:20 EST 2020
root@terrok:~ #

동일한 시스템에서 비교하면 raid1에 2개의 WDC WDS100T2B0A-00SM50(1T SSD)이 있고 거기에서 폐기 작업이 훨씬 더 빠르게(10G의 경우 4초) 작동합니다.

그런 다음 삼성 SSD 두 개를 가져다가 그중 하나를 RAID1로 만들었습니다. 폐기할 때 최고 속도로 말이죠. 다른 두 드라이브 조합에 대해서도 반복했지만 문제는 없었습니다. 나에게 이것은 raid5의 몇 가지 문제를 지적합니다. 지금은 하나의 핫 스페어가 포함된 raid1에 2개의 SSD가 있고 이것은 적어도 작동하지만 물론 내가 예상했던 것보다 2T 적은 공간입니다.

이것을 raid5에서 사용할 수 있도록 하기 위해 무엇을 할 수 있는지에 대한 제안이 있습니까?

답변1

테스트에서 입증된 바와 같이 RAID5는 실제로 단순한 RAID 1 어레이보다 더 집약적인 작업입니다. 원인 RAID 1은 말 그대로 두 디스크 사이를 동기화하는 것입니다.

반면에 RAID 5는 세 개의 디스크에서 이 모든 계산을 수행해야 합니다.그리고그것들을 동등하게 만드십시오. 적어도 "간단한" RAID 1 어레이와 비교하면 이는 많은 작업입니다.

또한 사이드 바로서 QVO 드라이브는 일반적으로 드라이브의 활동이 일반적으로 프리미엄인 VM 서비스와 같은 로드에 적합하지 않습니다. RAID 5 등과 같은 패리티 어레이도 마찬가지입니다. RAID5 자체의 상황과 배포 전략을 재고하고 싶을 수도 있습니다.

답변2

방금이 문제도 해결했습니다. 나는 raid5의 드라이버를 조사한 결과 raid5가 기본 장치에서 들어오는 폐기 요청을 4k 폐기 요청으로 나누는 것을 발견했습니다. 게다가 꽤 오랫동안 고장나서 devices_handle_discard_safe를 실질적으로 무시합니다. 결과적으로 모든 4k 삭제는 기본 장치와 동기화되어 수행되므로 전체적으로 작업 속도가 더욱 느려집니다. 참고: 곧 LKML에 올릴 예정이므로 계속 지켜봐 주시기 바랍니다. 기존 커널에서 사용할 수 있는 해결 방법에 대해 잘 모르겠습니다.

관련 정보