多核處理器是指在一枚處理器中集成兩個或多個完整的計算引擎(內核)。多核技術的 開發源于工程師們認識到,僅僅提高單核芯片的速度會產生過多熱量且無法帶來相應的性能改善,先前的處理器產品就是如此。他們認識到,在先前產品中以那種速率,處理器產生的熱量很快會超過太陽表面。即便是沒有熱量問題,其性價比也令人難以接受,速度稍快的處理器價格要高很多。 基于以上事實,工程師們開發了多核芯片,使之滿足‘橫向擴展’(而非‘縱向擴 充’)的方法,從而提高性能。 1. 在 Linux 下,如何確認是多核或多 CPU: #cat /proc/cpuinfo 如果有多個類似以下的項目,則為多核或多 CPU: processor : 0 ...... processor : 1 2. Linux 下,如何看每個 CPU 的使用率: #top -d 1 之后按下 1. 則顯示多個 CPU 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 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 利用率。
|