3,固然作上部分工做前,分析了top -1 ,及看主進程中各線程中的運行狀況;看了各核的使用狀況;linux
1. Linux下,如何看每一個CPU的使用率:編程
#top -d 1緩存
(此時會顯示以1s的頻率刷新系統負載顯示,能夠看到總的CPU的負載狀況,以及佔CPU最高的進程id,進程名字等信息)服務器
(切換按下數字1,則能夠在顯示多個CPU和總CPU中切換)併發
以後按下數字1. 則顯示多個CPU (top後按1也同樣)負載均衡
Cpu0 : 1.0%us, 3.0%sy, 0.0%ni, 96.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%stpost
這裏對us,sy,ni,id,wa,hi,si,st進行分別說明:性能
us 列顯示了用戶模式下所花費 CPU 時間的百分比。us的值比較高時,說明用戶進程消耗的cpu時間多,可是若是長期大於50%,須要考慮優化用戶的程序。大數據
sy 列顯示了內核進程所花費的cpu時間的百分比。這裏us + sy的參考值爲80%,若是us+sy 大於 80%說明可能存在CPU不足。
ni 列顯示了用戶進程空間內改變過優先級的進程佔用CPU百分比。優化
id 列顯示了cpu處在空閒狀態的時間百分比。
wa 列顯示了IO等待所佔用的CPU時間的百分比。這裏wa的參考值爲30%,若是wa超過30%,說明IO等待嚴重,這多是磁盤大量隨機訪問形成的,也可能磁盤或者磁盤訪問控制器的帶寬瓶頸形成的(主要是塊操做)。
hi
si
st
2. 在Linux下,如何確認是多核或多CPU:
#cat /proc/cpuinfo
若是有多個相似如下的項目,則爲多核或多CPU:
processor : 0
......
processor : 1
3. 如何察看某個進程在哪一個CPU上運行:
#top -d 1
以後按下f.進入top Current Fields設置頁面:
選中:j: P = Last used cpu (SMP)
則多了一項:P 顯示此進程使用哪一個CPU。
Sam通過試驗發現:同一個進程,在不一樣時刻,會使用不一樣CPU Core.這應該是Linux Kernel SMP處理的。
4. 配置Linux Kernel使之支持多Core:
內核配置期間必須啓用 CONFIG_SMP 選項,以使內核感知 SMP。
Processor type and features ---> Symmetric multi-processing support
察看當前Linux Kernel是否支持(或者使用)SMP
#uname -a
5. Kernel 2.6的SMP負載平衡:
在 SMP 系統中建立任務時,這些任務都被放到一個給定的 CPU 運行隊列中。一般來講,咱們沒法知道一個任務什麼時候是短時間存在的,什麼時候須要長期運行。所以,最初任務到 CPU 的分配可能並不理想。
爲了在 CPU 之間維護任務負載的均衡,任務能夠從新進行分發:將任務從負載重的 CPU 上移動到負載輕的 CPU 上。Linux 2.6 版本的調度器使用負載均衡(load balancing) 提供了這種功能。每隔 200ms,處理器都會檢查 CPU 的負載是否不均衡;若是不均衡,處理器就會在 CPU 之間進行一次任務均衡操做。
這個過程的一點負面影響是新 CPU 的緩存對於遷移過來的任務來講是冷的(須要將數據讀入緩存中)。
記住 CPU 緩存是一個本地(片上)內存,提供了比系統內存更快的訪問能力。若是一個任務是在某個 CPU 上執行的,與這個任務有關的數據都會被放到這個 CPU 的本地緩存中,這就稱爲熱的。若是對於某個任務來講,CPU 的本地緩存中沒有任何數據,那麼這個緩存就稱爲冷的。
不幸的是,保持 CPU 繁忙會出現 CPU 緩存對於遷移過來的任務爲冷的狀況。
6. 應用程序如何利用多Core :
開發人員可將可並行的代碼寫入線程,而這些線程會被SMP操做系統安排併發運行。
另外,Sam設想,對於必須順序執行的代碼。能夠將其分爲多個節點,每一個節點爲一個thread.並在節點間放置channel.節點間形如流水線。這樣也能夠大大加強CPU利用率。
例如:
遊戲能夠分爲3個節點。
1.接受外部信息,聲稱數據 (1ms)
2.利用數據,物理運算(3ms)
3.將物理運算的結果展現出來。(2ms)
若是線性編程,整個流程須要6ms.
但若是將每一個節點做爲一個thread。但thread間又同步執行。則整個流程只須要3ms.
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/chenggong2dm/archive/2011/01/12/6131052.aspx