我正在编写一个程序,该程序应该有助于“安全”地运行外国代码。我还想获得外部代码的内存利用率和 CPU 计算时间,所以我想我会使用 cgroups。
我创建了一个 cgroup /sys/fs/cgroup/cpuacct/<program name>
,然后将执行外部代码的 PID 添加到 cgroups.procs 文件中。
程序执行后,我尝试/sys/fs/cgroup/cpuacct/<program name>/cpuacct.usage
读取 CPU 时间。
根据这链接我得到的号码位于 USER_HZ。
在阅读并浏览了 sysconf 和 getconf 的手册页后,我运行了以下命令,getconf CLK_TCK
输出为 100。
从 sysconf 手册页来看,这是“每秒时钟滴答数”。那么这是否意味着我可以将从 cpuacct.usage 获得的数字除以 100 以获得以秒为单位的 CPU 计算时间?
因为对于一个简单的 python 程序,我得到的数字平均约为 2.7 亿个 USER_HZ,该程序创建一个包含 0 到 1000 之间所有数字的列表,然后打印该列表的长度。 270 万秒对我来说听起来不太合适。
有人可以向我解释如何从 USER_HZ 转换为毫秒吗?或者也许我对整个过程的理解是错误的。
提前致谢!
答案1
从 sysconf 手册页来看,这是“每秒时钟滴答数”。那么这是否意味着我可以将从 cpuacct.usage 获得的数字除以 100 以获得以秒为单位的 CPU 计算时间?
根据内核文档这里
.../sys/fs/cgroup/cpuacct.usage 给出 CPU 时间(以纳秒为单位)...
因此,您应该将该值除以纳秒(1,000,000,000),而不是除以 USER_HZ。
只有cpuacct.stat
USER_HZ 中的值。