순차 읽기가 상대적으로 느린 이유는 무엇입니까?
Win10의 CrystalDiskMark는 약 5GB/s(읽기 및 쓰기)를 보고하지만 Linux에서의 성능은 그에 미치지 못합니다. (Windows에서 동일한 드라이브에 수백 GB를 복사하여 붙여넣는 평균 속도는 약 2.5GB/s이므로 여기서는 CDM이 실제 값과 크게 다르지 않다고 생각합니다.)
단순
dd if=/dev/nvme0n1 of=/dev/null bs=1M count=10k
보고는 1.5GB/s에 불과합니다.
다른 NVME(둘 다 Corsair Force MP600 1TB)에서 dd는 1.4GB/s를 보고합니다.
나는 이와 같은 순차 액세스가 모든 저장 장치에서 읽는 데 가장 적합한 경우라고 기대하므로 여기서 무슨 일이 일어나고 있는지 실제로 알지 못합니다.
(StackExchange에서 몇 가지 유사한 질문을 본 적이 있지만 모두 이 "간단한 질문"과는 다른 방향으로 진행됩니다.)
참고: 제가 정확하게 기억한다면 CrystalDiskMark는 "실제 파일"을 사용합니다. 따라서 추가 파일 시스템 오버헤드도 있고 dd 호출이 가능한 한 최고여야 합니다. 그렇지 않습니까?
시스템 메시지:
- 두 NVME 모두 4개의 PCIe 4.0 레인을 통해 연결됩니다.
- 두 NVME의 온도 < 60°C
- 루트로 마운트하는 속도가 빠를수록 제거 속도가 느려집니다.
- Zen2 Threadripper(따라서 PCIe 4.0 레인이면 충분합니다...)
- 커널 5.6.4
- BIOS 업데이트
- NVME 펌웨어 업데이트
올바른 방향으로의 아이디어나 조언은 크게 감사하겠습니다!
답변1
범인은 순차 접근이다. NVME는 동시 요청이 많을 때만 성능을 보여줍니다. 따라서 "cp"는 dd 및 hdparm과 마찬가지로 단일 [순차] 읽기만 발생시킵니다. "병렬성"과 같은 트릭을 사용하여 파일당 cp 프로세스를 생성하면 전체 처리량이 더 높아집니다. 대용량 파일의 경우에도 Windows 탐색기는 이 작업을 수행할 수 있는 것 같습니다(여러 세그먼트를 병렬로 복사 - 적어도 제가 추측하는 바는 그렇습니다).
답변2
진지하게 받아들이고 hdparm
매뉴얼 페이지를 읽으십시오. Linux에서 읽기 성능을 향상시키는 데 도움이 될 수 있는 명령 중 하나는 다음과 같습니다.
sudo hdparm -tT --direct /dev/nvmexxx
성능 측정의 문제 dd
는 분명히 Linux가 메모리에서 페이징하는 방식입니다. 나 자신은 아직도 그것을 완전히 이해하려고 노력하고 있습니다. 나는 Windows에도 동일한 기능이 있다고 생각합니다. 명령이 없기 때문에 숨겨져 있는 것이 더 나을 것입니다 dd
. 내가 아는 바로는 hdparm
운영 체제 주변의 장치 성능을 측정하는 것은 CrystalDiskMark가 수행하는 것과 같습니다.
맨페이지 옵션 --direct
에 설명되어 있습니다 .