CPU-bound(計算密集型) 和I/O bound(I/O密集型)

Neohzh發表於2009-11-10

I/O bound 指的是系統的CPU效能相對硬碟/記憶體的效能要好很多,此時,系統運作,大部分的狀況是 CPU 在等 I/O (硬碟/記憶體) 的讀/寫,此時 CPU Loading 不高。
CPU bound 指的是系統的 硬碟/記憶體 效能 相對 CPU 的效能 要好很多,此時,系統運作,大部分的狀況是 CPU Loading 100%,CPU 要讀/寫 I/O (硬碟/記憶體),I/O在很短的時間就可以完成,而 CPU 還有許多運算要處理,CPU Loading 很高。

計算密集型 (CPU-bound)
在多重程式系統中,大部份時間用來做計算、邏輯判斷等CPU動作的程式稱之CPU bound。例如一個計算圓周率至小數點一千位以下的程式,在執行的過程當中

絕大部份時間用在三角函式和開根號的計算,便是屬於CPU bound的程式。
It is because the performance characteristic of most protocol codec implementations is CPU-bound, which is the same with I/O processor threads.

根據以上分析,可以認為通常情況下,大部分程式針對某個特定的效能metric而言
都可分為CPU bound 和 I/O bound兩類。
CPU bound的程式一般而言CPU佔用率相當高。這可能是因為任務本身不太需要訪問I/O裝置,也可能是因為程式是多執行緒實現因此遮蔽掉了等待I/O的時間。
而I/O bound的程式一般在達到效能極限時,CPU佔用率仍然較低。這可能是因為任務本身需要大量I/O操作,而pipeline做得不是很好,沒有充分利用處理器能力

;還可能是因為資料區域性性不是很好,導致較多page error,結果產生了大量disk I/O的開銷。
可能性很多,具體情況具體分析吧。
?
說到如何確定是CPU bound 還是 I/O bound,我一般用top先看達到效能極限時的CPU佔用率,然後用sar,iostat等
獲得具體的i/o操作或是page error的統計資料,如果還需要更精準的資訊,例如確定具體是哪些程式碼產生了這些開銷,則
要用到oprofile或vtune了。
?
通常I/O bound的程式包括web server的靜態頁面訪問,或者是基於資料庫的一些應用等。
而大量計算型的應用都屬於CPU bound吧。
?
最後聊一下如果在一個系統裡CPU bound的程式和I/O bound的程式一起run會怎麼樣?
應該是CPU bound的程式對CPU的佔用率會非常不公平地接近100%吧。因為I/O bound的程式可能一個時間片還沒用完就block了,放棄CPU了。而CPU bound的程式因此而得到了很多排程機會並且每次都能把CPU run完。故在這樣的系統裡要給I/O bound的程式更高的優先順序使其能被排程得更多些。
?
完畢,另外,下午居然在平坦大道上走路時摔了一跤,偏偏穿的還是裙子,這疼得呀,導致我一點幹活的心情都沒有,就
寫個這總結算是也沒荒廢這春暖花開時節的大好光陰啦。

轉載自http://www.roboticfan.com/blog/user_2005/104/archives/2008/200891617319.shtml[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/779728/viewspace-1028602/,如需轉載,請註明出處,否則將追究法律責任。

相關文章