![프로그램의 디스크 I/O 사용량 측정](https://linux55.com/image/2936/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%98%20%EB%94%94%EC%8A%A4%ED%81%AC%20I%2FO%20%EC%82%AC%EC%9A%A9%EB%9F%89%20%EC%B8%A1%EC%A0%95.png)
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
추가 지침을 확인하세요.