计算一段时间内cgroup的CPU使用率

迪伦

如果我有这样一个cgroup中user.slice,并已CPUAccounting=true成立了,我不知道怎么一会计算特定cgroup中的CPU占用率在一段时间内(如1秒),即使用cpuacct.usagecpuacct.stat我知道cpuacct.usage 提供了CPU时间(以纳秒为单位),该时间可用于计算CPU百分比,方法是减去一段时间内的两个快照并将其除以同一时间段内系统的总CPU时间(正确我(如果我错了),但是我不确定如何获得一段时间内的总CPU时间。

有什么方法可以获取一段时间内的总CPU时间,或者可以使用其他公式/ cgroup功能来计算CPU使用率?提前致谢 :)

注意:我知道systemd-cgtop,它提供了一些此信息,但是我想以编程方式计算CPU使用率而不必解析systemd-cgtop

震荡器

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(和cat),可以使用类似:的方法read tstart _ < /proc/uptime

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章