CXL、CCIX和SmartNIC助力 PCIe 5加速飛奔
過去三十年間,基于服務器的運算歷經多次飛躍式發展。在1990年代,業界從單插槽獨立服務器發展到服務器群集。緊接著在千禧年,產業首次看到雙插槽服務器;在這之后,多核處理器也相繼問世。進入下一個十年,GPU的用途遠遠超出了繪圖處理的范疇,我們見證了基于FPGA的加速器卡的興起。
邁入2020年,SmartNIC網絡適配器(network interface card;NIC),即數據處理單元(DPU)開始風靡。它們大量采用FPGA、多核Arm叢集或是兩者混合運用,每種作法都能大幅提高解決方案的效能。從股票交易到基因組定序,運算正以更快的速度求得解答。在機箱內部,數據信道是PCI Express(PCIe)。雖然幾經變革,但它仍然是毫無爭議的選擇。
PCIe 的演進發展
PCIe于2003年首次亮相,恰逢網絡準備開始從以千兆位以太網絡(GbE)為主要互聯的時代往更高速的時代躍進。此時,Myrinet和Infiniband等高效能運算(HPC)網絡分別以2Gb/s 和8Gb/s的數據傳輸速率超越GbE。此后不久,10-GbE網絡接口控制器(network interface controllers,NICs)嶄露頭角,而且擁有優異效能。它們在每個方向上的速率都接近1.25GB/s,這種8通道(x8)PCIe總線的誕生恰逢其時。
第一代 PCIe x8總線在每個方向上的速率為2GB。當時16通道(x16)的插槽尚未問世,且服務器主板一般只提供零星x8插槽和幾個x4插槽。為了節省成本,部分服務器廠商甚至使用了x8連接器,但有趣的是卻僅將它們連接成x4。
大部分人(例如網絡架構師)都知道每一代PCIe的速率都翻了一倍?,F今的第四代PCIe x8 插槽的速率大約為16GB/s,所以下一代PCIe的速率將大約為32GB/s,如果這就是第五代PCIe能達到的水平,那確實也不錯。不過它還可以像阿拉丁神燈那樣神奇,能以CXL和CCIX兩種新協議的形式允許在CPU與SmartNIC,或是協處理器等加速器之間實現高效的通訊。
CXL
我們先來談CXL,它提供了定義明確的主從模式。在這種模式下,CPU的根聯合體(root complex)能透過與加速器卡的高帶寬鏈接來共享高速緩存和主系統內存,如圖一。
圖一 : 透過CXL與處理器相連的加速器概念圖(來源:Compute Express Link Specification July 2020)
這有助于主機CPU可以有效地將供作分配給加速器,并接收其處理結果。部份此類加速器使用DRAM或高帶寬內存(HBM)來配備大容量高效能的本機內存。借助CXL,現在可與主機CPU共享這些高效能內存,從而更輕松地在共享內存中處理數據集(dataset)。
此外,對于不可分割交易(Atomic Transaction),CXL能在主機CPU和加速器卡之間共享高速緩存。CXL在改善主機與加速器間的通訊方面有了長足的發展,但卻未能解決PCIe總線上的加速器之間的通訊問題。
2018 年,Linux內核終于推出了可支持PCIe點對點(Peer-to-peer;P2P)模式的代碼。這使PCIe總線上的不同設備之間更容易共享數據。雖然P2P早在此次內核更新之前就已存在,但它需要精心調整才能運行,往往要求用戶能夠透過程序設計就兩個對等設備進行控制。隨著內核的更新,加速器與PCIe總線上的PCIe/NVMe內存或另一個加速器間的通訊方式相對簡化。
隨著解決方案變得日益復雜,簡單的P2P已不敷使用,而且還會限制解決方案的效能。如今,我們使用DIMM插槽中的永久內存、NVMe儲存和直接插在PCIe總線上的智能儲存(SmartSSD),搭配各種加速器卡和SmartNIC或DPU(其中有些本身就具有很大的儲存空間)。由于這些設備之間必須能互相通訊,因此昂貴的服務器處理器將化身為成本高昂的交通號志,使得海量數據流出現瓶頸。CCIX在此情形下就能大顯身手了,其環境適合在PCIe總線上的設備之間建立對等關系。
CCIX
有些人認為CCIX標準與CXL大同小異,但事實并非如此。在實現總線上點對點連接,CCIX的方法與CXL截然不同,如圖二。此外,它還能利用不同設備上的內存,每個設備具有不同的效能特征,對這些內存進行池化,并映像到單一的非一致性內存存取 (Non-Uniform Memory Access;NUMA) 架構。隨后它建立一個虛擬地址(Virtual Address)空間,使池中的所有設備都能存取NUMA內存的完整空間。這已經遠遠超出簡單的PCIe P2P內存間復制或是由CXL提出的主從模式。
圖二 : 三種CCIX配置圖例,包括直連式、交換拓撲和混合菊煉(來源:An Introduction to CCIX White Paper)
作為一種概念,NUMA自1990年代初期以來就已經存在,所以業界對它非常了解。在此基礎上,當今大多數服務器都能輕松地擴展到太字節(TB)或更大容量的DRAM內存。不僅如此,還存在能映像名為持續性內存(Persistent Memory;PMEM)或儲存級內存(Storage Class Memory;SCM)的新型內存的驅動程序,它能與真實內存(Real Memory)搭配,創建「巨量內存」。綜合運用PCIe 5和CCIX,將會進一步使系統架構師能利用SmartSSD擴展這一概念。
運算儲存
SmartSSD也稱作是運算儲存,它將操作數件(通常為FPGA加速器)與固態驅動器中的儲存控制器緊密布局,或在控制器中嵌入運算功能,從而使SmartSSD中的操作數件能夠在數據進出驅動器的過程中進行處理,進而重新定義數據的存取和儲存方式。
雖然SmartSSD最初被視為成組設備,但在FPGA中安裝適當的未來驅動程序后,可以當作像按字節尋址的儲存器使用?,F今生產的SmartSSD具有數TB的容量,但容量還是會爆炸。因此,只有透過NUMA,SmartSSD才能用于擴展巨量內存的概念,這樣一來主機CPU和加速器應用就能跨眾多設備存取數TB容量的內存,且無需使用該儲存器重新寫入應用程序。此外,藉由實現在線壓縮與加密,SmartSSD還能提供更佳的TCO解決方案。
導入SmartNIC
具體應用上該如何使SmartNIC與此架構搭配呢?SmartNIC是一種特殊類型的加速器,位于PCIe總線和外部網絡之間的連接處。SmartSSD將運算放在數據的附近,而SmartNIC則讓運算緊臨網絡。為什么這一點如此重要?簡單地說,我們很少關注服務器應用自身的網絡等待時間、擁塞、封包遺失(Packet Loss)、協議、加密、覆蓋網絡(Overlay Network)或安全政策等問題。
為了解決這些問題,創建了諸如QUIC之類的低延遲協議來改善延遲問題、減少擁塞以及從封包遺失中復原。我們精心開發出了TLS并采用內核TLS(kTLS)加以擴展,以提供加密和安全的數據傳輸。我們現在看到kTLS被添加為SmartNIC的一項卸除功能。
為了支持虛擬機(VM)和容器(container)的協作,我們創建了覆蓋網絡,隨后又開發出Open vSwitch(OvS)等技術定義和管理覆蓋網絡。SmartNIC正開始卸除OvS。
最后,我們按照政策進行管理以確保安全。這些政策有望反映在Calico和Tigera等形式的協作框架中。這些政策很快也將透過使用P4等編程match-action框架被卸除到SmartNIC。這些任務都應該卸除到稱為SmartNIC的專用加速器中。
架構師可以藉由CCIX構建出一個解決方案,作為具有單個虛擬地址空間的巨量內存空間,使多個加速器直接存取真實內存和SmartSSD中的儲存器。例如一個解決方案可由四個不同的加速器來構建,如圖三。
圖三 : 圖中所示為CCIX應用范例,它使用了修改過的CCIX 4c-混合菊煉模型
SmartNIC可能裝有視訊譯碼器,以便從攝影機導入視訊時,可以轉換回未經壓縮的幀,并儲存在NUMA虛擬地址空間的共享幀緩沖存儲器中。在這些幀可用后,執行人工智能(AI)影像辨識應用上的第二個加速器能掃描這些幀,辨識人臉或車牌。與此同時,第三個加速器可以對這些幀進行轉碼,用于顯示和長期儲存。最后,在SmartSSD上運行的第四個應用則負責在AI和轉碼任務成功完成后,從幀緩沖存儲器中刪除這些幀。這里我們用四個高度專業的加速器協同工作,形成所謂的「Smartworld」應用。
業界開始增添更多內核以解決與摩爾定律相關的問題。如今,雖然有大量的內核,但CPU與 NIC、儲存和加速器等外部設備間的帶寬不足。PCIe Gen5是我們的下一個關鍵發展點。它能大幅提高帶寬,開啟在CPU上進行高效能運算的時代。
例如,典型的CPU核心能處理1Gb/s+,但如果你采用128個雙核CPU,那么PCIe Gen4x16是不夠用的。對于需要在CPU核心和加速器之間進行密切交互的應用來說,CXL和CCIX協議提供的高速緩存一致性具有諸多優勢。數據庫、安全性和多媒體等主要應用作業負載現在正開始利用這些優勢。
協作
這個問題的最后一個環節是協作。這項功能指Kubernetes等框架能自動發現并管理加速的硬件,并在協作數據庫中將其標記為在線可用。它隨后還需要知道該硬件是否支持上述一個或多個協議。隨后,隨著對新解決方案實例的請求進入并動態啟動,能夠由這些高級協議感知并加速的容器實例就可以使用該硬件。
以賽靈思資源管理器(XRM)為例,能夠與Kubernetes協同工作并管理池中的多個 FPGA資源,從而提升加速器的整體利用率。這樣一來,就能自動分派新發布的實例應用,使其在基礎設施中最適當的高效能資源上執行,同時遵守既定的安全政策。
SmartNIC和DPU使用了PCIe 5和CXL或CCIX,將為我們提供高度互連的加速器,有助于開發復雜、高效能的解決方案。這類SmartNIC將在我們的數據中心內乃至整個世界范圍內,向其他系統提供運算密集型連接。甚至可以構想這樣一個未來:命令一旦進入Kubernetes控制器,就在SmartNIC資源上以原生執行的方式啟動容器或Pod。這個新作業負載的大量運算隨后可能會在服務器中某處的加速器組件上進行,甚至完全不需要服務器主機CPU的直接參與。
結語
為了正確發揮這樣的功能,就需要進一步強化安全,使安全水平遠遠高于Calico和Tigera。此外,我們也需要新的加速器感知安全框架來將安全環境(通常稱為安全隔離區;Secure Enclave)擴展到多個運算平臺上,這樣就使得機密運算有了用武之地。它應該同時提供所需架構和API,為單一個安全隔離區內多個運算平臺上的在用數據提供保護。
所有敏感信息隔離設施(Sensitive Compartmented Information Facility;SCIF)都是如此。計算機中的安全隔離區應能涵蓋多個運算平臺,而激動人心的時刻就在眼前。
評論