前几天要写一个取得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
- }
分享到:
相关推荐
要计算CPU利用率,可以使用以下公式: \[ CPU利用率 = \frac{(user + nice + system + iowait)}{user + nice + system + idle + iowait} \] 此外,`top`和`htop`命令也是常用的系统监控工具,它们可以实时显示CPU和...
在Linux系统中,CPU利用率的计算涉及到对/proc文件系统的理解和分析。/proc文件系统是一个虚拟文件系统,它提供了获取系统信息和与内核交互的途径。在这个文件系统中,有两个关键的文件——/proc/cpuinfo和/proc/...
在/proc/stat文件中,有几项关键的统计字段与CPU利用率计算有关,如"user"(用户空间CPU时间)、"nice"(低优先级用户空间CPU时间)、"sys"(内核空间CPU时间)、"idle"(空闲CPU时间)和"IOWait"(等待I/O操作完成...
- 脚本可能通过监控`/proc/stat`文件获取CPU利用率信息,该文件提供了系统运行状态的实时统计。 - 脚本会自动排除自身占用的CPU%,确保计算的CPU使用率反映的是其他进程的使用情况。 - 当CPU使用率低于某个设定...
本文将深入探讨如何利用/Linux/proc/文件系统中的信息来计算CPU利用率。 首先,我们关注的是`/proc/cpuinfo`文件。这个文件提供了关于系统中CPU的详细信息,如处理器型号、频率、缓存大小等。例如,`processor`字段...
在Linux和OpenWRT系统中,CPU使用率是衡量系统性能和资源利用率的重要指标。本文将探讨如何通过编程计算Linux和OpenWRT系统的CPU使用率,以帮助管理员监控和优化系统性能。 首先,CPU使用率是指CPU在一段时间内执行...
2. 获取CPU使用率:调用相应函数获取当前CPU利用率,这可能涉及计算空闲时间与总时间的比例。 3. 显示数据:将CPU利用率数据显示在控制台、GUI界面或者日志文件中。 4. 循环更新:在设定的时间间隔内重复步骤2和3,...
在Java中,我们可以利用`Runtime`类或`ProcessBuilder`类来执行Linux命令,如`top`或`vmstat`,然后解析输出以获取CPU使用率。但是,这种方法可能会受到shell环境的影响,且不够高效。更常见的是使用Java的`java....
在Linux系统中,CPU利用率是衡量系统性能的一个重要指标,它反映了CPU的工作状态和效率。为了更好地理解CPU占用率的计算原理,我们需要先了解以下几个与之相关的基本概念: - **CPU利用率**:指的是CPU被各种任务所...
4. **计时器**:为了计算CPU利用率,源码可能使用`clock_gettime`或`gettimeofday`等函数来获取当前时间,以便计算时间差。 5. **解析算法**:CPU使用率的计算涉及到对原始数据的处理,这可能包括从字符串中提取...
通过比较两次读取之间的数据变化,我们可以计算出CPU的使用率。在Windows系统中,可以使用`QueryPerformanceCounter`和`QueryPerformanceFrequency`函数获取CPU计时信息。 接下来,我们需要在Qt中设计一个界面来...
**Linux平台下的CPU占用率计算** 对于Linux系统,CPU占用率的计算通常是通过对`/proc/stat`文件的解析。该文件包含了系统自启动以来的统计信息,包括CPU时间的详细记录。代码中`getCpuRateForLinux()`方法试图打开...
在Go语言中,读取Linux系统的CPU占用率、CPU温度、内存占用率以及磁盘占用率涉及到了系统监控和性能分析。以下将详细介绍如何利用Go实现这些功能。 1. **CPU占用率** CPU占用率是指CPU在单位时间内用于执行用户...
获取系统整体CPU使用率,可以利用操作系统的API或者系统调用来实现。在Linux系统中,可以通过读取`/proc/stat`文件来获取系统CPU使用情况。这个文件包含了关于CPU的各种统计信息,例如用户态时间(user)、内核态时间...
在Linux系统中,使用Qt库开发应用程序时,可以利用各种系统接口来获取CPU使用率、内存占用、网络流量、磁盘I/O速度以及磁盘剩余空间等关键信息。以下将详细讲解如何通过Qt来实现这些功能。 1. CPU使用率: 在Linux...
2. 数据处理:计算出一定时间间隔内的平均CPU利用率,可能需要考虑多核CPU的情况。 3. 曲线绘制:利用图形库(如Qt、wxWidgets、GTK+或Web前端的D3.js等)将数据可视化为曲线,用户可以调整时间范围、分辨率、颜色等...
本文将详细探讨如何通过SNMP协议读取远程计算机的实时性能参数,特别是CPU利用率和内存使用情况。 #### SNMP基础知识 SNMP的核心组件包括网络管理系统(NMS,Network Management System)、代理(Agent)和管理...