프로그램의 디스크 I/O 사용량 측정

프로그램의 디스크 I/O 사용량 측정

time특정 명령이 소비하는 CPU 시간을 계산하려는 경우 이는 훌륭한 명령입니다.

나는 프로그램과 서브루틴에 대한 디스크 I/O를 측정할 수 있는 비슷한 것을 찾고 있습니다. 캐시된 I/O(디스크 회전을 유발하지 않도록)와 캐시되지 않은 I/O를 구별하는 것이 좋습니다.

그래서 나는하고 싶습니다 :

iomeassure my_program my_args

다음과 유사한 출력을 얻습니다.

Cached read: 10233303 Bytes
Cached write: 33303 Bytes  # This was probably a tmp file that was erased before making it to the disk
Non-cached read: 200002020 Bytes
Non-cached write: 202020 Bytes

vmstat, iostat, 및 을 살펴봤지만 sar이들 중 어느 것도 개별 프로세스를 고려하지 않았습니다. 대신 그들은 전체 시스템을 살펴봅니다.

본 적이 있지만 iotop, 이것은 바로 볼 수 있게 해줄 뿐입니다.

- - 편집하다- -

Snapshot의 답변은 가까운 것 같습니다.

"파일 시스템 입력:"은 512바이트 블록의 캐시되지 않은 읽기입니다.

"파일 시스템 출력:"은 512바이트 블록의 캐시된 쓰기입니다.

다음 명령을 사용하여 캐시를 강제로 지울 수 있습니다.

sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null

내가 테스트한 내용은 다음과 같습니다.

 seq 10000000 > seq
 /usr/bin/time -v bash -c 'perl -e "open(G,\">f\"); print G <>;close G; unlink \"f\";" seq'

답변1

사용 중인 운영 체제를 지정하지 않았습니다.

리눅스

time foo(보통) 내장 쉘을 사용하는 대신 외부 명령을 사용해 볼 수 있습니다 /usr/bin/time foo. 파일 시스템 입력 및 출력 수와 같은 몇 가지 추가 정보를 제공합니다(그러나 캐시 적중이나 바이트 양에 대한 정보는 제공하지 않음). 바라보다man time그리고man getrusage추가 지침을 확인하세요.

이 기능을 사용하려면 Linux 커널 버전 2.6.22 이상이 필요합니다.

FreeBSD

사용 /usr/bin/time -l foo. 입력 및 출력 수를 제공합니다. 바라보다man time그리고man getrusage추가 지침을 확인하세요.

관련 정보