前几天要写一个取得linux performance的函数。查询了一些资料。发现有几种计算cpu利用率的方法。但是都不怎么正确。最后查了以下top的源代码。现列出其计算cpu利用率的关键函数
c 代码
- typedef struct CPU_t {
- TIC_t u, n, s, i, w, x, y, z;
- TIC_t u_sav, s_sav, n_sav, i_sav, w_sav, x_sav, y_sav, z_sav;
- unsigned id;
- } CPU_t;
c 代码
- static CPU_t *cpus_refresh (CPU_t *cpus)
- {
- static FILE *fp = NULL;
- int i;
- int num;
-
- char buf[SMLBUFSIZ];
-
-
-
- if (!fp) {
- if (!(fp = fopen("/proc/stat", "r")))
- std_err(fmtmk("Failed /proc/stat open: %s", strerror(errno)));
-
-
-
- cpus = alloc_c((1 + Cpu_tot) * sizeof(CPU_t));
- }
- rewind(fp);
- fflush(fp);
-
-
- if (!fgets(buf, sizeof(buf), fp)) std_err("failed /proc/stat read");
- cpus[Cpu_tot].x = 0;
- cpus[Cpu_tot].y = 0;
- cpus[Cpu_tot].z = 0;
- num = sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu",
- &cpus[Cpu_tot].u,
- &cpus[Cpu_tot].n,
- &cpus[Cpu_tot].s,
- &cpus[Cpu_tot].i,
- &cpus[Cpu_tot].w,
- &cpus[Cpu_tot].x,
- &cpus[Cpu_tot].y,
- &cpus[Cpu_tot].z
- );
- if (num < 4)
- std_err("failed /proc/stat read");
-
-
- if (Cpu_tot == 1) {
- cpus[1].id = 0;
- memcpy(cpus, &cpus[1], sizeof(CPU_t));
- }
-
-
- for (i = 0; 1 < Cpu_tot && i < Cpu_tot; i++) {
- if (!fgets(buf, sizeof(buf), fp)) std_err("failed /proc/stat read");
- cpus[i].x = 0;
- cpus[i].y = 0;
- cpus[i].z = 0;
- num = sscanf(buf, "cpu%u %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu",
- &cpus[i].id,
- &cpus[i].u, &cpus[i].n, &cpus[i].s, &cpus[i].i, &cpus[i].w, &cpus[i].x, &cpus[i].y, &cpus[i].z
- );
- if (num < 4)
- std_err("failed /proc/stat read");
- }
- return cpus;
- }
c 代码
- static void summaryhlp (CPU_t *cpu, const char *pfx)
- {
-
-
- #define TRIMz(x) ((tz = (SIC_t)(x)) < 0 ? 0 : tz)
- SIC_t u_frme, s_frme, n_frme, i_frme, w_frme, x_frme, y_frme, z_frme, tot_frme, tz;
- float scale;
-
- u_frme = cpu->u - cpu->u_sav;
- s_frme = cpu->s - cpu->s_sav;
- n_frme = cpu->n - cpu->n_sav;
- i_frme = TRIMz(cpu->i - cpu->i_sav);
- w_frme = cpu->w - cpu->w_sav;
- x_frme = cpu->x - cpu->x_sav;
- y_frme = cpu->y - cpu->y_sav;
- z_frme = cpu->z - cpu->z_sav;
- tot_frme = u_frme + s_frme + n_frme + i_frme + w_frme + x_frme + y_frme + z_frme;
- if (tot_frme < 1) tot_frme = 1;
- scale = 100.0 / (float)tot_frme;
-
-
-
- show_special(
- 0,
- fmtmk(
- States_fmts,
- pfx,
- (float)u_frme * scale,
- (float)s_frme * scale,
- (float)n_frme * scale,
- (float)i_frme * scale,
- (float)w_frme * scale,
- (float)x_frme * scale,
- (float)y_frme * scale,
- (float)z_frme * scale
- )
- );
- Msg_row += 1;
-
-
- cpu->u_sav = cpu->u;
- cpu->s_sav = cpu->s;
- cpu->n_sav = cpu->n;
- cpu->i_sav = cpu->i;
- cpu->w_sav = cpu->w;
- cpu->x_sav = cpu->x;
- cpu->y_sav = cpu->y;
- cpu->z_sav = cpu->z;
-
- #undef TRIMz
- }
分享到:
相关推荐
Linux计算CPU利用率
1:封装成一个类,直接调用即可。...3:linux下CPU占用率的计算非常准确,支持多核。 4:硬盘容量计算极速。进度条显示占用比例。 5:多彩数码管实时显示当前时间。 6:自定义颜色下拉框,选择即可看到效果。
注意:请不要下载这个,已经更新为V2版本,解决了一些错误。请下载V2版本 无需依赖第三方包,纯源码,支持Windows和Linux 走过路过不要错过
无需依赖第三方包,纯源码,支持Windows和Linux 走过路过不要错过 更新为2.0版,解决了windows系统中计算错误,适应不同的windows版本和linux版本
描述如何通过SNMP协议通过网络读取远端电脑的实时性能参数
Linux下的CPU利用率计算原理详解.docx Linux操作系统中内存buffer和cache的区别.docx Linux服务器环境搭建(设置).pdf linux简明维护手册.pdf Linux系统命令及其使用详解.doc Linux系统性能监控工具.doc Linux系统...
写一个小程序在后台记录每个进程的CPU使用情况,揪出锁屏后占用CPU的进程,于是自己写了一个C++类CPUusage,方便地监视不同进程的CPU占用情况。本人编程还只是个新手,如有问题请多多指教
4、操作系统中采用多道程序设计技术,以提高CPU和外部设备的利用率。 5、Linux操作系统是多用户多任务系统。 第二章 1、既考虑作业等待时间又考虑作业执行时间的作业调度算法是响应比高者优先算法。 2、从作业提交...
如果能利用现有的计算资源,把空闲的CPU利用起来,或者能让服务器智能的迁移负荷,就是你看下去的理由。 集群的基本单位是单独的计算机,称为节点(node)。其可增长的特性,称为延展性(Scale),也就是向集群中加入...
1.CPU各种信息,包括物理信息以及CPU利用率绘图 2.内存各种信息,包括利用率,内存使用率绘图等 3.进程信息,可以杀死进程,查看进程,以及运行新进程,同时可以查看进程详细信息 4.系统信息,关于系统的信息,如...
CPU性能 节能模式 NUMA CPU利用率计算 服务器硬件性能全文共23页,当前为第3页。 CPU节能模式 好处:在CPU使用率不高时,自动降频,可以省电;在CPU使用率升高时,升频。 风险:频率变化时,对性能有影响,特别是...
许多大学与研究机构都使用Linux完成他们的日常计算任务。人们在家用PC上使用Linux,许多公司也在使用它--尽管他们并不总是乐意承认这点。Linux主要用来浏览WEB,管理WEB站点,撰写与发送EMAIL,以及玩游戏。Linux绝对...
如果内存空间允许,可大大提高CPU的利用率。 将一个以上的作业放在主存中,并且同时处于运行状态 2023/5/31 9 计算机软件基础全文共70页,当前为第9页。 分时系统工作示意图 CPU 终端1 终端2 终端3 终端4 图-22 终端1...
又因I/O设备的低速性,更使CPU的利用率显著降低。 (2)多道批处理系统;作业之间的切换和调度成为核心。其优点是资源利用率高、系统吞吐量大,缺点是平均周转时间长、无交互能力。 (3)分时系统;指在一台主机上...
Linux 是一个以 Intel 系列 CPU(CYRIX,AMD 的 CPU也可以)为硬件平台,完全免费的 UNIX 兼容系统,完全适用于个人的 PC。它本身就是一个完整的 32 位的多用户多任务操作 系统,因此不需要先安装 DOS 或其他的操作...
4.2.7 评估应用程序的CPU利用率问题 95 4.2.8 使用Oracle statspak 98 4.2.9 分配共享内存时“设备上无剩余空间”错误的故障诊断 101 4.2.10 其他性能工具 102 4.3 小结 103 第5章 针对PCMCIA和USB通过...
可以影响计算机正常运行,轻者降低cpu利用率或出现死机,重者导致数据丢失、系统 。 (4)网络物理设备的故障问题。网络中的设备包括计算机、网络通信设备、存储设备、传输设备、防雷系统、抗电磁干扰系统、网络环境都是...
如果没有操作系统的管理,CP U和外部设备就会经常处于空闲状态,尤其是CPU更是"一天打鱼,千天晒网",操作系统 通过合理地组织计算机的工作流程,更改善系统的资源利用率并提高系统的吞吐量;三 是提供应用软件的...
最初的人们是没 有操作系统来对计算机加以控制的,一直都处于人工管理方式来对计算机进行操作和管 理,人机交互之间出现了人工手动的低速和计算机的高速处理形成了尖锐的矛盾,资源 利用率非常的低,从而导致计算机...
Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux...