작업/명령/프로그램에 대한 디스크 IO 읽기/쓰기 요약을 표시하는 유틸리티

작업/명령/프로그램에 대한 디스크 IO 읽기/쓰기 요약을 표시하는 유틸리티

나는 Linux 커널에 추적을 허용하는 기능이 있다고 확신합니다.모두애플리케이션 읽기 및 쓰기(IO) 및모두자식이지만 이를 계산하고 표시할 수 있는 유틸리티를 본 적이 없습니다.

time예를 들어, CPU 시간의 경우 간결한 CPU 사용량 정보를 사용하고 얻을 수 있습니다 .

$ time cat --version > /dev/null

real    0m0.001s
user    0m0.001s
sys 0m0.000s

IO에서 비슷한 콘텐츠를 찾고 있습니다.

$ calc_io task
Bytes read: 123456
Bytes written: 0

물론 /proc/$PID/io런타임 정보가 포함된 정보도 있지만 웹 브라우저와 같이 자식 요소를 동적으로 생성하고 삭제하는 애플리케이션을 추적하는 것은 어려운 작업처럼 보입니다. 실행 strace -fF firefox한 다음 생성된 모든 하위 프로세스를 모니터링하고 실시간으로 추적을 시도 한다면 /proc/$PID/io- 아니요, 구현하기가 너무 어려운 것 같습니다. 정보를 얻기 위해 이 파일을 얼마나 자주 폴링하시겠습니까? 아이는 잠시 동안만 존재할 수도 있습니다.

또 다른 아이디어는 을 사용하는 것입니다 cgroups. 그러나 사용하고 싶지 않으면 어떻게 됩니까? 저도 확인해봤는데 /sys/fs/cgroup관련 통계는 전혀 나오지 않더군요.

답변1

이 기사를 접했는데 매우 흥미로웠습니다. 이 질문은 결국 질문이 자연스럽기 때문에 어렵지 않다고 생각합니다.

나는 불완전하고 불완전한 해결책만을 찾을 수 있었습니다. 어쨌든, 아직 질문에 대한 답변이 나오지 않았기 때문에 게시하기로 결정했습니다. 이를 위해서는 systemd 및 cgroups2가 있는 시스템이 필요합니다(귀하의 말씀을 읽었지만 이 솔루션을 보는 것도 흥미로울 수 있습니다). 둘 다 배웠지만 마스터하지는 못했습니다.
저는 아치 기반 Linux 배포판에서만 테스트했습니다.

~]$ cat /etc/systemd/system/user\@1000.service.d/override.conf 
[Service]
Delegate=pids memory io

권한이 없는 사용자로 사용하려면 io 컨트롤러를 "user systemd 하위 트리"에 "위임"해야 하는 것 같습니다(특정 위치를 가리킬 수는 없습니다. man systemd.resource-control.https://systemd.io/CGROUP_DELEGATION.https://wiki.archlinux.org/title/cgroups#As_unprivileged_user)

~]$ cat ~/.config/systemd/user/my.slice 
[Slice]
IOAccounting=true

그런 다음 IOAccounting 지원 슬라이스를 생성하여 프로세스를 실행합니다.

재시작

~]$ cat foo.sh 
#!/bin/sh 

dd if=/dev/random of=/home/yarl/bar bs=1M count=7
dd if=/dev/random of=/home/yarl/bar bs=1M count=3

~]$ systemd-run --user --slice=my.slice /home/yarl/foo.sh

~]$ systemctl --user status my.slice
● my.slice - Slice /my
     Loaded: loaded (/home/yarl/.config/systemd/user/my.slice; static)
     Active: active since Sun 2021-11-07 20:25:20 CET; 12s ago
         IO: 100.0K read, 10.0M written
      Tasks: 0
     Memory: 3.2M
        CPU: 162ms
     CGroup: /user.slice/user-1000.slice/[email protected]/my.slice

nov. 07 20:25:20 pbpro systemd[1229]: Created slice Slice /my.

관련 정보