使用uptime或者top命令,都可以看到一個負載的輸出,形如load average: 0.00, 0.03, 0.00,這個負載到底是什麼東西呢,man文檔裏只是一筆帶過,沒有具體的給出負載的定義。
負載的統計,必然是由內核完成的,因此在內核源碼中找答案是再好不過的事情了,找來2.6.21的內核源碼,開始探索。 節選部分源碼:
load(t) = ( load(t-1)*exp(i) + n(t)*(2048-exp(i)) ) / 2048 load(t-1)爲上次計算出的結果
n(t)爲t時刻的活動進程數
計算方式是累加各個CPU的運行隊列中running和uninterruptible的值 再乘以2048
計算方式如下:
exp(1) = 1884 exp(5) = 2014 exp(15) = 2037 exp(i) = 2048 * e^(-1/12/i) 從本質上看負載是完全由過去的一段時間裏每個CPU上的活動進程數決定的,但並不是在數值上等同於每秒鐘需要進行調度的進程數,具體的計算過程是個比較複雜的過程。 |
Linux操作系統中關於負載的定義
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.