대부분의 디스크 벤치마크에 따르면 순차 쓰기 속도는 일반적으로 읽기 속도에 매우 가깝습니다. 내 것은 ~500MB/s 범위에 있습니다.
$ dd if=/dev/zero of=tempfile bs=1M count=5120 conv=notrunc oflag=direct status=progress
5291114496 bytes (5,3 GB, 4,9 GiB) copied, 11 s, 481 MB/s
5120+0 records in
5120+0 records out
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 11,1929 s, 480 MB/s
$ dd if=/dev/zero of=tempfile bs=1024M count=5 conv=notrunc oflag=direct status=progress
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 11 s, 490 MB/s
5+0 records in
5+0 records out
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 10,9524 s, 490 MB/s
보시다시피, bs=1M일 때 dd는 480MB/s 이상의 평균 속도를 보고하고, bs=1024M일 때 dd는 490MB/s 이상의 평균 속도를 보고합니다. (또한 fio는 dd보다 읽기 속도가 20-30MB/s 더 높다고 보고합니다. 이는 흥미롭지만 나에게는 문제가 되지 않습니다.)
$ fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1m --rw=write
....
write: IOPS=146, BW=147MiB/s (154MB/s)(5120MiB/34894msec); 0 zone resets
$ fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1024m --rw=write
....
write: IOPS=0, BW=144MiB/s (151MB/s)(5120MiB/35458msec); 0 zone resets
보시다시피 fio는 bs=1m일 때 약 154MB/s를 보고하고 bs=1024m일 때 151MB/s를 보고합니다. (의외로 수치가 낮네요...)
fio가 파일을 그렇게 느리게 전송하는 원인은 무엇이며, dd 속도에 가깝게 구성하려면 어떻게 해야 합니까?
(그런데 해결책을 찾는 동안 많은 사용자가 실제로 자신의 쓰기가 fio가 보고한 것만큼 느리다고 생각하고 쓰기가 왜 그렇게 느린지 이해하기 위해 질문을 하는 것을 발견했습니다. NVME로 드라이버 테스트를 할 때도 보았습니다. 쓰기 속도는 읽기 속도의 절반이었고 아무도 잘못된 것이 있다는 것을 알아차리지 못하는 것 같았습니다... 그래서 문제는 나보다 더 원치 않는 부작용이 있습니다. 일관된 벤치마크를 얻지 못했습니다.)
답변1
fio의 저자는 차이점에 대한 이유를 다음과 같이 설명했습니다.dd
내가 사용하는 명령은 0을 쓰고 fio
임의의 데이터를 사용하는 것입니다기본적으로. 환경--zero_buffers=1이 문제를 해결했습니다.
fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1024m --rw=write --zero_buffers=1
....
write: IOPS=0, BW=495MiB/s (519MB/s)(5120MiB/10339msec); 0 zone resets
그리고
fio --ioengine=libaio --size=1024m --filename=$HOME/tempfile --direct=1 --loops=5 --name=test --bs=1m --rw=write --zero_buffers=1
....
write: IOPS=474, BW=474MiB/s (497MB/s)(5120MiB/10798msec); 0 zone resets
이제 더 가까운 결과가 나왔습니다. (이러한 결과는 드라이브의 이론적 최대 쓰기 속도에 대한 근사치를 보여 주지만 이 옵션 없이(임의 버퍼를 사용하여) 테스트하면 실제 I/O 성능을 더 잘 반영하는 결과를 제공한다는 점에 유의해야 합니다.)