日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux内核cpu负载计算,CPU 负载 — The Linux Kernel documentation

發布時間:2023/12/3 linux 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内核cpu负载计算,CPU 负载 — The Linux Kernel documentation 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CPU 負載?

Linux通過``/proc/stat``和``/proc/uptime``導出各種信息,用戶空間工具

如top(1)使用這些信息計算系統花費在某個特定狀態的平均時間。

例如:

$ iostat

Linux 2.6.18.3-exp (linmac) 02/20/2007

avg-cpu: %user %nice %system %iowait %steal %idle10.01 0.00 2.92 5.44 0.00 81.63

這里系統認為在默認采樣周期內有10.01%的時間工作在用戶空間,2.92%的時

間用在系統空間,總體上有81.63%的時間是空閑的。

大多數情況下``/proc/stat``的信息幾乎真實反映了系統信息,然而,由于內

核采集這些數據的方式/時間的特點,有時這些信息根本不可靠。

那么這些信息是如何被搜集的呢?每當時間中斷觸發時,內核查看此刻運行的

進程類型,并增加與此類型/狀態進程對應的計數器的值。這種方法的問題是

在兩次時間中斷之間系統(進程)能夠在多種狀態之間切換多次,而計數器只

增加最后一種狀態下的計數。

舉例

假設系統有一個進程以如下方式周期性地占用cpu:

兩個時鐘中斷之間的時間線

|-----------------------|

^ ^

|_ 開始運行 |

|_ 開始睡眠

(很快會被喚醒)

在上面的情況下,根據``/proc/stat``的信息(由于當系統處于空閑狀態時,

時間中斷經常會發生)系統的負載將會是0

大家能夠想象內核的這種行為會發生在許多情況下,這將導致``/proc/stat``

中存在相當古怪的信息:

/* gcc -o hog smallhog.c */

#include

#include

#include

#include

#define HIST 10

static volatile sig_atomic_t stop;

static void sighandler (int signr)

{

(void) signr;

stop = 1;

}

static unsigned long hog (unsigned long niters)

{

stop = 0;

while (!stop && --niters);

return niters;

}

int main (void)

{

int i;

struct itimerval it = { .it_interval = { .tv_sec = 0, .tv_usec = 1 },

.it_value = { .tv_sec = 0, .tv_usec = 1 } };

sigset_t set;

unsigned long v[HIST];

double tmp = 0.0;

unsigned long n;

signal (SIGALRM, &sighandler);

setitimer (ITIMER_REAL, &it, NULL);

hog (ULONG_MAX);

for (i = 0; i < HIST; ++i) v[i] = ULONG_MAX - hog (ULONG_MAX);

for (i = 0; i < HIST; ++i) tmp += v[i];

tmp /= HIST;

n = tmp - (tmp / 3.0);

sigemptyset (&set);

sigaddset (&set, SIGALRM);

for (;;) {

hog (n);

sigwait (&set, &i);

}

return 0;

}

參考

謝謝

Con Kolivas, Pavel Machek

總結

以上是生活随笔為你收集整理的linux内核cpu负载计算,CPU 负载 — The Linux Kernel documentation的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。