TRIM은 SSD에서 mdadm RAID 1의 성능 영향을 방지합니까?

TRIM은 SSD에서 mdadm RAID 1의 성능 영향을 방지합니까?

Red Hat이 SSD에서 mdadm RAID 1을 사용하지 않도록 권장하는 다른 질문에서 이미 언급되었습니다.

Red Hat은 또한 소프트웨어 RAID 레벨 1, 4, 5, 6은 SSD에서 사용하지 않는 것이 좋습니다. 이러한 RAID 수준의 초기화 단계 동안 일부 RAID 관리 유틸리티(예: mdadm)는 체크섬이 제대로 작동하는지 확인하기 위해 저장 장치의 모든 블록에 기록합니다. 이로 인해 SSD 성능이 빠르게 저하됩니다.

나는 이것의 이유를 이해합니다. 하지만 이 글은 이 글이 도착하기 전에 쓰여진 것으로 의심됩니다.mdtrim, 이는 mdadm RAID 1용으로 특별히 설계되었습니다. 그러면 문제가 해결됩니까? TRIM에 대한 나의 이해가 정확하다면 그렇다고 생각하지만 확실하지 않으므로 묻습니다.

하지만 TRIM이 나에게 적합하지 않을 수도 있습니다. 프로덕션 시스템에 이것이 필요하며 mdtrim은 기껏해야 실험적으로 보입니다. 더 중요한 것은 강력한 암호화가 필요하다는 것입니다.연구TRIM은 드라이브의 어느 부분이 실제로 사용 중인지 강조하여 너무 많은 것을 드러낸다는 것을 보여주었습니다. 성능 문제를 피하면서도 여전히 강력한 암호화를 유지할 수 있는 방법이 있습니까? 성능을 위해 일부 블록을 확보하지만 너무 많은 것을 포기할 만큼 많지는 않은 부분 TRIM을 수행할 수 있는지 궁금합니다.

내가 본 한 가지 제안은 각 디스크의 약 80%만 사용하여 mdadm이 초기 검사를 수행한 후에도 여전히 사용되지 않은 소수의 블록이 남아 있도록 하는 것이었습니다. 하지만 이 블록은 이후에 디스크를 사용할 때 가장 먼저 사용되는 블록이 아닐까요? 그것들은 여전히 ​​꽤 빨리 소모될 것이고, 그러면 나 역시 더 나아지지 않을 것입니다, 그렇죠?

답변1

물론, mdtrim( --reserve옵션 참조)을 사용하여 부분 다듬기를 수행하여 항상 일정량의 여유 공간을 다듬지 않은 상태로 남겨둘 수 있습니다. 또는 암호화된 FS에서 dd(1)을 사용하여 큰 파일을 생성하여 일부 공간을 사용할 수도 있습니다. 그러면 해당 공간은 절대로 정리되거나 사용되지 않습니다. 사용되지 않는 공간을 30% 정도만 남기고 정리하면 보안을 크게 손상시키지 않으면서도 많은 성능 이점을 얻을 수 있을 것 같습니다.

제안한 대로 트리밍 대신(새 SSD 또는 ATA로 안전하게 삭제된 SSD에서) 공간의 80%만 사용하여 파티션을 생성하는 대신 오버프로비저닝을 수행하고 이를 대신 사용할 수 있습니다. 그것은 "상당히 빨리 소모되어 더 나아지지 않을 것"이 아닙니다. 이유는 다음과 같습니다.

(간단하게) 디스크에 10000개의 섹터(LBA)가 있다고 가정합니다. 단순화를 위해 절반만 사용하도록 분할하면 LBA 0-4999만 사용하게 되고 LBA 5000-9999는 절대 건드리지 않습니다. 이제 드라이브의 레벨 착용 펌웨어에는 어느 섹터가 사용되지 않았는지 알 수 있는 두 가지 방법이 있습니다. 즉, TRIM에서 지정한 OS와 다시 기록되는 섹터입니다. 따라서 처음으로 LBA 100에 쓰면 LBA 100이 사용됩니다(예: 물리적 블록 123). LBA 100에 두 번째로 쓰면 SSD는 이를 새 위치(예: 물리적 블록 124)에 기록한 다음 LBA 100의 이전 버전(물리적 블록 123)을 사용되지 않음(TRIMed)으로 표시하므로 나중에 SSD가 유휴 상태일 때 가비지 수집을 수행할 수 있으며(해당 지우기 블록의 다른 모든 물리적 블록도 ​​사용되지 않은 경우) 전체 지우기 블록(물리적 쓰기 블록보다 훨씬 큼 - 예: 512KB 대 4KB)을 지울 수 있습니다.

따라서 사용되는 LBA 범위를 절반으로 줄임으로써 드라이브에서 사용할 수 있는 초과 프로비저닝된 물리적 섹터 수가 늘어났습니다. "소진"되지는 않지만 충분히 확보해야 하므로 여유 공간이 부족해지기 전에 조각화(부분적으로 사용되고 동일한 삭제 블록에서 부분적으로 사용되지 않은 물리적 블록)가 사라질 것입니다(그렇지 않으면 SSD 펌웨어). 전체 삭제 블록을 삭제하기 전에 사용된 블록을 다른 위치에 복사해야 하므로 쓰기 증폭, 성능 저하 및 SSD 수명 단축이 발생합니다)

TRIM 명령은 다시 쓰기 전에 사용되지 않은 섹터를 표시하여 처리 속도를 높이고(많은 공간을 잃지 않고) 여전히 유용합니다. 따라서 추가 쓰기를 방지하고 SSD의 수명을 연장합니다.

답변2

구식 답변에 추가하기 위해 최근 RAID1의 고장난 HDD를 SSD로 교체했습니다. 제가 수행한 실험과 연구를 통해 다음을 발견했습니다.

  • Linux md는 ~2.6.39부터 TRIM 명령을 구성 드라이브에 전달하지만 모두 TRIM 명령을 지원하는 경우에만 해당됩니다.
    • HDD+SSD RAID1의 경우 HDD를 실패하고 제거하고 TRIM을 실행한 다음 --re-addHDD를 실행해야 했습니다.
  • TRIM은 를 사용하여 핫 블록 장치에서 수행할 수 있으며 fstrim, Linux md는 이를 SSD로 전달합니다.
  • 초기 RAID1 복구는 전체 SSD에 기록됩니다.
  • mdtrim 스크립트는 아직 실험적이며 수년간 업데이트되지 않았습니다.
  • 과도하게 작성된 블록에 TRIM을 사용하면 SSD 펌웨어의 관점에서 공간을 확보하고 성능을 향상하고 쓰기 증폭을 줄이는 등의 작업을 수행할 수 있습니다.

관련 정보