1. 程式人生 > >linux檢視多核負載(經典)

linux檢視多核負載(經典)

 

1. Linux下,如何看每個CPU的使用率:

#top -d 1

之後按下數字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%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.