在第七屆云計(jì)算大會(huì)的PMC技術(shù)專(zhuān)場(chǎng)上演講嘉賓連續(xù)進(jìn)行了七場(chǎng)技術(shù)演講,其中,PMC數(shù)據(jù)中心存儲(chǔ)架構(gòu)師張冬沒(méi)有過(guò)多談?wù)撌袌?chǎng)和行業(yè)問(wèn)題,而是從底層技術(shù)出發(fā),對(duì)OpenPowerCAPI進(jìn)行了分析和闡述,為我們介紹了CAPI為什么能這么快。
之前,POWER CPU只是IBM在做小型機(jī)的時(shí)候使用,OpenPOWER開(kāi)放后,成立了OpenPower基金會(huì),基金會(huì)大部分成員都非常專(zhuān)注于CAPI(相干加速器處理器接口)上的利用,比如將外置的網(wǎng)絡(luò)、GPU、閃存等設(shè)備通過(guò)CAPI直接與CPU相連接,并在此基礎(chǔ)上根據(jù)不同的主流應(yīng)用場(chǎng)景進(jìn)行開(kāi)放的、定制化的系統(tǒng)設(shè)計(jì),PMC除了關(guān)注這些外,還關(guān)注CAPI與NVMe進(jìn)行協(xié)作的問(wèn)題。
傳統(tǒng)架構(gòu)的缺點(diǎn)和瓶頸
現(xiàn)在無(wú)論是2路、4路、8路還是32路服務(wù)器,他們架構(gòu)中的CPU之間的互聯(lián)有的是直聯(lián),有的通過(guò)NC(NC就類(lèi)似以太網(wǎng)絡(luò)里面的網(wǎng)橋)。核心之間要傳輸數(shù)據(jù)方式中,最高效的是共享內(nèi)存,代碼里寫(xiě)死。最低效的方法就是走網(wǎng)絡(luò),封裝一堆的包出去,發(fā)送一個(gè)數(shù)據(jù)給遠(yuǎn)端的某個(gè)線程,調(diào)用一堆接口,走到協(xié)議棧,再到設(shè)備驅(qū)動(dòng),然后到網(wǎng)絡(luò),接著收包解析,這個(gè)過(guò)程非常慢。所以超級(jí)計(jì)算機(jī)沒(méi)法做到CPU之間進(jìn)行高速網(wǎng)絡(luò)共享內(nèi)存因?yàn)槌杀咎撸瑳](méi)法將幾萬(wàn)個(gè)CPU連接起來(lái),只能走網(wǎng)絡(luò)了,這也是松耦合系統(tǒng)的一個(gè)妥協(xié)。
沒(méi)有CAPI的FPGA為什么也不太行
面對(duì)現(xiàn)在大數(shù)據(jù)分析、模式匹配、熱點(diǎn)識(shí)別等,要求非常大的計(jì)算量,傳統(tǒng)CPU出現(xiàn)瓶頸。普通的CPU其實(shí)也能計(jì)算,但是計(jì)算速度太慢,比如,只有64位寬來(lái)處理1GB數(shù)據(jù),那便需要循環(huán)拆分N次才能算完,普通的CPU無(wú)法迅速處理這么大的運(yùn)算量。
在多路CPU系統(tǒng)中,線程看到的都是單一的虛擬地址空間,這個(gè)虛擬地址空間會(huì)被操作系統(tǒng)映射到真實(shí)的物理空間里,但是所有的CPU看到都是同一份物理地址空間。
所有CPU看到單一物理地址空間;
所有Threads看到單一虛擬地址空間;
PCIE物理地址空間映射到CPU物理地址空間;
CPU物理地址空間也映射到PCIE物理地址空間。
有人想到硬件加速,做法就是把某個(gè)專(zhuān)業(yè)計(jì)算在電路層面展開(kāi),展開(kāi)成更寬的位寬,更多的并行計(jì)算單元,去除一些不必要的緩存優(yōu)化和流水線優(yōu)化等,其實(shí)這就是專(zhuān)用運(yùn)算芯片所做的,F(xiàn)PGA(Field-ProgrammableGate Array,即現(xiàn)場(chǎng)可編程門(mén)陣列)是現(xiàn)場(chǎng)可編程的專(zhuān)用芯片上述就是所謂的硬加速。
在CAPI之前的FPGA怎么接入系統(tǒng)使用的呢?它是把FPGA做到一塊PCIe卡里,F(xiàn)PGA通過(guò)CPU的PCIe控制器訪問(wèn)到主機(jī)內(nèi)存空間。PCIe和CPU各自有各自的地址空間,CPU不能直接訪問(wèn)PCIe的地址,要先訪問(wèn)自己的地址,PCIE物理地址空間映射到CPU物理地址空間,反之CPU物理地址空間也需要映射到PCIE物理地址空間,這是個(gè)很費(fèi)勁的過(guò)程。
在CAPI之前的FPGA怎么接入系統(tǒng)使用的呢?它是把FPGA做到一塊PCIe卡里,F(xiàn)PGA通過(guò)CPU的PCIe控制器訪問(wèn)到主機(jī)內(nèi)存空間。PCIe和CPU各自有各自的地址空間,CPU不能直接訪問(wèn)PCIe的地址,要先訪問(wèn)自己的地址,PCIE物理地址空間映射到CPU物理地址空間,反之CPU物理地址空間也需要映射到PCIE物理地址空間,這是個(gè)很費(fèi)勁的過(guò)程。
數(shù)據(jù)出了ALU,面對(duì)復(fù)雜的路由網(wǎng)絡(luò),目的地址為內(nèi)存地址,但是其相對(duì)外部網(wǎng)絡(luò)的復(fù)雜性在于,目標(biāo)的位置是不固定的,還可能有多份拷貝。Need Coherency!硬件透明搞定Cache Coherency。CC不負(fù)責(zé)多線程并發(fā)訪問(wèn)cache line時(shí)的互斥,互斥需要程序顯式發(fā)出lock,底層硬件會(huì)鎖住總線訪問(wèn)周期。
如圖所示是個(gè)四核CPU,每個(gè)CPU內(nèi)部還有很多東西,每一個(gè)CPU的每個(gè)核心都有各自的緩存控制器,三級(jí)緩存控制器,每個(gè)CPU還包含內(nèi)存控制器,PCIe控制器,QPI控制器(互聯(lián)CPU相關(guān)),還有緩存一致性的控制器,他們?nèi)冀尤胍粋€(gè)高速的總線里面。多個(gè)線程看到的數(shù)據(jù)應(yīng)該是時(shí)刻一致的,需要廣播許多信息,這就是CacheCoherency,Cache Coherency Agent 負(fù)責(zé)把消息推送出去以及接受其他CPU發(fā)出的探尋。
多CPU之間廣播量非常大,所以需要一個(gè)目錄來(lái)記錄本地的核心里面都有哪些緩存地址被緩存下來(lái)了。其他的CPU如果發(fā)廣播來(lái)探尋,本地直接把目錄查一下,如果沒(méi)有命中緩存就直接不再往后端核心緩存控制器發(fā)消息,這樣可以提升性能。所以說(shuō)CC(Cache Coherency)很重要的,要確保線程看到同樣的東西,同一個(gè)時(shí)刻,這叫實(shí)時(shí)一致性,且不允許異步。但是它不負(fù)責(zé)兩個(gè)線程,如果互相都在寫(xiě)這份數(shù)據(jù),會(huì)出現(xiàn)相互覆蓋,這要靠(CacheConsistancy)軟件解決。PCIe寫(xiě)內(nèi)存也需要做CC(Cache Coherency),寫(xiě)入數(shù)據(jù)到某一地址,這個(gè)地址在其他的CPU緩存里,要把它作廢掉。
評(píng)論