DM-Integrity가 BTRFS보다 느린 이유는 무엇입니까?

DM-Integrity가 BTRFS보다 느린 이유는 무엇입니까?

BTRFS가 파일을 감지하는 방법과 유사하게 블록 장치의 자동 손상을 감지하고 싶습니다. BTRFS에서 허용하는 것보다 더 많은 매개 변수를 조정할 수 있도록 BTRFS에서 이 작업을 수행하고 BTRFS의 기본 체크섬을 비활성화하고 싶습니다. DM-Integrity가 최선의 선택인 것 같습니다. 원칙적으로 BTRFS와 동일한 작업을 수행해야 합니다.

문제는 엄청나게 느리고 사용할 수 없다는 것입니다. BTRFS의 순차 쓰기 속도는 170MiB/s 이상(압축 비활성화됨)인 반면 DM-Integrity의 순차 쓰기 속도는 8~12MiB/s입니다. DM-Integrity 매개변수를 BTRFS(섹터 크기, 해시 알고리즘 등)와 일치시키고 다른 매개변수(데이터 인터리브, 비트맵, 기본 대 범용 해시 드라이버 등)의 다양한 조합을 시도했습니다.

쓰기는 비동기식이지만 쓰기를 커밋하는 데 걸리는 시간을 기준으로 속도가 계산됩니다(따라서 메모리 캐싱으로 인한 차이는 아닌 것 같습니다). 모든 것이 쓰기 순서를 재정렬해야 하는 쓰기 통과 Bcache 위에 있습니다(그래서 BTRFS 재정렬 쓰기일 수는 없다고 생각합니다). 이 엄청난 성능 차이를 설명할 다른 이유는 생각나지 않습니다.

저는 Debian 11과 자체 컴파일된 6.0.12 Linux 커널을 사용하고 있으며 해싱 알고리즘으로 sha256을 사용하고 있습니다. 내 블록 레이어는 (dm-integrity 또는 btrfs)/lvm/dm-crypt/bcache/dm-raid입니다.

내 테스트에 결함이 있나요? 아니면 이 엄청난 성능 차이에 대한 다른 설명이 있습니까? BTRFS와 비슷한 성능을 얻기 위해 DM-Integrity를 ​​사용하여 일부 매개변수를 변경할 수 있습니까?

답변1

이전 테스트에서 최소 2개의 결함을 발견했지만 차이점이 완전히 설명되는지는 아직 알 수 없습니다. 로그/비트맵 모드나 무결성 알고리즘은 모두 DM-Integrity 슈퍼블록에 저장되지 않습니다. 포맷할 때 이러한 옵션을 제공했지만 활성화할 때는 제공하지 않았기 때문에 기본값(로그 모드 및 sha256)으로 되돌아갔습니다.

로그 모드는 성능에 큰 영향을 미치며, 이는 아마도 차이점의 대부분을 설명할 것입니다. 실제 영향을 이해하려면 여전히 모든 테스트를 다시 만들어야 합니다.

관련 정보