MCPcopy Create free account
hub / github.com/Tencent/phxqueue / GetCpuInfo

Function GetCpuInfo

phxqueue/comm/utils/load_util.cpp:63–156  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

61};
62
63void GetCpuInfo(CpuInfo &cpu_info) {
64 CpuInfo new_cpu_info;
65
66 char *line{nullptr};
67 size_t len{0};
68 ssize_t read;
69
70 bool is_read_cpu_info{false};
71
72 FILE *proc_fp = fopen("/proc/stat", "r");
73 if(NULL == proc_fp) {
74 cpu_info = CpuInfo();
75 return;
76 }
77
78 while ((read = getline(&line, &len, proc_fp)) != -1) {
79 if (strncmp(line, "cpu", 3) == 0) {
80 char *p = line;
81
82 while (isspace(*p))
83 p++;
84 while (*p && !isspace(*p))
85 p++;
86
87 new_cpu_info.use = strtoull(p, &p, 10);
88 new_cpu_info.nice = strtoull(p, &p, 10);
89 new_cpu_info.sys = strtoull(p, &p, 10);
90 new_cpu_info.idle = strtoull(p, &p, 10);
91 new_cpu_info.iowait = strtoull(p, &p, 10);
92 new_cpu_info.hardirq = strtoull(p, &p, 10);
93 new_cpu_info.softirq = strtoull(p, &p, 10);
94
95 double all_new = (double) (new_cpu_info.use + new_cpu_info.nice + new_cpu_info.sys
96 + new_cpu_info.idle + new_cpu_info.hardirq + new_cpu_info.softirq
97 + new_cpu_info.iowait);
98 double all_old = (double) (cpu_info.use + cpu_info.nice
99 + cpu_info.sys + cpu_info.idle + cpu_info.hardirq
100 + cpu_info.softirq + cpu_info.iowait);
101
102 double all = all_new - all_old;
103 if (all <= 0.0001) {
104 is_read_cpu_info = true;
105 break;
106 }
107
108 double rate{0};
109
110 rate = 100.0 * (new_cpu_info.use - cpu_info.use) / all;
111 if (rate > 0) {
112 new_cpu_info.userate = (unsigned long long) round(rate);
113 }
114
115 rate = 100.0 * (new_cpu_info.sys - cpu_info.sys) / all;
116 if (rate > 0) {
117 new_cpu_info.sysrate = (unsigned long long) round(rate);
118 }
119
120 rate = 100.0 * (new_cpu_info.iowait - cpu_info.iowait) / all;

Callers 1

GetCpuFunction · 0.85

Calls 1

CpuInfoClass · 0.85

Tested by

no test coverage detected