2014-01-13 52 views
2

我知道這個問題已經以許多不同的方式被多次提出過,但對於我來說,CPU負載百分比的含義仍然不清楚。如果一次執行一條指令,CPU負載究竟是多少?

我開始解釋我是如何看待的概念,現在(當然,我可能,並且肯定會,是錯誤的):

  • CPU內核只能同時執行一個指令。在執行完當前指令之前,它不會執行下一條指令。
  • 假設你的盒子有一個單一的CPU和一個單一的核心。因此並行計算是不可能的。您的操作系統的調度程序將選取一個進程,將IP設置爲入口點,並將該指令發送給CPU。在CPU完成執行當前指令之前,它不會移動到下一條指令。經過一段時間後,它將切換到另一個進程,依此類推。但是如果CPU當前正在執行指令,它將不會切換到另一個進程。它將等待CPU自由切換到另一個進程。由於您只有一個內核,因此不能同時執行兩個進程。
  • I/O很貴。只要進程想要從磁盤讀取文件,就必須等到磁盤完成其任務,然後當前進程才能執行下一條指令。在磁盤工作時,CPU沒有做任何事情,所以我們的操作系統將切換到另一個進程,直到磁盤完成其工作,以免浪費時間。

遵循這些原則,我來自己的結論是,在給定時間CPU負載只能是以下兩個值之一:

  • 0% - 空閒狀態。 CPU什麼也沒做。
  • 100% - 忙。 CPU當前正在執行一條指令。

這顯然是錯誤的,因爲taskmgr報告%1,12%,15%,50%等CPU使用率值。

  • 這是什麼意思,給定的進程,在給定的時間,利用給定CPU核心的1%(由taskmgr報告)?在給定的過程正在執行的過程中,99%會發生什麼?
  • 這是什麼意思,總體CPU使用率是19%(現在由Rainmeter報告)?
+1

「* CPU內核只能同時執行一個指令,直到它執行完當前一個它不會執行下一條指令*。」這是不正確的。將「superscalar」打入您最喜愛的搜索引擎。 –

回答

2

如果您在Windows上查看任務管理器,則會出現空閒進程,確實如此,它只是顯示沒有做任何有用的週期數量。是的,CPU總是很忙,但它可能只是在循環運行,等待有用的東西來。

由於您只有一個內核,因此不能同時執行兩個進程 。

這不是真的。是的,真正的並行是不可能的,但你可以用preemptive multitasking創建一個幻想。是的,不可能中斷指令,但這不是問題,因爲大多數指令只需要很少的時間來完成。 OS與時間片共享時間片,這比單個指令的執行時間長得多。

What does it mean that a given process, at a given time, is utilizing 1% of a given CPU core 

大部分時間的應用程序沒有做任何有用的事情。想想等待用戶點擊按鈕開始處理某些東西的應用程序。這個應用程序不需要CPU,所以它大部分時間都在睡覺,或者每次它進入睡眠時間(參見event loop in Windows)。 GetMessage正在阻塞,所以它意味着線程將休眠直到消息到達。那麼CPU負載究竟意味着什麼?所以想象一下,應用程序接收一些事件或數據做事情,它會做操作而不是睡覺。因此,如果它使用CPU的X%,則意味着該應用程序使用X% CPU採樣時間。 CPU時間使用率是平均指標。

PS:總結CPU負載的概念,考慮速度(物理方面)。有瞬時和平均速度,所以對於CPU負載,還有瞬時和平均測量。瞬時總是等於0%或100%,因爲在某個時間點過程要麼使用CPU,要麼使用CPU。如果過程在250ms的過程中使用了100%的CPU,並且在接下來的750ms中沒有使用,那麼我們可以說過程以1秒的採樣週期加載了25%的CPU(平均值測量只能在一定的採樣週期內應用)。

1

http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages

單核CPU是例如流量的單個通道。想象一下,你是一個橋樑操作員......有時你的橋很繁忙,有汽車排成一列。你想讓人們知道交通如何在你的橋上移動。一個體面的指標是在特定時間有多少輛汽車在等待。如果沒有汽車在等待,接到的司機知道他們可以馬上開車。如果汽車備份,司機知道他們在延誤。

這基本上是CPU負載。 「汽車」是使用一段CPU時間(「過橋」)或排隊使用CPU的進程。 Unix將此稱爲運行隊列長度:當前運行的進程數加上等待(排隊)運行的進程數的總和。

另見:http://en.wikipedia.org/wiki/Load_(computing)

+0

它如何回答閒置狀態的問題? – Andrey

+0

是的,CPU可以(理論上)閒置。 –