일정 기간 동안 cgroup의 CPU 사용량을 계산합니다.

일정 기간 동안 cgroup의 CPU 사용량을 계산합니다.

유사한 cgroup이 있고 이를 설정한 경우 일정 기간(예: 1초) 동안 해당 특정 cgroup의 CPU 사용량을 user.slice사용하거나 계산하는 방법을 알고 싶습니다 . CPUAccounting=true알아요cpuacct.usagecpuacct.statcpuacct.usage CPU 시간 제공(나노초 단위로 측정됨) CPU 백분율은 일정 기간 동안의 두 스냅샷을 빼고 이를 같은 기간 동안 시스템의 총 CPU 시간으로 나누어 계산할 수 있습니다(틀리면 정정해 주세요). 일정 기간 동안 총 CPU 시간을 얻는 방법을 잘 모르겠습니다.

일정 기간 동안 총 CPU 시간을 얻거나 다른 공식/cgroup 함수를 사용하여 CPU 사용량을 계산하는 방법이 있습니까? 미리 감사드립니다 :)

노트:알아요 systemd-cgtop. 그러한 정보를 제공하지만 구문 분석 없이 프로그래밍 방식으로 CPU 사용량을 계산하고 싶습니다.systemd-cgtop

답변1

CPU 사용량 백분율은 벽시계 경과 시간에 대한 총 CPU 활동 시간의 비율입니다. 한 CPU 시간을 다른 CPU 시간과 비교하려고 하면 백분율을 사용하지 않습니다. 이것은 이름이 없으며 단지 한 CPU 시간과 다른 CPU 시간의 비율일 뿐입니다.

이미 경과된 CPU 시간을 얻는 방법(기간 전후의 CPU 시간 차이를 계산하여)을 알고 있다고 말했으므로 이를 벽시계 시간으로 나누면 됩니다.

cgroup=$(awk -F: '$2 == "cpu,cpuacct" { print $3 }' /proc/self/cgroup)

tstart=$(date +%s%N)
cstart=$(cat /sys/fs/cgroup/cpu/$cgroup/cpuacct.usage)

sleep 5

tstop=$(date +%s%N)
cstop=$(cat /sys/fs/cgroup/cpu/$cgroup/cpuacct.usage)

bc -l <<EOF
($cstop - $cstart) / ($tstop - $tstart) * 100
EOF

date(and ) 호출을 피하려면 cat다음과 같이 사용할 수 있습니다 read tstart _ < /proc/uptime.

관련 정보