• <samp id="oq8oq"></samp>
    <object id="oq8oq"><object id="oq8oq"></object></object>
    <samp id="oq8oq"><label id="oq8oq"></label></samp>
  • <samp id="oq8oq"><sup id="oq8oq"></sup></samp>
  • <input id="oq8oq"><s id="oq8oq"></s></input>
    中國數據存儲服務平臺

    唯亞威陸小虎:CXL協議詳解

    7月28-30日,以“閃耀數字經濟新引擎”為主題的2022全球閃存峰會(Flash Memory World)在線上盛大召開。7月29日,PCIe、CXL新興應用論壇上,唯亞威VIAVI中國區PCIe協議分析儀專家陸小虎發表了以“CXL協議分析”為題的主旨演講,詳解CXL協議技術。

    CXL協議的功能與特性

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

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

    CXL協議能解決哪些問題?首先是共享內存的問題,支持PCIe協議的大量設備都有內存,但這些內存都沒有被CPU進行統一編址,因此互相之間不能被調用導致延遲問題。CXL協議引入了共享內存概念,CPU可以對所有device上的內存進行統一編址,互相能進行調用。

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

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

    CXL2.0版本有一個FLIT based transfers功能,采用一種544bit的FLIT模式進行傳輸,相當于一整塊一整塊進行數據傳輸降低數據傳輸延遲,與NVMe協議的隊列概念相像。

    CXL2.0增加的新功能

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

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

    2、Resource Pooling,就是內存池,這種全新模式將改變整個數據中心的硬件結構。

    3、Fabric Management以及CXL EP enumeration過程。簡單來說,它在模仿CXL的設備也在模仿PCIe的枚舉過程,因為我們對PCIe枚舉過程和啟動過程非常熟悉,所以CXL也會設計成將其枚舉成一個PCIe的一批設備去交互一些性能便于大家開發。

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

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

    6、兼容性,向后兼容CXL1.1協議。

    接下來具體看CXL的三個子協議及其對應的三種設備。

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

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

    CXL.cache,就是device去使用host的主內存。

    CXL.memory,是CPU使用devices上的內存,是兩個方向。

    這部分為什么會有兩個協議?兩者功能不是一樣的嗎?這主要是因為要引入一個非對稱的概念,CXL協議是一個非對稱的協議,PCIe是一個對稱的協議,對稱即PCIe從host發出來和devices發出來結構一模一樣,同時對端設備接收到數據后處理也是一模一樣,都是先物理層、協議層再到數據鏈路層。

    CXL不用,CXL.cache是device去使用host的內存,不但要用還要跟CPU的緩存保持數據一致性,如果不通信,有些內存已經被使用或不存在,就會出現很多問題。

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

    基于這三個子協議就有了三種設備類型,CXL.io是所有的設備都需要,因為它有一個枚舉過程。剩下的兩個協議進行組合后就產生了三種設備。

    第一種常見的有智能網卡,特點是有緩存沒有內存,它的內存是直接使用CPU內存,其優勢在于CPU處理數據時非???。因為內存就在自己這里,直接讀取和處理就可以,第三種設備就不同則是只有內存沒有緩存,也就是說它其實是CPU的一個內存無限擴展。

    傳統CPU主板上的內存槽位有限,主板面積有限,而提高單條內存容量,依然有限制。

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

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

    CXL的配置

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

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

    這是CXL的數據交互的過程,分為五部分:

    唯亞威Xgig CXL協議分析

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

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

    單純的數據交互就是host取一個memory,device回一個cmp。當CPU去讀device的內存時,它的cache就在自己那一側,不需要維護device的cache,使用device的內存即可。它定義的時候cache和memory的應用場景其實是分開的。因此兩邊的數據結構完全不一樣。

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

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

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

    對于這種協議來講,其攜帶的額外信息很多,優勢就在于當你出現高速數據傳輸的時,攜帶數據的能力越強,速率越高,數據量越大,這種flit模式下的低延遲高速率的優勢就會越明顯。因此它是主要用這種高速傳輸的概念。

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

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

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

    VIAVI Xgig PCIe 5.0 分析儀介紹

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

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

    唯亞威分析儀特點包括,第一,我們已經過了PCI SIG協會的4.0/5.0的協會評測認證,可以從協會的官網看到我們的MOI文檔。

    第二個特點是唯亞威在上海有一個研發中心和實驗室,在數據支持方面很方便,尤其是基于中國區客戶功能需求把握方面。傳統外資公司很多都是把需求轉給美國,然后再轉給美國的研發去分析問題。 因為在其他地區并不一定能理解中國區的不同功能需求。而唯亞威在中國區的實驗室可以處理各種問題,對重現和模擬一些不同環境非常有利。

    未經允許不得轉載:存儲在線 » 唯亞威陸小虎:CXL協議詳解
    分享到: 更多 (0)
    三个男人同时吮我的奶头
  • <samp id="oq8oq"></samp>
    <object id="oq8oq"><object id="oq8oq"></object></object>
    <samp id="oq8oq"><label id="oq8oq"></label></samp>
  • <samp id="oq8oq"><sup id="oq8oq"></sup></samp>
  • <input id="oq8oq"><s id="oq8oq"></s></input>