busybox中top计算CPU利用率的原理

top即table of processes的意思,主要用来描述CPU、进程/线程等相关信息。

busybox中的top实现相当于是procps-ng 软件库中top实现的一个简化版本,不管是从显示的内容,还是可用的参数选项,都要少很多。

busybox中top命令计算每个cpu核的利用率的方法如下:

1、get_jiffy_counts()

在该函数中,先打开 /proc/stat 文件,
之后,将cpu_jif的值赋值给prev_jif = cur_jif;
之后,调用read_cpu_jiffy(fp, &cpu_jif[num_cpus]) 读取每个cpu的usr、system等的值,
同时在read_cpu_jiffy()函数中也会讨论当前的cpu总的计数到cpu_jif[i]->total

cpu_jif[] 的定义如下:

struct global结构体定义如下:

2、计算每个CPU利用率调用流程

3、display_cpus()函数

通过分析代码,可以知道该函数就是通过计算两次获取的jif的不同,计算这两次中,变量的差除以total的差,就得到了这段时间某个项目占用该CPU利用率。
如usr:
计算时为SHOW_STAT(usr),定义如下:

其中total_diff的值为两次total 之差。
fmt_100percent_8()的作用是计算usr之差与total_diff之差得到百分比,并将其转化为字符串。

————————————————————

原创文章,转载请注明: 转载自孙希栋的博客

本文链接地址: 《busybox中top计算CPU利用率的原理》

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up