代码拉取完成,页面将自动刷新
Linux 系统常用 top 来查看CPU的占用率和各Task的CPU占用率。TOP 显示的CPU占用率的数据来源是 /proc/stat 。/proc/stat 个数据字段的具体含义可以参考“Documentation/filesystems/proc.rst”中 “1.8 Miscellaneous kernel statistics in /proc/stat”。内核中该CPU占用率的统计是基于 cpu tick 来统计的,比如 1 个 tick 间隔是 4ms,当 tick 中断到来时,cpu 运行的是哪个task,就把整个 4ms 全部算到这个 task 上。这样统计简单,开销小,针对长时间运行的 task,误差也可以接受。但是如果针对频繁切换的 task,统计误差就会很大,甚至不可接受。
举个简单例子:
$ vim usleep.c
#include <unistd.h>
int main()
{
int i = 0;
for (;;) {
if (!(i++ % 10000))
usleep(1);
}
return 0;
}
$ gcc usleep.c -o usleep
$ taskset -c 1 ./usleep
# 使用 top 观察 CPU 1 的占有率和 usleep task 的CPU占用率。
难度:高
导师: @Xie XiuQi
联系方式:xiexiuqi@huawei.com
项目技术要求:
本题目要求对内核中CPU占有率的统计进行改进,减少误差,能尽量接近真实的CPU 占用率:
参考资料: