設計一個SmartNIC


https://www.cnblogs.com/shaohef/p/12227496.html

 

smartnic 是一個網絡接口卡(網絡適配器),使用其自己的板載處理器(ASIC, FPGA, SOC),卸載HOST CPU的網絡處理功能。smartNIC可以執行加密/解密,防火牆,TCP / IP和HTTP處理的任意組合。 SmartNIC非常適合於高流量的Web服務器。 

虛擬化場景常見的smartnic是進行ovs的功能卸載。實現方式是virtIO(1.1 new video and pdf)的硬件化(目前是SRIOV,后期可能會由SIOV取代)。

如果不是虛擬化的開發人員,沒有參與過XEN,QEMU/KVM,或者cloud-hypersor等項目的開發,也沒有進行過相關代碼的走讀,也沒有關系。但是最好需要閱讀以下幾篇文章,這幾篇文件雖然沒有特別深入的介紹實現細節,但是非常系統的從原理和架構上進行了簡明扼要的總覽描述(請按循序閱讀)。

1. Introduction to virtio-networking and vhost-net  (總覽,適合想了解初步原理)

2. Deep dive into Virtio-networking and vhost-net   (深入,適合對技術感興趣)

3. How vhost-user came into being: Virtio-networking and DPDK  (總覽)

4. A journey to the vhost-users realm   (深入)

5. Achieving network wirespeed in an open standard manner: introducing vDPA (總覽)

6.  How deep does the vDPA rabbit hole go?   (深入)

附加幾篇動手文章:

1. Hands on vhost-net: Do. Or do not. There is no try     

2. Hands on vhost-user: A warm welcome to DPDK   

3. vDPA hands on: The proof is in the pudding   

ovs的卸載分三種方式

1. vDPA for on-prem

virtual data plane acceleration. 

a virtio dataplane going directly from the NIC to the container while using a translation layer between the NICs control plane and the virtio control plane

2. Virtio full HW offloading (e.g. for Alibaba bare metal servers)

3. Mediator layers for public cloud

In the case of AWS since the ENA interface (see details in the AWS section) does not support virtio data plane/control plane, both planes need to pass through a translation layer.  

硬件設計  

vDPA的設計,硬件數據流向如下

SFP -> retimer(phy, line side) -> FPGA/ASIC/SOC -> PCI -> host  

1. SFP

可以選型QSFP28(100G) QSFP56(200G)

2. retimer, TI, Intel 都有相應的產品。

比如intel的C827。

retimer 主要功能是Serializer/Deserializer (SerDes), 實現物理層數據高速串行化的一個器件。主要功能包括一個時鍾數據恢復(CDR)協議,CDR沒有單獨的時鍾信號,而是把時鍾嵌入在數據中,即CDR接收器將相位鎖定在數據信號本身以獲取時鍾。其實CDR 獲取時鍾有多種方式,如基於鎖相環的時鍾恢復電路、基於過采樣技術的時鍾恢復電路等。

 

並行           串行(通常是差分的形式)              並行

3. FPGA, intel 和xilinx。

比如intel A10以上的FPGA。提供了很多基礎的IP core, 比如 S10。 

有各種參考設計

邏輯設計  

<How to Design SmartNICs Using FPGAs to Increase Server Compute Capacity> 這篇文章介紹了邏輯開發的各個模塊,但每個模塊的介紹並不詳細。

 

 

采用intel的FPGA,intel提供了各種IP core, 例如Avalon 

Intel Stratix 10 Avalon -MM硬IP PCIe 設計實例用戶指南

Intel Stratix 10 Avalon -MM接口 PCI Express 解決方案用戶指南 

使用戶把精力放在主要業務,ovs的硬件化即可。

采用xilinx的產品,也提供了一套開發環境(Versal)。

熟悉ovs的原理,進行相關的邏輯上設計。 intel的santos做過一個介紹,給出了一個ovs FPGA設計的框圖。

熟悉ovs的設計是非常重要的。請參考

櫻桃的smarnic設計

 A Typical Flow and HQoS Acc. Reference Design

HQoS Acceleration

► Capacity

 Policing
 Congestion Control
 Scheduling and Shaping

► Queuing    

 Flow match for Queue ID
 Queue ID in Metadata
 Thousands of Queue Number

► Configuration   

 Follow Rte_tm API
 Testpmd and Example APP 

微軟的smartnic

微軟有篇演講介紹《SmartNIC:Accelerating Azure’s Network with FPGAs on OCS servers》介紹他們在Azure雲上的使用場景。

微軟也有一片論文介紹了介紹了smartnic的設計, 包括FPGA流表的設計。

微軟的這個論文寫的很好,介紹了他們指定方案的前后過程。微軟很早是bing搜索(幾千個網絡節點集群)中使用了FPGA,但是沒有在數據中心作為NIC中使用,隨后他們做了大量的論證。 

他們提出了4種方案ASIC,SOC,FPGA,burn CPU等, 按8個指標維度進行對比。 

  1. 不耗費主機的CPU(Don’t burn host CPU cores)
  2. 保持VFP(微軟的可編程vSwitch)的SDN可編程性
  3. 實現SRIOV硬件的延遲,吞吐量和利用率
  4. 與時俱進,支持新的SDN工作負載和原語
  5. 向整個fleet推出新功能(Rollout new functionality to the entire fleet)
  6.  提供高的單連接性能
  7. 可以擴展到100GbE +
  8. 保持可維修性

作為第一條,因為CPU是有成本的:

物理核心(2個超線程)的價格為$ 0.10-0.11 / hr1,或在服務器的整個生命周期內最高潛在收入約為每年$ 900,以及$ 4500(在我們的數據中心中,服務器通常可以使用3到5年)。

最終選在了FPGA作為方案,並且回答了采用FPGA的一些質疑:

1. FPGA是不是比ASIC大?

2-3倍的大小。對於大量增加的可編程性和可配置性,是合理的。

其實FPGA中,占比最大的部分是硬邏輯,等同於ASIC的邏輯。 同樣ASIC中,也需要額外的邏輯來適應不同用戶的不同需求,也導致增大了面積。

2. FPGA是不是很貴

不能泄露供應商的價格。

但是有兩家供應商,而且微軟的規模可以攤銷不可回收的工程成本,硅的成本則由硅面積和產量決定。

由於FPGA的規則結構,其成品率通常很好。

最大的比例還是CPU,閃存和DRAM,量大。

3.  FPGA很難編程?

微軟的網絡團隊,都不在邏輯領域開發,對此也有質疑。

只有真正考慮有效流水線設計並對其進行布局,才能達到令人難以置信的性能。

所以專業的開發人員,但是任何時候,也不過5人參與項目。

開發團隊,基礎架構,仿真功能和工具的投資是必不可少的,但是其中大部分可以在不同團隊之間共享。

使用軟件開發方法(例如敏捷開發)而不是硬件(例如瀑布)模型。 FPGA的靈活性使我們能夠以比其他任何類型的硬件設計都更快的時間間隔進行編碼,部署,學習和修改。

4. FPGA可以超大規模部署嗎?

不容易,隨着時間推移,經驗積累,解決的很多問題。

5. 代碼會被vendor locked in嗎? 

主要是SystemVerilog寫的,就有vendor特有的細節,但是都可以移植。

smartnic 架構

 

 

 

第一代smarnic,smartnic和TOR之間有網線(圖中看,應該是光纖)鏈接,smartnic和host上的nic也是網線連接。 

第二代實現了SRIOV,取消了和host nic上的網線連接。

控制平面有hypervisor來實現, 數據平面有FPGA實現。

hypervisor有一個特殊的vPort, 對於異常flow,通常是第一個flow,會通過vPort進入VFP,VFP會創建流表,對於入包,直接forward給VM,對於出包,會重新送回smartnic.

VFP也會監控,並終止鏈接。FPGA如果發現TCP 包的SYN, RST or FIN 標志被設置了,也會把包復制一份發給vPort,然后VFP會跟蹤這個包的狀態, 並刪除劉表中的規則。

 

 Generic Flow Tables (GFT)

 

阿里的MOC設計   

這是阿里的論文, 具體的分析,后面會補充。

論文的第三章開始介紹設計。

設計要求 

首先設計要滿足一下要求

• Multi-tenancy (多租戶)

• Security (安全)
• Interoperability (互操作性)
• Performance (性能)
• Cost efficiency (成本效益)

系統概述

 

 

 bare metal 與KVM整個架構基本相同。

通過Bm-hypervisor來管理BM guest,同時提供了BM guest的virtio后端。

可以無縫的接入到現存的cloud基礎設施架構中。

bare metal與KVM架構有些區別

不需要虛擬化 CPU, memory, buses

為了更好的隔離后端virtio資源,一個Bm-hypervisor 對應一個BM guest。Bm-hypervisor在guest的外部,而vm-hypervisor在guest的下面。 

Bm-hypervisor更安全,通過virtio接口間接與BM guest交互,而VM-hypervisor通過虛擬組件和hypercall直接暴露給VM。

通過打開PCI的電源來給 計算主板上電啟動BM guest。

計算主板上電后,會啟動FirmWare(BIOS,可以看成一台PC),然后加載boot loader,加載內核。

boot loader和內核其實是存在remote storage上,通過virtio-blk接口訪問。

所以firmware做了加強,支持virtio來訪問網絡和存儲,以加載kernel。

系統架構  

 

 

每個baremetal sever是由base server和幾個計算主板(可以是E3,E5, i7, Atom或者AMD/ARM的CPU)組成。其實在股票交易中i7/i9單線程性能比Xeon好。

base server 是一個簡化的E5 server。每個計算主板就是一個PCI板卡插在base server上。包含的CPU,memory,總線和IO-bond.

IO-bond 通過FPGA實現(可以ASIC化),是base和計算主板的PCI總線接口(是不是像intel的VCA卡),可以認為是virtio后端設備的代理(或者橋接)。

負責前后端的配置和控制平面的轉發。而數據平面通過DMA引擎來傳輸。

IO-bond的可擴展性極高。可以些許修改就能支持其他新的VIRTIO設備。

IO-Bond  

最主要的設計。

IO-bond的前端 

通過FPGA的邏輯,模擬了PCI的接口(比如配置空間,BAR0, BAR1, PCIe Cap)。

前后端沒法共享物理內存(CXL/CCIX總線不行嗎?這個值得思考),數據層面的交互,IO-Bond沒法通過ring buffer來實現。

 

 

 增加了一個影子vring.

IO-bond的后端

 

用戶空間的Vhost-user通過PMD模式和物理NIC通信。

IO-BOND實現  

前端是硬件,后端是軟件。 

 

 

Bm-guest 與IO-BOND

通過寫virtio notification寄存器的notify IO-BOND  

IO-BOND通過MSI中斷通知RX數據的到來。

后端與IO-BOND

沒有中斷機制。

通過一個專門的線程 pull IO mailbox 和 影子 vring head/tail 寄存器

DMA在IO-BOND中,可以達到50GB。做數據拷貝。對於DMA來說,計算主板就是個設備。

-------------------------------------(軟件)

櫻桃軟件設計  

整個軟件棧如下:

Linux kernel 解決方案    

1. redhat propose mdev(v1/v2/v3/v4/v5/v6/v7 maillist), and it is denied. 

更詳細的請看介紹:

2. vhost vDPA bus

DPDK的實現  

更多DPDK請參考 《DPDK documentation》,包括vDPA Device Drivers 

FVL是一個智能網卡芯片,比如intel的xl710/810,這里可以忽略。

 我們來關心FPGA的部分:

► AFU PMDs provide data plane control path

 Binding FPGA Port to I40e PF
 Implement HQoS and Flow Acceleration
 Follow librte_ethdev API

qemu 使能 Vhost-user with OVS/DPDK as backend (軟硬件virtIO區別不大)

qemu和 Vhost-User通過fd通知共享內存。控制層面實現。vring的偏移都是針對這個內存的首地址。

cloud 使能smartnic  

k8s  vDPA實現   

(參考 Making high performance networking applications work on hybrid clouds):

系列文章介紹k8s相關的smartnic網絡

Breaking cloud native network performance barriers(solution overview)

Making high performance networking applications work on hybrid clouds (solution overview)

Virtio-networking: first series finale and plans for 2020(series recap) 

vDPA Deployment 

 

通過device plugin 實現資源的管理。 具體實現請參考 Breaking cloud native network performance barriers

通過CNI(intel 實現了一個 Multus-CNI a container network interface (CNI) plugin)實現網絡功能的管理。CIN SIG 定義了CRD標准 Kubernetes Network Custom Resource Definition De-facto Standard

Openstack 實現

Openstack 開發還在進行種,估計很快就出來了...

openstack很早之前,只知道smartnic的概念的時候, 就跟team的討論,ovs會以什么樣的方式暴露給用戶呢? 

當時認為有兩種方式:

1. PCI 設備透傳方式

我們會在cyborg中增加一個driver,用來discover和管理smartnic的virtio的nic

初步代碼如下,主要是獲取virtio PCI設備的topo來獲取整體資源情況:

  View Code

 

  

 cyborg中會有一個專門的smartnic driver, 將nic資源上報給數據庫,包括cyborg 和placement的數據庫, 在openstack中有一個資源管理的數據庫API(placement),用來做調度使用。

網絡管理單元,例如neutron可以創建一個PCI passthrough的port, 交給VM使用(VM需要想cyborg申請一個pci vf設備)。 

該流程還是很復雜的,需要綜合了解linux 內核,硬件,虛擬化,還有cloud編排等各種綜合知識。

此外,尤其動態燒寫本身特別復雜, 因為功能會動態改變,這會做大量的工作。 其實在網絡產品中,很多硬件都會動態改變功能,比如DDPAVF等(AVF更多詳見SDNLAB)。

2. vDPA方式

通過VM和HOST之間的共享內存,實現virtio 數據層面的加速。

詳細操作,見qemu wiki

這個主要的工作,就是把原來對ovs軟件支持的部分,改成對smartnic的ovs支持, 主要是neutron的工作。 

3. 其他功能

此外,ovs也可以提供其他的硬件卸載功能,比如tunnel的卸載,這個可以vDPA或者PCI passthrough組合工作,但是這兩個功能是正交的。

REF:

PCIE Address Translation Services   

Boosting the NFV datapath with RHEL OpenStack Platform    

對於非ovs的開發者,想快速了解OVS流表:

FPGA Pool from Miscrosoft   (UTK(University of Tennessee, Knoxville 田納西大學)的網站上一個PPT, 改PPT是來自 RIKEN R-CCS (日本首要的高性能計算研究中心,也是超級計算機Fugaku的所在地)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM