다양한 수준의 CPU 사용률 및 IO 처리량을 사용하여 동일한 시스템에서 CPU 및 IO 집약적 벤치마크를 혼합하고 싶습니다.
불행하게도 CPU에 스트레스를 주지 않고는 높은 IO 로드를 생성할 수 없습니다. C로 작성된 임시 프로그램을 시도한 다음 대역폭 매개변수를 사용하여 rsync를 시도했습니다. 이론적으로 데이터는 CPU 개입 없이 메모리에서 디스크로 전송될 수 있는데, 이것이 바로 DMA의 핵심입니다.
(너무 많은) CPU 로드를 생성하지 않고 프로세스 전반에 걸쳐 일정량의 IO를 생성하는 데 도움이 될 수 있는 API나 프로그램이 있는지 궁금합니다.
답변1
sendfile(2)
커널의 하나의 열린 파일 설명자에서 다른 열린 파일 설명자로의 데이터 복사를 최적화하는 시스템 호출을 살펴봐야 합니다 . 두 파일 설명자가 모두 디스크 파일일 필요는 없습니다. 웹 소켓을 사용할 수도 있습니다.
또한 files 과 함께 사용될 때 O_DIRECT
플래그를 찾으십시오 . open(2)
dma 버퍼에서 사용자 버퍼로 데이터를 다시 복사하지 않고도 읽기/쓰기가 가능하지만 페이지 또는 유사한 페이지에 버퍼를 정렬해야 하며 길이에 대해 페이지 크기의 배수를 사용해야 합니다.
hdparm -t --direct
타이밍 테스트에 이 플래그를 사용할 수 있습니다.
패키지의 일부 명령 sg3_utils
(예: sg_dd
)은 낮은 수준의 디스크 IO를 수행하고 O_DIRECT
옵션도 있습니다.