2015-04-22 130 views
0

我正在閱讀有關計算進程的CPU使用情況。pcpu是什麼意思,爲什麼乘以1000?

seconds = utime/Hertz 

total_time = utime + stime 

IF include_dead_children 
    total_time = total_time + cutime + cstime 
ENDIF 

seconds = uptime - starttime/Hertz 

pcpu = (total_time * 1000/Hertz)/seconds 

print: "%CPU" pcpu/10 "." pcpu % 10 

我不明白的是,由「秒」的算法是指時間花在電腦做多興趣的過程等操作,以及前。因爲正常運行時間是我們計算機運行的時間,啓動時間意味着我們[感興趣]進程開始的時間。

那麼我們爲什麼要把total_time除以seconds [計算機花時間做其他事情]得到pcpu?這沒有意義。

變量的標準含義:

# Name  Description 
14 utime  CPU time spent in user code, measured in jiffies 
15 stime  CPU time spent in kernel code, measured in jiffies 
16 cutime CPU time spent in user code, including time from children 
17 cstime CPU time spent in kernel code, including time from children 
22 starttime Time when the process started, measured in jiffies 

/proc/uptime :The uptime of the system (seconds), and the amount of time spent in idle process (seconds). 

Hertz  :Number of clock ticks per second 
+0

由於我們不知道「utime」,「hertz」,「stime」,「cutime」,「ctimes」,「uptime」,「starttime」等的定義,回答這個問題需要做出相當多的假設。如果你能詳細說明你的變量是什麼以及它們包含什麼值(或者它們來自哪裏,至少)...... – twalberg

+0

這些是標準術語。但是,我會爲你更新這個問題。 – complextea

回答

0

現在,您已經提供了每個變量代表,這裏的一對僞代碼一些意見:

seconds = utime/Hertz 

上面一行是沒有意義的,因爲seconds的新值在稍後被覆蓋幾行之前從未使用過。因爲這兩個utimestime

total_time = utime + stime 

總運行時間的過程中,以jiffies的(用戶+系統),是。

IF include_dead_children 
    total_time = total_time + cutime + cstime 
ENDIF 

這應該可能只是說total_time = cutime + cstime,因爲這些定義似乎表明,例如, cutime已包含utime,加上兒童在用戶模式下的時間。所以,正如所寫的,這通過兩次包括來自這個過程的貢獻而誇大了價值。或者,定義是錯誤的...無論如何,total_time仍然在jiffies。

seconds = uptime - starttime/Hertz 

uptime已經在秒; starttime/Hertzstarttime從jiffies轉換爲秒,因此seconds本質上變成了「自啓動此過程以來的秒數」。

pcpu = (total_time * 1000/Hertz)/seconds 

total_time仍然以jiffies,所以total_time/Hertz轉換,要秒,這是由過程中消耗CPU的秒數。除以seconds之後,如果它是浮點運算,則會自進程開始以來提供縮放的CPU使用百分比。由於它不是,所以它的縮放比例爲1000,分辨率爲1/10%。爲了保持準確性,縮放必須儘早使用圓括號完成。

print: "%CPU" pcpu/10 "." pcpu % 10 

而這個撤銷的縮放比例,除以pcpu當由如圖10所示,並在這看起來像一個浮點值的格式打印這些值求出被除數和餘數。

+0

因此,我們可以說'pcpu'是過程實際利用CPU的過程中「年齡」的百分比嗎? – complextea

+1

是的。它不是像「頂部」那樣的「即時」CPU使用率百分比(反正它並不是瞬時的,測量的時間間隔仍然很短),而是基於總CPU使用率與總數的百分比爲該過程運行掛鐘時間。 – twalberg