성능 측면에서 dd 명령을 어떻게 해석합니까?

성능 측면에서 dd 명령을 어떻게 해석합니까?

파워PC에서 구동되는 다양한 코어들의 성능을 비교해 보려고 합니다. 이것은 내 테스트 중 하나입니다.

dd if=/dev/zero of=/dev/null bs=1024 count=1000000

커널 버전 중 하나에서 보았습니다.

 8.595918 seconds, 113.6MB/s

다른 커널 버전에서는 다음이 필요합니다.

 8.182470 seconds, 119.3MB/s

내 문제는 내 테스트가 기본적으로 RAM에서 읽고/dev/null에 쓰는 것입니다. 시스템 관점에서 무엇을 설명할 수 있나요? 병목현상이 무엇인지 설명할 수 있나요? 데이터가 충분하지 않은 경우 의미 있는 정보를 얻으려면 어떻게 해야 할까요?

답변1

5% 차이는 노이즈로 간주될 수 있습니다. 즉, 두 테스트 결과 간에 차이가 있다고 결론을 내릴 수 없습니다. ddCPU를 가끔 실행하고 사용하는 것 외에 프로세스도 있고, 두 테스트를 위한 환경도 동일하지 않다는 점을 잊지 마세요 .

테스트 프로세스의 실시간 우선순위를 지정하고 테스트를 몇 번 반복하면 더 나은 데이터를 얻을 수 있습니다. 어쨌든 병목 현상은 CPU와 메모리 액세스입니다. I/O가 없습니다.

답변2

시스템 관점에서 무엇을 설명할 수 있나요?

약 115MB/s의 속도로 1024 바이트 블록 dd에서 데이터를 복사하는 것으로 생각할 수 있습니다 . 그다지 많지 않습니다./dev/zero/dev/null

각 블록 dd복사에는 두 개의 시스템 호출(하나는 to read(), 다른 하나는 to ) 이 필요합니다 write(). 이러한 시스템 호출은 오버헤드를 발생시키며 호출당 1024바이트라는 상당한 영향을 미칠 수 있습니다. 블록 속도가 너무 작기 때문에 시스템이 제로 블록을 얼마나 빨리 전송하는지 측정할 수 없습니다. 그러나 원시 시스템 호출 오버헤드도 측정하지 않습니다.각 호출에 대해 처리되는 1024바이트와 IO 호출에 필요한 장부가 필요합니다. 전화를 거는 것과 꼭 같지도 않습니다 getpid().

관련 정보