CXL協(xié)議的功能與特性

CXL協(xié)議發(fā)展經(jīng)歷過1.0、1.1、2.0、3.0版本,如今市場上已經(jīng)出現(xiàn)了基于CXL1.1和2.0的產(chǎn)品,3.0協(xié)議還在開發(fā)中。協(xié)議本身更是吸引了一眾大型科技公司積極參與其中。今天來了解一下什么是CXL協(xié)議。

首先CXL協(xié)議主要用于CPU與Device(設(shè)備)之間的數(shù)據(jù)加速傳輸,具有低延遲、高速率的優(yōu)點(diǎn),其主要是用于人工智能和機(jī)器學(xué)習(xí)等應(yīng)用場景的數(shù)據(jù)交互過程中。我們可以看到PCIe協(xié)議到5.0版本之后,像要求大量IO數(shù)據(jù)交互的AI應(yīng)用就出現(xiàn)了性能瓶頸,因此引入了CXL協(xié)議概念突破瓶頸。

CXL協(xié)議能解決哪些問題?首先是共享內(nèi)存的問題,支持PCIe協(xié)議的大量設(shè)備都有內(nèi)存,但這些內(nèi)存都沒有被CPU進(jìn)行統(tǒng)一編址,因此互相之間不能被調(diào)用導(dǎo)致延遲問題。CXL協(xié)議引入了共享內(nèi)存概念,CPU可以對所有device上的內(nèi)存進(jìn)行統(tǒng)一編址,互相能進(jìn)行調(diào)用。

第二是高延遲問題,比如CPU和GPU之間交互數(shù)據(jù),CPU要先把數(shù)據(jù)放在CPU的緩存層里,再到CPU內(nèi)存,再通過PCIe鏈路到GPU的內(nèi)存然后是GPU的緩存層再到達(dá)GPU,整個鏈路非常長,節(jié)點(diǎn)非常多,還涉及IO帶寬問題。

因此,我們希望能讓CPU直接去讀寫GPU的內(nèi)存,這樣就能跳過繁復(fù)的過程從而降低延遲。帶著這樣的愿景我們看一下CXL的功能特性。

CXL2.0版本有一個FLIT based transfers功能,采用一種544bit的FLIT模式進(jìn)行傳輸,相當(dāng)于一整塊一整塊進(jìn)行數(shù)據(jù)傳輸降低數(shù)據(jù)傳輸延遲,與NVMe協(xié)議的隊列概念相像。

CXL2.0增加的新功能

CXL2.0加入了memory Pooling共享內(nèi)存池的概念,具體來看這幾個功能:

1、Switching是交換功能,極大擴(kuò)展了CXL和device的應(yīng)用場景,如果沒有交換能力,只能直掛在CPU root port下,應(yīng)用場景少而少。

2、Resource Pooling,就是內(nèi)存池,這種全新模式將改變整個數(shù)據(jù)中心的硬件結(jié)構(gòu)。

3、Fabric Management以及CXL EP enumeration過程。簡單來說,它在模仿CXL的設(shè)備也在模仿PCIe的枚舉過程,因?yàn)槲覀儗CIe枚舉過程和啟動過程非常熟悉,所以CXL也會設(shè)計成將其枚舉成一個PCIe的一批設(shè)備去交互一些性能便于大家開發(fā)。

4、安全性。IDE(鏈接完整性與數(shù)據(jù)加密),加入加密能力。

5、引入PCIe協(xié)議里的一些功能,如熱拔插、QoS還有錯誤上報等。

6、兼容性,向后兼容CXL1.1協(xié)議。

接下來具體看CXL的三個子協(xié)議及其對應(yīng)的三種設(shè)備。

首先它有三個子協(xié)議——CXL.io、CXL.cache、CXL.memory。

CXL.io,從數(shù)據(jù)來看和PCIe的event一模一樣的,主要用于初始化、鏈接、設(shè)備發(fā)現(xiàn),枚舉以及寄存器的訪問。從某種程度來講,它就是一個PCIe的event。

CXL.cache,就是device去使用host的主內(nèi)存。

CXL.memory,是CPU使用devices上的內(nèi)存,是兩個方向。

這部分為什么會有兩個協(xié)議?兩者功能不是一樣的嗎?這主要是因?yàn)橐胍粋€非對稱的概念,CXL協(xié)議是一個非對稱的協(xié)議,PCIe是一個對稱的協(xié)議,對稱即PCIe從host發(fā)出來和devices發(fā)出來結(jié)構(gòu)一模一樣,同時對端設(shè)備接收到數(shù)據(jù)后處理也是一模一樣,都是先物理層、協(xié)議層再到數(shù)據(jù)鏈路層。

CXL不用,CXL.cache是device去使用host的內(nèi)存,不但要用還要跟CPU的緩存保持?jǐn)?shù)據(jù)一致性,如果不通信,有些內(nèi)存已經(jīng)被使用或不存在,就會出現(xiàn)很多問題。

而CXL memory不一樣,CXL memory是CPU使用device上的內(nèi)存,不需要去跟device緩存,devices也沒有緩存,有也不用交互。因?yàn)镃PU這邊緩存是直接用設(shè)備內(nèi)存的,直接和CPU通信就可以。所以兩者的使用方向和目的不一樣,就被拆分成了兩個子協(xié)議。

基于這三個子協(xié)議就有了三種設(shè)備類型,CXL.io是所有的設(shè)備都需要,因?yàn)樗幸粋€枚舉過程。剩下的兩個協(xié)議進(jìn)行組合后就產(chǎn)生了三種設(shè)備。

第一種常見的有智能網(wǎng)卡,特點(diǎn)是有緩存沒有內(nèi)存,它的內(nèi)存是直接使用CPU內(nèi)存,其優(yōu)勢在于CPU處理數(shù)據(jù)時非???。因?yàn)閮?nèi)存就在自己這里,直接讀取和處理就可以,第三種設(shè)備就不同則是只有內(nèi)存沒有緩存,也就是說它其實(shí)是CPU的一個內(nèi)存無限擴(kuò)展。

傳統(tǒng)CPU主板上的內(nèi)存槽位有限,主板面積有限,而提高單條內(nèi)存容量,依然有限制。

如果能無限擴(kuò)展CPU的內(nèi)存,那么就能擁有無限內(nèi)存,我們也可以看到大量廠商都在嘗試做memory的擴(kuò)展產(chǎn)品,回過來看第二類設(shè)備,適用于智能加速卡,集合了前兩種設(shè)備的功能,支持三個子協(xié)議,同時我們可以看到圖中cache有一個虛線,其實(shí)這個cache可以做動態(tài)調(diào)整,主要原因在于它本身不跑CXL協(xié)議,用PCIe協(xié)議,device用自己內(nèi)存效率很高,但如果把device的內(nèi)存用CPU管理,那device用自己的內(nèi)存時,還要跟CPU進(jìn)行交互獲得同意才行效率很低。

這種情況下,它就有一個Master和Subordinate的概念,就是允許device上的cache作為主cache,用自己內(nèi)存就很快。CPU要用device上的內(nèi)存時,用CPU的cache和device上的內(nèi)存進(jìn)行數(shù)據(jù)交互,然后去使用device的內(nèi)存,以此優(yōu)化device上使用自己內(nèi)存的方式。

CXL的配置

CXL的配置速率是32G支持X16、X8、X4、X2的通道。同時它也支持Bifurcation功能,這時1×16變成的2×8、12×4,速率也支持降速,降級模式從Gen4到Gen3,雖然速率下降,但硬件還需要5.0的硬件。接下來具體看協(xié)議層。

左圖是一個協(xié)議層的關(guān)系圖,可以從物理層開始看,從下往上。物理層分電極層和邏輯層,和PCIe的物理層相同。但增加了Flex Bus port的概念,在物理層會選擇上層是用PCIe的鏈路層還是CXL的鏈路層。再往上可以看到一個ARB/MUX的模塊,如果是PCIe,這個模塊會直接被pass掉,不做任何處理。如果選擇CXL,這個模塊會仲裁下面上來的數(shù)據(jù),判斷數(shù)據(jù)是要轉(zhuǎn)存轉(zhuǎn)到哪個鏈路層。除此之外還要去維護(hù)整個鏈路的狀態(tài)。

這是CXL的數(shù)據(jù)交互的過程,分為五部分:

唯亞威Xgig CXL協(xié)議分析

具體來看FLIT數(shù)據(jù)包的結(jié)構(gòu),CXL.cache和CXL.memory的一個數(shù)據(jù)定義。CXL.cache定義了幾個概念,第一,D2H就是device到host方向的數(shù)據(jù),H2D就是host往device方向的數(shù)據(jù)。同時兩個方向各自定義了三個通道,叫Requesrt,Response和Data。

實(shí)際數(shù)據(jù)交互過程中,它有一個Snpdata是保持cache的一致性,一個UQID,有一個隊列概念,用5E追蹤整個數(shù)據(jù)的transaction鏈路的進(jìn)程,同樣一個任務(wù)有同樣一個ID。

單純的數(shù)據(jù)交互就是host取一個memory,device回一個cmp。當(dāng)CPU去讀device的內(nèi)存時,它的cache就在自己那一側(cè),不需要維護(hù)device的cache,使用device的內(nèi)存即可。它定義的時候cache和memory的應(yīng)用場景其實(shí)是分開的。因此兩邊的數(shù)據(jù)結(jié)構(gòu)完全不一樣。

CXL是通過固定寬度數(shù)據(jù)包也就是Flit格式傳輸數(shù)據(jù),你可以認(rèn)為他是一個車廂,有四個位置,限定格式擺放“物品”(攜帶數(shù)據(jù))。

來看一個實(shí)際的數(shù)據(jù)包展示,上面的Xgig TraceView會進(jìn)行協(xié)議分析,幫助你把整個數(shù)據(jù)羅列在一個event里,方便查看數(shù)據(jù)同時為你呈現(xiàn)這個transaction是正常完成的,還有用時多長等參數(shù)。

另外我們看transaction,也可以看到它其實(shí)相當(dāng)于是一個read,跨越多個FLIT包,第一個發(fā)送一個命令,回來一共有8個數(shù)據(jù),但第一個FLIT只有3個,第二行是8,有8個要求,后面的PldSlots就有3個,還缺5個,第二個FLIT給了4個,還缺一個。最后一行的PldSlots里面就補(bǔ)充了,所以在CXL里面,一個TLP有可能跨越了多個FLIT包,想看里面的數(shù)據(jù),要把這個數(shù)據(jù)拼湊完整才能看一個整體的數(shù)據(jù)交互過程。

對于這種協(xié)議來講,其攜帶的額外信息很多,優(yōu)勢就在于當(dāng)你出現(xiàn)高速數(shù)據(jù)傳輸?shù)臅r,攜帶數(shù)據(jù)的能力越強(qiáng),速率越高,數(shù)據(jù)量越大,這種flit模式下的低延遲高速率的優(yōu)勢就會越明顯。因此它是主要用這種高速傳輸?shù)母拍睢?/p>

再來看Xgig協(xié)議分析儀會提供CXL里面的觸發(fā)條件,用于解決定位問題,讓某一個特殊CXL的數(shù)據(jù),把主要問題集中在那個event出現(xiàn)的時候,分析儀可以設(shè)計一個觸發(fā)條件,觸發(fā)這個點(diǎn),然后把這個點(diǎn)前后的數(shù)據(jù)抓出來,這樣大家定位問題和分析問題會非常方便。

第二還有進(jìn)行性能分析,分析儀會去分析這個CXL比如延遲的最大值,最小值,還有它的速率的最大值最小值,以及flits的一些極限值,還有時間上的最大最小值,進(jìn)行性能的統(tǒng)計和計算。

最后會統(tǒng)計出數(shù)據(jù),將你抓取的數(shù)據(jù)里所有CXL的cache,memory具體是多少數(shù)量,其中具體分read還是write還是response,所有數(shù)據(jù)都會統(tǒng)計出一個數(shù)量。同時右邊呈現(xiàn)一個成像圖,把這整個數(shù)據(jù)分成50等份,向你顯示read在這個數(shù)據(jù)抓取時是前面、中間還是最后比較多。

VIAVI Xgig PCIe 5.0 分析儀介紹

唯亞威在去年就已經(jīng)發(fā)布了Gen5×16的硬件產(chǎn)品系列,支持Gen5×16的PCIe鏈路最大,同時上下兼容低速低帶寬。存儲空間會非常大,存儲空間最大為256GB,達(dá)到RAM級別,同時分析儀還擁有分段能力,這是我們所特有的。

另外唯亞威還支持Exerciser的模擬協(xié)議一致性,同時支持Jamming錯誤注入,最后一個是Analyzer,支持CXL2.0的協(xié)議分析,也支持PCIe的協(xié)議分析。

唯亞威分析儀特點(diǎn)包括,第一,我們已經(jīng)過了PCI SIG協(xié)會的4.0/5.0的協(xié)會評測認(rèn)證,可以從協(xié)會的官網(wǎng)看到我們的MOI文檔。

第二個特點(diǎn)是唯亞威在上海有一個研發(fā)中心和實(shí)驗(yàn)室,在數(shù)據(jù)支持方面很方便,尤其是基于中國區(qū)客戶功能需求把握方面。傳統(tǒng)外資公司很多都是把需求轉(zhuǎn)給美國,然后再轉(zhuǎn)給美國的研發(fā)去分析問題。 因?yàn)樵谄渌貐^(qū)并不一定能理解中國區(qū)的不同功能需求。而唯亞威在中國區(qū)的實(shí)驗(yàn)室可以處理各種問題,對重現(xiàn)和模擬一些不同環(huán)境非常有利。

分享到

崔歡歡

相關(guān)推薦