一篇文章帶你學(xué)習(xí)CPU架構(gòu)知識(shí)
Part1架構(gòu)概述
從系統(tǒng)架構(gòu)來看,目前的商用服務(wù)器大體可以分為三類
- 對(duì)稱多處理器結(jié)構(gòu)(SMP:Symmetric Multi-Processor)
- 非一致存儲(chǔ)訪問結(jié)構(gòu)(NUMA:Non-Uniform Memory Access)
- 海量并行處理結(jié)構(gòu)(MPP:Massive Parallel Processing)。
共享存儲(chǔ)型多處理機(jī)有兩種模型
- 均勻存儲(chǔ)器存取(Uniform-Memory-Access,簡稱UMA)模型
- 非均勻存儲(chǔ)器存取(Nonuniform-Memory-Access,簡稱NUMA)模型
多核系統(tǒng)的存儲(chǔ)結(jié)構(gòu)
根據(jù)多核處理器內(nèi)的cache配置情況,可以把多核處理器的組織結(jié)構(gòu)分成以下四種:
- 片內(nèi)私有L1 cache結(jié)構(gòu):簡單的多核計(jì)算機(jī)的cache結(jié)構(gòu)由L1和L2兩級(jí)組成。處理器片內(nèi)的多個(gè)核各自有自己私有的L1 cache,一般被劃分為指令L1(L1-I)cache和數(shù)據(jù)L1(L1-D)cache。而多核共享的L2 cache則存在于處理器芯片之外。
- 片內(nèi)私有L2 cache結(jié)構(gòu):處理器片內(nèi)的多個(gè)核仍然保留自己私有的指令L1 cache和數(shù)據(jù)L1 cache,但L2 cache被移至處理器片內(nèi),且L2 cache為各個(gè)核私有。多核共享處理器芯片之外的主存。
- 片內(nèi)共享L2 cache結(jié)構(gòu):結(jié)構(gòu)與片內(nèi)私有L2 cache的多核結(jié)構(gòu)相似,都是片上兩級(jí)cache結(jié)構(gòu)。不同之處在于處理器片內(nèi)的私有L2 cache變?yōu)槎嗪斯蚕鞮2 cache。多核仍然共享處理器芯片之外的主存。對(duì)處理器的每個(gè)核而言,片內(nèi)私有L2 cache的訪問速度更高。但在處理器片內(nèi)使用共享的L2 cache取代各個(gè)核私有的L2 cache能夠獲得系統(tǒng)整體性能的提升。
- 片內(nèi)共享L3 cache結(jié)構(gòu):隨著處理器芯片上的可用存儲(chǔ)器資源的增長,高性能的處理器甚至把L3 cache也從處理器片外移至片內(nèi)。在片內(nèi)私有L2 cache結(jié)構(gòu)的基礎(chǔ)上增加片內(nèi)多核共享L3 cache使存儲(chǔ)系統(tǒng)的性能有了較大提高。下圖給出了這種結(jié)構(gòu)的示意。
存取速度比較:L1緩分成兩種,一種是指令緩存,一種是數(shù)據(jù)緩存。L2緩存和L3緩存不分指令和數(shù)據(jù)。L1和L2緩存在第一個(gè)CPU核中,L3則是所有CPU核心共享的內(nèi)存。L1、L2、L3的越離CPU近就越小,速度也越快,越離CPU遠(yuǎn),速度也越慢。再往后面就是內(nèi)存,內(nèi)存的后面就是硬盤。我們來看一些他們的速度:
- L1 的存取速度:4 個(gè)CPU時(shí)鐘周期
- L2 的存取速度:11 個(gè)CPU時(shí)鐘周期
- L3 的存取速度:39 個(gè)CPU時(shí)鐘周期
- RAM內(nèi)存的存取速度 :107 個(gè)CPU時(shí)鐘周期
多核處理器的核間通信機(jī)制
多核處理器片內(nèi)的多個(gè)處理器內(nèi)核雖然各自執(zhí)行各自的代碼,但是處理器內(nèi)核之間需要進(jìn)行數(shù)據(jù)的共享和同步,因此多核處理器硬件結(jié)構(gòu)必須支持高效的核間通信,片上通信結(jié)構(gòu)的性能也將直接影響處理器的性能
1)總線共享Cache結(jié)構(gòu)
- 總線共享Cache結(jié)構(gòu)是指多核處理器內(nèi)核共享L2 Cache或L3 Cache,片上處理器內(nèi)核、輸入/輸出接口以及主存儲(chǔ)器接口通過連接各處理器內(nèi)核的總線進(jìn)行通信。
- 這種方式的優(yōu)點(diǎn)是結(jié)構(gòu)簡單、易于設(shè)計(jì)實(shí)現(xiàn)、通信速度高,但缺點(diǎn)是總線結(jié)構(gòu)的可擴(kuò)展性較差,只適用于處理器核心數(shù)較少的情況。
2)交叉開關(guān)互連結(jié)構(gòu)
- 傳統(tǒng)的總線結(jié)構(gòu)采用分時(shí)復(fù)用的工作模式,因而在同一總線上同時(shí)只能進(jìn)行一個(gè)相互通信的過程。而交叉開關(guān)(Crossbar Switch)互連結(jié)構(gòu)則能夠有效提高數(shù)據(jù)交換的帶寬。
- 交叉開關(guān)是在傳統(tǒng)電話交換機(jī)中沿用數(shù)十年的經(jīng)典技術(shù),它可以按照任意的次序把輸入線路和輸出線路連接起來。
3)片上網(wǎng)絡(luò)結(jié)構(gòu)
- 片上網(wǎng)絡(luò)(Network on a Chip,NoC;On-chip Network)技術(shù)借鑒了并行計(jì)算機(jī)的互連網(wǎng)絡(luò)結(jié)構(gòu),在單芯片上集成大量的計(jì)算資源以及連接這些資源的片上通信網(wǎng)絡(luò)。每個(gè)處理器內(nèi)核具有獨(dú)立的處理單元及其私有的Cache,并通過片上通信網(wǎng)絡(luò)連接在一起,處理器內(nèi)核之間采用消息通信機(jī)制,用路由和分組交換技術(shù)替代傳統(tǒng)的片上總線來完成通信任務(wù),從而解決由總線互連所帶來的各種瓶頸問題。
- 片上網(wǎng)絡(luò)與傳統(tǒng)分布式計(jì)算機(jī)網(wǎng)絡(luò)有很多相似之處,但限于片上資源有限,設(shè)計(jì)時(shí)要考慮更多的開銷限制,針對(duì)延時(shí)、功耗、面積等性能指標(biāo)進(jìn)行優(yōu)化設(shè)計(jì),為實(shí)現(xiàn)高性能片上系統(tǒng)提供高效的通信支持。
多核處理器的Cache一致性
在多核系統(tǒng)設(shè)計(jì)時(shí)必須考慮多級(jí)Cache的一致性(Cache Coherency)問題。對(duì)內(nèi)存的基本操作包括讀操作和寫操作。Cache一致性問題產(chǎn)生的原因是:
- 在一個(gè)處理器系統(tǒng)中,不同的Cache和主存空間中可能存放著同一個(gè)數(shù)據(jù)的多個(gè)副本,在寫操作時(shí),這些副本存在著潛在的不一致的可能性。
- 在單處理器系統(tǒng)中,Cache一致性問題主要表現(xiàn)為在內(nèi)存寫操作過程中如何保持各級(jí)Cache中的數(shù)據(jù)副本和主存內(nèi)容的一致,即使有I/O通道共享Cache,也可以通過全寫法較好地解決Cache一致性問題。
- 而在多核系統(tǒng)中,多個(gè)核都能夠?qū)?nèi)存進(jìn)行寫操作,而Cache級(jí)數(shù)更多,同一數(shù)據(jù)的多個(gè)副本可能同時(shí)存放在多個(gè)Cache存儲(chǔ)器中,某個(gè)核的私有Cache又只能被該核自身訪問。即使采用全寫法,也只能維持一個(gè)Cache和主存之間的一致性,不能自動(dòng)更新其他處理器內(nèi)核的私有Cache中的相同副本。這些因素?zé)o疑加大了Cache一致性問題的復(fù)雜度,同時(shí)又影響著多核系統(tǒng)的存儲(chǔ)系統(tǒng)整體設(shè)計(jì)。
維護(hù)Cache一致性的關(guān)鍵在于跟蹤每一個(gè)Cache塊的狀態(tài),并根據(jù)處理器的讀寫操作及總線上的相應(yīng)事件及時(shí)更新Cache塊的狀態(tài)。一般來說,導(dǎo)致多核處理器系統(tǒng)中Cache內(nèi)容不一致的原因如下:(1)可寫數(shù)據(jù)的共享:某個(gè)處理器采用全寫法或?qū)懟胤ㄐ薷哪骋粋€(gè)數(shù)據(jù)塊時(shí),會(huì)引起其他處理器的Cache中同一副本的不一致。(2)I/O活動(dòng):如果I/O設(shè)備直接連接在系統(tǒng)總線上,I/O活動(dòng)也會(huì)導(dǎo)致Cache不一致。(3)核間線程遷移:核間線程遷移就是把一個(gè)尚未執(zhí)行完的線程調(diào)度到另一個(gè)空閑的處理器內(nèi)核中去執(zhí)行。為提高整個(gè)系統(tǒng)的效率,有的系統(tǒng)允許線程核間遷移,使系統(tǒng)負(fù)載平衡。但這有可能引起Cache的不一致。對(duì)于I/O活動(dòng)和核間線程遷移而導(dǎo)致的Cache不一致,可以分別通過禁止I/O通道與處理器共享Cache以及禁止核間線程遷移簡單解決。因而多處理器中的Cache一致性問題主要是針對(duì)可寫數(shù)據(jù)的共享。
UMA(Uniform-Memory-Access)與 SMP (Symmetric Multi-Processor)
所謂對(duì)稱多處理器結(jié)構(gòu),是指服務(wù)器中多個(gè)CPU對(duì)稱工作,無主次或從屬關(guān)系。各CPU共享相同的物理內(nèi)存,每個(gè) CPU訪問內(nèi)存中的任何地址所需時(shí)間是相同的,因此UMA也被稱為對(duì)稱多處理器結(jié)構(gòu)(SMP:Symmetric Multi-Processor)。對(duì)UMA服務(wù)器進(jìn)行擴(kuò)展的方式包括增加內(nèi)存、使用更快的CPU、增加CPU、擴(kuò)充I/O(槽口數(shù)與總線數(shù))以及添加更多的外部設(shè)備(通常是磁盤存儲(chǔ))。
在對(duì)稱多處理器架構(gòu)下,系統(tǒng)中的每個(gè)處理器內(nèi)核地位相同,其看到的存儲(chǔ)器和共享硬件也都是相同的。在UMA架構(gòu)的多處理器系統(tǒng)中,所有的處理器都訪問一個(gè)統(tǒng)一的存儲(chǔ)器空間,這些存儲(chǔ)器往往以多通道的方式組織。在UMA架構(gòu)下,所有的內(nèi)存訪問都被傳遞到相同的共享內(nèi)存總線上,不同的處理器訪問存儲(chǔ)器的延遲時(shí)間相同,任何一個(gè)進(jìn)程或線程都可以被分配到任何一個(gè)處理器上運(yùn)行。每個(gè)處理器還可以配備私有的Cache,外圍設(shè)備也可以通過某種形式共享。因而UMA架構(gòu)可以在操作系統(tǒng)的支持下達(dá)到非常好的負(fù)載均衡效果,讓整個(gè)系統(tǒng)的性能、吞吐量有較大提升。
但從存儲(chǔ)器訪問的角度看,對(duì)稱多處理器架構(gòu)的缺點(diǎn)是可伸縮性較差。這是因?yàn)槎鄠€(gè)核使用相同的總線訪問內(nèi)存,隨著處理器內(nèi)核數(shù)的增加,總線將成為系統(tǒng)性能提升的瓶頸。因而UMA架構(gòu)只適用于處理器內(nèi)核數(shù)量相對(duì)較少的情況,不適用于系統(tǒng)中配置數(shù)十個(gè)甚至數(shù)百個(gè)處理器內(nèi)核的情況。

NUMA(Non-Uniform Memory Access)
NUMA 的主要優(yōu)點(diǎn)是伸縮性。NUMA 體系結(jié)構(gòu)在設(shè)計(jì)上已超越了 SMP 體系結(jié)構(gòu)在伸縮性上的限制。通過 SMP,所有的內(nèi)存訪問都傳遞到相同的共享內(nèi)存總線。這種方式非常適用于 CPU 數(shù)量相對(duì)較少的情況,但不適用于具有幾十個(gè)甚至幾百個(gè) CPU 的情況,因?yàn)檫@些 CPU 會(huì)相互競爭對(duì)共享內(nèi)存總線的訪問。NUMA 通過限制任何一條內(nèi)存總線上的 CPU 數(shù)量并依靠高速互連來連接各個(gè)節(jié)點(diǎn),從而緩解了這些瓶頸狀況。
系統(tǒng)內(nèi)的存儲(chǔ)器訪問延時(shí)從高到低依次為:跨CPU訪存、不跨CPU但跨NUMA域訪存、NUMA域內(nèi)訪存。因此,在應(yīng)用程序運(yùn)行時(shí)應(yīng)盡可能避免跨NUMA域訪問存儲(chǔ)器,這可以通過設(shè)置線程的CPU親和性(affinity)來實(shí)現(xiàn)。
NUMA架構(gòu)既可以保持對(duì)稱多處理器架構(gòu)的單一操作系統(tǒng)、簡便的應(yīng)用程序編程模式及易于管理的特點(diǎn),又可以有效地?cái)U(kuò)充系統(tǒng)的規(guī)模。NUMA架構(gòu)能夠?yàn)樘幚砥髟L問本地存儲(chǔ)器單元提供高速互連機(jī)制,同時(shí)為處理器訪問遠(yuǎn)程存儲(chǔ)器單元提供較為經(jīng)濟(jì)但延遲時(shí)間更高的連接通道,因而NUMA架構(gòu)的系統(tǒng)通常比UMA架構(gòu)的系統(tǒng)更加經(jīng)濟(jì)且性能更強(qiáng)大。
CC-NUMA(CacheCoherentNon-UniformMemoryAccess)
在NUMA架構(gòu)中,有一種類型應(yīng)用特別普遍,即CC-NUMA(Cache Coherent Non-Uniform Memory Access,緩存一致性非統(tǒng)一內(nèi)存訪問)系統(tǒng)。緩存一致性問題是由于多個(gè)處理器共享同一個(gè)存儲(chǔ)空間而引起的,而CC-NUMA是指通過專門的硬件保持Cache中的數(shù)據(jù)和共享內(nèi)存中的數(shù)據(jù)的一致性,不需要軟件來保持多個(gè)數(shù)據(jù)副本之間的一致性。當(dāng)某個(gè)存儲(chǔ)單元的內(nèi)容被某個(gè)處理器改寫后,系統(tǒng)可以很快地通過專用硬件部件發(fā)現(xiàn)并通知其他各個(gè)處理器。因此。在CC-NUMA系統(tǒng)中,分布式內(nèi)存儲(chǔ)器被連接為單一內(nèi)存空間,多個(gè)處理器可以在單一操作系統(tǒng)下使用與對(duì)稱多處理器架構(gòu)中一樣的方式完全在硬件層次實(shí)現(xiàn)管理。
- Directory 協(xié)議 。這種方法的典型實(shí)現(xiàn)是要設(shè)計(jì)一個(gè)集中式控制器,它是主存儲(chǔ)器控制器的一部分。其中有一個(gè)目錄存儲(chǔ)在主存儲(chǔ)器中,其中包含有關(guān)各種本地緩存內(nèi)容的全局狀態(tài)信息。當(dāng)單個(gè)CPU Cache 發(fā)出讀寫請(qǐng)求時(shí),這個(gè)集中式控制器會(huì)檢查并發(fā)出必要的命令,以在主存和CPU Cache之間或在CPU Cache自身之間進(jìn)行數(shù)據(jù)同步和傳輸。
- Snoopy 協(xié)議 。這種協(xié)議更像是一種數(shù)據(jù)通知的總線型的技術(shù)。CPU Cache通過這個(gè)協(xié)議可以識(shí)別其它Cache上的數(shù)據(jù)狀態(tài)。如果有數(shù)據(jù)共享的話,可以通過廣播機(jī)制將共享數(shù)據(jù)的狀態(tài)通知給其它CPU Cache。這個(gè)協(xié)議要求每個(gè)CPU Cache 都可以 “窺探” 數(shù)據(jù)事件的通知并做出相應(yīng)的反應(yīng)。
由于 snooping 使用了廣播會(huì)占用總線帶寬,一般認(rèn)為 snooping 擴(kuò)展性不如 directory-based,但是在帶寬足夠的前提下,snooping 會(huì)更快。
本文轉(zhuǎn)載自微信公眾號(hào)「運(yùn)維開發(fā)故事」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系運(yùn)維開發(fā)故事公眾號(hào)。