NVMe SSD에서 dd가 왜 그렇게 느린가요?

NVMe SSD에서 dd가 왜 그렇게 느린가요?

최근에 봤는데이 비디오여기에서 저자는 dd명령을 사용할 때 RAM 디스크가 HDD/SSD보다 훨씬 빠르다고 설명합니다. 나는 이것이 왜 그런지 이해합니다. 그러나 내가 이해하지 못하는 것은 dd if=/dev/zero of=test.iso bs=1M count=800016GB RAM, 12코어 Ryzen 3600X CPU 및 정격 NVMe SSD를 갖춘 시스템에서 그의 예제 명령을 실행할 때 쓰기 속도가 220MB/s이고 쓰기 속도가 더 빠른 이유입니다. 5GB/s로.

RAM이 항상 더 빠르다는 것은 알지만 너무 느린 것 같아서 뭔가 다른 일이 벌어지고 있는 것 같습니다. 이것이 그가 명령을 사용하는 방식인가요 dd? 내부 내용은 모르겠지만 dd시스템 성능이 제한되는 경우인가요, 아니면 명령이 잘못 사용되는 것인가요?

참고: 정확히 동일한 명령을 두 번째 연속으로 실행한 후 두 번째 쓰기는 1.4GB/s로 더 빨라졌지만 혼란이 해소되지는 않습니다.

답변1

SSD와 같은 NAND 플래시 미디어에는 최소 블록 삭제 크기가 있습니다. 즉, dd더 작은 블록 크기를 사용하여 데이터를 저장하는 경우 SSD 컨트롤러는 블록 내의 위치를 ​​쓰기 위해 블록을 여러 번 지워야 합니다. 최소 블록 삭제 크기가 4M인 경우 1M은 블록을 4번 이상 다시 작성해야 함을 의미합니다. SSD는 동일한 4M 블록을 4번 지워야 합니다.

dd두 번째로 동일한 명령을 실행할 때 속도가 빨라진다 는 사실은 명령이 반복될 때 나타나는 것과 유사하게 커널, 드라이버 및 컨트롤러의 캐싱 및 내부 최적화로 설명할 수 있습니다 find.

내 말은좋은 대답자세히 알아보기 및 @greg-kennedy최소 삭제 블록 크기를 찾는 스크립트dd, 최상의 성능을 위해 블록 크기 값 으로 사용해야 합니다 .

/sys/class/mtd/mtdx/erasesize때로는 개별 장치에 따라 장치 사양이나 읽기를 통해 찾을 수도 있습니다 .

답변2

NVME 드라이브, SATA-SSD 및 SATA HDD가 있는 상당히 오래된 워크스테이션(Lenovo Thinkstation C30)에서 몇 가지 테스트를 수행했습니다.

다음 명령을 실행했습니다(각 장치에 쓰는 데 걸리는 실시간 시간을 측정하기 위해 버퍼에서 플러시하는 것을 포함).

NVME 드라이브:

sudodus@bionic64 /mnt/sd1 $ time ( sudo dd if=/dev/zero of=test.img bs=1M count=8000 status=progress ; sync )
7480541184 byte (7,5 GB, 7,0 GiB) kopierade, 4 s, 1,9 GB/s
8000+0 poster in
8000+0 poster ut
8388608000 byte (8,4 GB, 7,8 GiB) kopierade, 4,86151 s, 1,7 GB/s

real    0m9,243s
user    0m0,014s
sys 0m3,921s

SATA SSD:

sudodus@bionic64 /tmp $ time ( sudo dd if=/dev/zero of=test.img bs=1M count=8000 status=progress ; sync )
8384413696 byte (8,4 GB, 7,8 GiB) kopierade, 11 s, 762 MB/s
8000+0 poster in
8000+0 poster ut
8388608000 byte (8,4 GB, 7,8 GiB) kopierade, 11,0025 s, 762 MB/s

real    0m25,841s
user    0m0,023s
sys 0m3,894s

SATA 하드 드라이브:

sudodus@bionic64 /media/multimed-2/test/test0/temp $ time ( sudo dd if=/dev/zero of=test.img bs=1M count=8000 status=progress ; sync )
8296333312 byte (8,3 GB, 7,7 GiB) kopierade, 18 s, 461 MB/s
8000+0 poster in
8000+0 poster ut
8388608000 byte (8,4 GB, 7,8 GiB) kopierade, 18,3536 s, 457 MB/s

real    0m50,050s
user    0m0,024s
sys 0m3,566s

속도 계산:

$ bc
...
scale=0
8000/9.243
865
8000/25.841
309
8000/50.050
159

실제 쓰기 속도 요약(MiB/s)

NVME: 865
SSD:  309
HDD:  159

그래서 결론은 NVME와 SSD 드라이브의 쓰기 속도가 이론 속도보다 훨씬 낮다는 것입니다. 장치 자체뿐만 아니라 속도를 제한하는 여러 가지 병목 현상이 있을 수 있다는 결론을 내려야 합니다.

나는 비난하지 않습니다 dd. 다른 병목 현상이 있다고 생각합니다. 하지만 제 생각에는 220MiB/s 쓰기 속도는 NVME SSD에 비해 너무 느립니다. (두 번째 결과인 1.4GB/s는 RAM 쓰기 속도만 표시하고 플러시 버퍼는 표시하지 않으므로 무시해도 괜찮을 것 같습니다.)

다음과 같은 경우 NVME 드라이브의 쓰기 속도를 테스트할 수 있습니다.생방송이 시작되었습니다여러 가지 다른 것에서새로운Linux 배포판/버전. 새로운 Linux 커널은 하드웨어에 더 빠른 드라이버를 제공할 수 있습니다.

그런데 NVME 드라이브에는 어떤 파일 시스템이 있나요? Linux는 ext4와 같은 Linux 파일 시스템에서 가장 잘 작동합니다.

답변3

oflag=direct을 추가 하지 않으면 dd쓰기가 버퍼링되어 처리량이 현실적이지 않습니다.

관련 정보