![](/img/trans.png)
[英]When I have per-CPU data structures, does it improve performance to have them on different pages?
[英]How do I get per-cpu stats (system, idle, nice, …) like the “top” command does?
在linux上,我想知道要調用什么“C”API來獲取per-cpu統計信息。
我知道並且可以在我的應用程序中讀取/proc/loadavg
,但這是系統范圍的加載avarages,而不是per-cpu信息。 我想分開各個CPU或核心。
作為執行此操作的應用程序的示例,當我運行top
並按“1”時,我可以看到4或8個處理器/核心,如下所示:
Cpu0 : 4.5%us, 0.0%sy, 0.0%ni, 95.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 42.2%us, 6.2%sy, 0.5%ni, 51.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 3.0%us, 1.5%sy, 0.0%ni, 94.5%id, 0.0%wa, 0.0%hi, 1.0%si, 0.0%st
Cpu3 : 7.0%us, 4.7%sy, 0.0%ni, 88.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
我曾嘗試過strace top
但這導致了一只老鼠的窩。
你想要的文件是/proc/stat
。 (您可能希望在Linux內核源代碼中引用fs/proc/stat.c
)
這不是一個真正的答案,但我會看一下top的源代碼。
我想內核文件timer.c在這種情況下可能具有一定的重要性來計算負載平均值。 從文件timer.c函數calc_load()
unsigned long avenrun[3];
static inline void calc_load(unsigned long ticks)
{
unsigned long active_tasks; /* fixed-point */
static int count = LOAD_FREQ;
count -= ticks;
if (count < 0) {
count += LOAD_FREQ;
active_tasks = count_active_tasks();
CALC_LOAD(avenrun[0], EXP_1, active_tasks);
CALC_LOAD(avenrun[1], EXP_5, active_tasks);
CALC_LOAD(avenrun[2], EXP_15, active_tasks);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.