dd가 예상보다 빠릅니다.

dd가 예상보다 빠릅니다.

dd if=/dev/zero of=tmp.dat bs=1M count=1024 status=progress500G HDD에서 명령을 실행하면 다음과 같은 결과가 나타납니다.

833617920 bytes (834 MB, 795 MiB) copied, 1 s, 829 MB/s
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.41974 s, 756 MB/s

내가 아는 한 SATA의 기계식 드라이브는 약 100MB/s 정도인 것으로 알고 있는데 이것은 가짜인 것 같습니다(756MB/s!).

이것을 확인하기 위해 나는 달려가서 sudo hdparm -t /dev/sda얻었습니다.

/dev/sda:
 Timing buffered disk reads: 350 MB in  3.01 seconds = 116.26 MB/sec

이것이 더 합리적인 것 같습니다(116MB/s).

그러나 상황을 더욱 혼란스럽게 만들기 위해 다른 테스트를 실행했습니다. ( rm tmp.dat;dd if=/dev/zero of=tmp.dat bs=1M count=512 status=progress동일한 작업, 데이터의 절반 복사) 훨씬 더 말도 안되는 결과가 나왔습니다.

512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 0.576224 s, 932 MB/s

기계식 드라이브의 읽기/쓰기 속도는 초당 거의 기가바이트입니다! SATA+HDD에 이 크기의 파일을 복사하는 데 1초(0.576초)도 걸리지 않는 것이 어떻게 가능합니까? dd 보고서와 hdparm 보고서 사이에 차이점이 있는 이유는 무엇입니까? 출력 파일 크기에 따라 변경되는 이유는 무엇입니까?

분명히 여기에 뭔가가 빠졌습니다. *nix 마스터님, 가르쳐 주세요

답변1

당신이 관찰하는 것을 "더러운 페이지 수"그리고 이는 대부분의 최신 운영 체제의 기능입니다. 파일이 작성되면 커널은 물리적으로 데이터를 디스크에 즉시 쓰지 않습니다. 이를 통해 조각화를 방지하기 위해 데이터를 보다 지능적으로 디스크에 쓸 수 있습니다.

이 동작을 비활성화하려면 를 dd실행하십시오 conv=fsync.

관련 정보