多核處理器是指在一枚處理器中集成兩個(gè)或多個(gè)完整的計(jì)算引擎(內(nèi)核)。多核技術(shù)的 開發(fā)源于工程師們認(rèn)識(shí)到,僅僅提高單核芯片的速度會(huì)產(chǎn)生過多熱量且無法帶來相應(yīng)的性能改善,先前的處理器產(chǎn)品就是如此。他們認(rèn)識(shí)到,在先前產(chǎn)品中以那種速率,處理器產(chǎn)生的熱量很快會(huì)超過太陽表面。即便是沒有熱量問題,其性價(jià)比也令人難以接受,速度稍快的處理器價(jià)格要高很多。 基于以上事實(shí),工程師們開發(fā)了多核芯片,使之滿足‘橫向擴(kuò)展’(而非‘縱向擴(kuò) 充’)的方法,從而提高性能。 1. 在 Linux 下,如何確認(rèn)是多核或多 CPU: #cat /proc/cpuinfo 如果有多個(gè)類似以下的項(xiàng)目,則為多核或多 CPU: processor : 0 ...... processor : 1 2. Linux 下,如何看每個(gè) CPU 的使用率: #top -d 1 之后按下 1. 則顯示多個(gè) 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. 如何察看某個(gè)進(jìn)程在哪個(gè) CPU 上運(yùn)行: #top -d 1 之后按下 f.進(jìn)入 top Current Fields 設(shè)置頁面: 選中:j: P = Last used cpu (SMP) 則多了一項(xiàng):P 顯示此進(jìn)程使用哪個(gè) CPU。 Sam 經(jīng)過試驗(yàn)發(fā)現(xiàn):同一個(gè)進(jìn)程,在不同時(shí)刻,會(huì)使用不同 CPU Core.這應(yīng)該是 Linux Kernel SMP 處理的。 4. 配置 Linux Kernel 使之支持多 Core: 內(nèi)核配置期間必須啟用 CONFIG_SMP 選項(xiàng),以使內(nèi)核感知 SMP。 Processor type and features ---> Symmetric multi-processing support 察看當(dāng)前 Linux Kernel 是否支持(或者使用)SMP #uname -a 5. Kernel 2.6 的 SMP 負(fù)載平衡: 在 SMP 系統(tǒng)中創(chuàng)建任務(wù)時(shí),這些任務(wù)都被放到一個(gè)給定的 CPU 運(yùn)行隊(duì)列中。通常來 說,我們無法知道一個(gè)任務(wù)何時(shí)是短期存在的,何時(shí)需要長期運(yùn)行。因此,最初任務(wù)到 CPU 的分配可能并不理想。 為了在 CPU 之間維護(hù)任務(wù)負(fù)載的均衡,任務(wù)可以重新進(jìn)行分發(fā):將任務(wù)從負(fù)載重的 CPU 上移動(dòng)到負(fù)載輕的 CPU 上。Linux 2.6 版本的調(diào)度器使用負(fù)載均衡(load balancing) 提供了這種功能。每隔 200ms,處理器都會(huì)檢查 CPU 的負(fù)載是否不均衡;如 果不均衡,處理器就會(huì)在 CPU 之間進(jìn)行一次任務(wù)均衡操作。 這個(gè)過程的一點(diǎn)負(fù)面影響是新 CPU 的緩存對(duì)于遷移過來的任務(wù)來說是冷的(需要將數(shù)據(jù) 讀入緩存中)。 記住 CPU 緩存是一個(gè)本地(片上)內(nèi)存,提供了比系統(tǒng)內(nèi)存更快的訪問能力。如果一個(gè) 任務(wù)是在某個(gè) CPU 上執(zhí)行的,與這個(gè)任務(wù)有關(guān)的數(shù)據(jù)都會(huì)被放到這個(gè) CPU 的本地緩存中, 這就稱為熱的。如果對(duì)于某個(gè)任務(wù)來說,CPU 的本地緩存中沒有任何數(shù)據(jù),那么這個(gè)緩存就稱為冷的。 不幸的是,保持 CPU 繁忙會(huì)出現(xiàn) CPU 緩存對(duì)于遷移過來的任務(wù)為冷的情況。 6. 應(yīng)用程序如何利用多 Core : 開發(fā)人員可將可并行的代碼寫入線程,而這些線程會(huì)被 SMP 操作系統(tǒng)安排并發(fā)運(yùn)行。 另外,Sam 設(shè)想,對(duì)于必須順序執(zhí)行的代碼。可以將其分為多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)為一個(gè) thread.并在節(jié)點(diǎn)間放置 channel.節(jié)點(diǎn)間形如流水線。這樣也可以大大增強(qiáng) CPU 利用率。 更多內(nèi)容關(guān)注迅為電子
|