一定期間 cgroup の CPU 使用量を計算します。

一定期間 cgroup の CPU 使用量を計算します。

同様のcgroupがあり、それを設定した場合は、特定のcgroupのCPU使用率をuser.slice使用または計算する方法を知りたいと思います。CPUAccounting=trueわかりましたcpuacct.usagecpuacct.statcpuacct.usage CPU時間提供(ナノ秒単位で測定)CPUパーセントは、一定期間の2つのスナップショットを差し引いて、同じ期間のシステムの合計CPU時間で割ることで計算できます(間違っている場合は訂正してください)。一定期間の総CPU時間を取得する方法がわからない。

一定期間の合計CPU時間を取得するか、別の公式/ cgroup関数を使用してCPU使用率を計算する方法はありますか?よろしくお願いします:)

メモ:わかりましたsystemd-cgtop。そのような情報を提供しますが、解析せずにプログラムでCPU使用率を計算したいと思います。systemd-cgtop

ベストアンサー1

CPU使用率のパーセンテージは、壁時計の経過時間に対するCPU活動時間の合計の割合です。ある CPU 時間を別の CPU 時間と比較しようとすると、パーセンテージは使用されません。これは名前がなく、1つの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

おすすめ記事