43.2. SystemTap을 사용하여 각 파일 읽기 또는 쓰기에 대한 I/O 시간 추적

iotime.stp SystemTap 스크립트를 사용하여 각 프로세스를 읽거나 파일에 쓰는 데 걸리는 시간을 모니터링할 수 있습니다. 이렇게 하면 시스템에서 로드하는 속도가 느린 파일을 결정하는 데 도움이 됩니다.

사전 요구 사항

절차

  • iotime.stp 스크립트를 실행합니다.

    # stap --example iotime.stp

    이 스크립트는 시스템 호출이 열리며, 닫히고, 에서 읽고, 파일에 쓸 때마다 추적합니다. 시스템 호출 액세스에 대한 각 파일에 대해 읽기 또는 쓰기가 완료되는 데 걸리는 마이크로초의 수를 계산하고 데이터 양을 바이트 단위로 계산합니다.

    출력에는 다음이 포함됩니다.

  • 타임스탬프(마이크로초)
  • 프로세스 ID 및 프로세스 이름
  • 액세스 또는 iotime 플래그
  • 액세스한 파일

    프로세스가 데이터를 읽거나 쓸 수 있는 경우 액세스 쌍과 iotime 행이 함께 표시되어야 합니다. 액세스 행은 지정된 프로세스가 파일에 액세스하기 시작한 시간을 나타냅니다. 액세스 행의 끝에는 읽거나 쓰거나 읽은 데이터 양이 표시됩니다. iotime 행에는 읽기 또는 쓰기를 수행하기 위해 프로세스가 걸리는 시간(마이크로초)이 표시됩니다.

iotime.stp 스크립트의 출력은 다음과 유사합니다.

[...]
825946 3364 (NetworkManager) access /sys/class/net/eth0/carrier read: 8190 write: 0
825955 3364 (NetworkManager) iotime /sys/class/net/eth0/carrier time: 9
[...]
117061 2460 (pcscd) access /dev/bus/usb/003/001 read: 43 write: 0
117065 2460 (pcscd) iotime /dev/bus/usb/003/001 time: 7
[...]
3973737 2886 (sendmail) access /proc/loadavg read: 4096 write: 0
3973744 2886 (sendmail) iotime /proc/loadavg time: 11
[...]