同様のcgroupがあり、それを設定した場合は、特定のcgroupのCPU使用率をuser.slice
使用または計算する方法を知りたいと思います。CPUAccounting=true
わかりましたcpuacct.usage
cpuacct.stat
cpuacct.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
。