背景
目前,所有號稱性能損耗小的VM技術,實際上都會有5-15%甚至更高的損耗。作為替代方案,如Gartner在2015年發布的報告「Market Trends: The Rise of Bare-Metal Cloud and Containers」預測的一樣,在虛擬化蓬勃發展了多年以後,裸金屬(Bare Metal)產品已幾乎成為雲平台的標配。目前主流的雲平台,國外的比如AWS、Azure, 國內的比如阿里、騰訊、華為等,都有裸金屬業務。
所有的裸金屬服務中,AWS和阿里的比較相似,均採用了專有的硬件和配套的Hypervisor,GuestOS依然運行在Hypervisor上,但是GuestOS可以直接訪問存儲和網絡等硬件;騰訊和華為則是不使用Hypervisor的BMS系統,比如騰訊裸金屬2.0就是將雲核心能力在智能網卡架構體系下進行了升級和進化。
在網易內部,大部分業務都已經跑在雲上,背後是雲主機和容器的支撐。但是目前仍然有部分業務不適合直接運行在虛擬化層上,比如高性能的計算集群,對性能要求更高的數據庫主機等等。我們一方面希望物理服務器能做到像雲主機一樣的高效生命周期管理, 同時也希望服務器能提供更高的網絡和計算性能。因此,裸金屬服務的研發在網易數帆同樣成為剛需。我們希望裸金屬服務產品能夠實現:
第一,完全兼容現有的雲主機平台和VPC網絡。
第二,極致的網絡和計算性能。
第三,自動化運維管理,分鐘級別的交付。
方案選擇管控面
OpenStack 作為業內成熟、實用驗證、廣泛部署的雲基礎設施公共服務軟件組件集,為虛擬機、裸金屬和容器提供實施簡單、可大規模擴展、標準統一的雲計算管理平台。Ironic 是 OpenStack 下用於提供裸金屬服務器管理的一個子項目。它可以獨立部署,用於裸金屬服務器的部署與管理;也可以作為 OpenStack 的一部分來使用,與 OpenStack Nova、Keystone、Glance 等服務集成,使得裸金屬服務器實例無縫接入現有的雲主機平台,提供與雲主機服務一致的使用體驗。這裡的Ironic的地位就相當於libvirt在傳統虛擬化環境中扮演的角色。與libvirt對應的是,Ironic結合多個廠商的物理機驅動提供出來一套hypervisor API來操作物理機。
基於現有業務自身的特點以及當前私有雲環境的控制面管理方案,我們選擇了在開源基礎上進行二次開發,使用 Ironic 與 OpenStack 相關服務集成的方式作為裸金屬服務產品的管控面。
數據面
數據面的選擇比較多, 比如我們的第一代裸金屬服務器方案選擇了「物理機服務器+普通網卡」的形式,裸機側和VPC側虛擬機通過專線的形式對接。這種方案的優點在同時提供了物理機的性能和虛擬機的可擴展性和靈活性;缺點在於運維和部署複雜,成本太高,同時接入VPC網絡有很多規模上的限制,沒法提供更高的網絡性能。
最近兩年風靡業界的智能網卡,則是另外一種方案。隨着網絡、存儲等IO的處理帶寬增加,底層基礎設施Workload所占的CPU資源越來越多,留給用戶應用的CPU資源越來越少,而DPU則比智能網卡更進一步,除了把存儲、網絡等功能做硬件卸載加速外,還能把基礎設施層的所有任務都從Host CPU轉移到DPU或IPU中,把CPU完整的交給業務應用,達到了業務和管理分離。
目前市場上可供選擇的智能網卡廠商主要以 NVIDIA(英偉達), 英特爾(Intel), 博通(Broadcom)為主,在我們2020年初開始做智能網卡方案調研時,BlueField DPU是為數不多可供選擇的智能網卡之一。其中的BlueField-1 基於ConnectX5 設計,支持ASAP2加速,可以把網絡相關Workload卸載到eSwitch。BlueField-2則基於CX6-DX, 在一代網卡的基礎上做了功能和性能的增強 ,同時提供了1Gbps的帶外管理接口,提升了網卡本身的運維管理功能。
關鍵技術
Smart NIC都擁有一套自己獨立的網卡系統,如下圖所示,我們可以將SDN Agent,OVS等都跑在這套網卡系統上,並通過Agent將網絡規則offload到網卡。
BlueField Smart NIC 提供了兩種網卡模式:
Separated Host 模式。在這種模式下,主機服務器和 NVIDIA BlueField DPU 可以作為 multi-host 共享內置網卡。在這個模式下並未啟用 NVIDIA BlueField DPU 的卸載功能。(後面的文章描述中統稱為普通網卡模式)
Embedded ( ECPF – Embedded CPU Physical Function )模式。在這種模式下,主機服務器的網絡工作負載卸載到了 NVIDIA BlueField DPU,並啟用了 ASAP2 ( Accelerated Switch and Packet Processing )加速功能。(後面的文章描述中統稱為智能網卡模式)
這兩種模式之間的切換可以通過如下命令來進行:
# 切換到智能網卡模式(bluefield2 要把設備名稱換成mt41686)mlxconfig -y -d /dev/mst/mt41682_pciconf0 s INTERNAL_CPU_MODEL=1 # 切換到普通網卡模式mlxconfig -d -y /dev/mst/mt41682_pciconf0 s HIDE_PORT2_PF=0
我們的目標是納管並統一調度物理服務器,並將其接入現有的VPC網絡,那麼在Openstack Ironic + BlueFiled的裸金屬方案里,我們需要解決幾個關鍵問題:
如何將智能網卡裸機節點接入現有的VPC網絡?
如何達到最優的網絡性能?
DPU有自己的Subsystem,一般需要按照需求對其進行改造定製,子系統的安裝時機與安裝方法?
VPC網絡接入
在網易雲計算的VPC架構中,主要存在着以下幾種網絡:
業務網絡。該網絡用於承載租戶的業務流量。
管理網絡。該網絡用於承載管理流量和控制流量。
與Openstack Neutron網絡不同,我們的VPC架構是自研的,不存在二層的流量,無論是同子網內部還是跨子網之間,或者是訪問外網的所有流量均走三層, 節點之間的流量通過VXLAN隧道,虛擬機的ARP和DHCP由本地計算節點代答, 所以流量模型非常簡單。前文提到,BlueField有兩種工作模式,只有在智能網卡模式下才能達到最好的網絡性能,而為了最大限度地使用網卡帶寬,我們也需要將BlueField上的兩個上聯口做bond。最後我們得到下面的網絡拓撲:
智能網卡模式下HOST上的每一個網口會對應DPU上的一個representor口,但是我們看到只畫了HOST上的eth0與其representor口的互聯。這並不是畫圖的時候偷懶了,而是bond模式下無論將pf0hpf/eth0或者是pf1hpf/eth1接入都能達到一樣的效果,此時HOST上實際能使用的最大帶寬依舊是p0+p1兩個網口的總和。
另外我們還能通過下面的命令讓HOST上只顯示一個網卡:
mlxconfig -d /dev/mst/mt41682_pciconf0 s HIDE_PORT2_PF=1 #在HOST上只顯示一個網口
在實際測試過程中發現, 如果在HOST上修改網卡MTU等特性,實際會影響DPU上的p0和p1兩個口的屬性,所以我們一般還需要通過如下命令來禁用HOST上網卡的部分權限:
mlxprivhost -d /dev/mst/mt41682_pciconf0 r --disable_port_owner #在HOST上禁用網卡的一些權限DPU系統安裝
智能網卡出廠的時候,一般會有個默認的系統, 但是大部分客戶都有一些自己特定的需求,需要對其進行定製,比如換成Debian系統,比如安裝java虛擬環境package等等。另外,就算是默認系統能符合要求,我們也需要在DPU的ARM Subsystem上做一些網絡配置,安裝特定的SDN Agent才能讓網卡工作。
BlueField DPU用戶手冊里提供了兩種安裝ARM 子系統的方式,一種是PXE方式,需要在HOST設備搭建一個pxe Server;另外一種是nonePXE方式,通過在HOST上加載BlueField的rshim驅動,通過rshim pcie的方式來進行安裝,命令行如下:
cat installcentosXXX.bfb > /dev/rshim0/boot
我們這裡採用的是nonePXE方式。但此時還有兩個問題:
問題1:裸機節點上的HOST系統是屬於業務方的, ARM子系統安裝的時候,HOST系統還未安裝,怎麼才能用rshim pcie的方式給ARM裝系統?
問題2:裸機節點上除了DPU網卡外,不額外加其他的網卡,HOST系統安裝時網絡如何配置?
對於第一個問題,Ironic給我們提供了一種思路。目前,在OpenStack體系結構中,Ironic還是通過Nova來調用的,模擬Nova的一個虛擬化驅動(其它的虛擬化驅動還有KVM、VMware、Xen等),實現基於Ironic的虛擬化驅動。對Nova而言,通過Ironic部署物理機,和部署虛擬機的調用流程是一樣的,都是通過Nova的接口來執行創建實例,只是底層的nova-scheduler和nova-compute驅動不一樣,虛擬機底層驅動採用的是虛擬化技術,而物理機採用的是PXE和IPMI技術。因此,我們可以採用安裝裸機HOST系統類似的方式,先通過PXE 安裝ramdisk小系統(需要安裝rshim驅動和BlueField的ofed驅動),然後通過網絡獲取DPU ARM Subsystem鏡像文件,此時就可以通過nonePXE的方式來實現DPU系統安裝了。
在裸機部署的整個生命周期中,大致分成3個階段:
register裸機節點,節點UUID信息會被用於後續的裸機生命周期管理,註冊時可以選擇裸機驅動方式。
inspect獲得裸機節點的硬件信息(包括CPU,內存,硬盤,網卡等)以及上聯的交換機信息,其中的硬件信息會被用作 Nova Scheduler 的調度因子。
deploy安裝裸機系統。即用戶根據業務需要指定鏡像、網絡等信息來部署裸金屬實例。由雲平台自動化完成資源調度、操作系統安裝、網絡配置等工作。
物理機系統安裝的時間一般都比較長,至少都是分鐘級別的,所以為了提升用戶體驗,給DPU安裝系統就需要放在deploy階段之前,我們這裡選擇直接放在inspect階段,大致流程如下圖所示:
除了給網卡安裝系統外,其他的流程與社區的Ironic inspect基本一致。ironic-inspector 發起請求,ironic conductor收到請求後通過IPMI 給裸機節點設置PXE啟動並開機,接下來就是DHCP 獲取IP並從HTTP Server獲取帶IPA(Ironic Python Agent)的ramdisk鏡像。通過ramdisk image裡帶的內核參數,從HTTP Server下載指定的網卡鏡像,安裝完畢後通知Ironic inspect結束整個流程。
DPU上的網絡配置,SDN Agent package安裝都可以在這個階段完成。DPU系統安裝完成後,在HOST上配置SNAT,就可以讓DPU ARM子系統通過HOST網絡來訪問外網,得到想要的package和相應的配置。
對於問題2,如果只是想給HOST安裝一個系統,那麼有了前面提到的ramdisk小系統,還是有比較簡單的方式,比如download host鏡像後,直接dd到根磁盤上。但不管是給DPU安裝系統,還是給HOST安裝系統,都繞不開一個核心的問題,PXE 方式需要網絡支持。什麼樣的網絡部署模式才能既滿足業務的高性能網絡要求,又能滿足裝機要求?
網絡部署架構
使用iPXE方式來安裝系統,網絡中會有如下幾種報文:
DHCP報文,用於給網卡獲得IP地址;
TFTP報文,用於獲得ramdisk小系統的鏡像;
HTTP報文,用於與管控通信,以及獲得host系統的鏡像等等;
前面提到,只有處於智能網卡模式的DPU才能獲得最優的網絡性能,因此裝機時有幾種方案可供考慮:
系統裝機時與用戶的正常業務流量都使用智能網卡模式,並且都使用vxlan overlay隧道;
系統裝機時與用戶的正常業務流量都使用智能網卡模式, 但是要區分裝機網絡流量和用戶的正常業務流量。
裝機網絡流量走underlay,用戶業務流量走vxlan overlay;
系統裝機時流量走普通網卡模式,用戶的正常業務流量走智能網卡模式。
PXE方式安裝系統時,報文都是普通的DHCP,UDP和TCP報文,所以要區分流量是不是屬於用戶的業務報文,這個不太現實;如果不做報文區分,PXE裝系統時和業務流量使用同一套流表,那就需要在overlay環境中部署一套PXE專屬的服務(DHCP server,http server等),基於網易雲計算現有的部署架構和實現方案,這個實現起來難度太大;如果PXE裝機流量使用一套流表, 而用戶業務流量使用另一套流表,實際驗證下來發現在智能網卡模式下給DPU安裝ARM Subsystem時,網絡會斷開。
BlueField DPU網卡在出廠時,默認是普通網卡模式。因此,我們最後選用了方案三,裝機時與用戶正常使用時使用不同的網卡模式,只有在HOST 系統deploy成功開啟業務流量時,才使用智能網卡模式,其他情況下都使用普通網卡模式。
如上圖所示,處於普通網卡模式的HOST,DPU上不會存在representor口。將兩個網口都接入TOR交換機,交換機上做bond,HOST上不做bond,但需要交換機上開啟LACP edge port功能,此時HOST上的任意一個網口都能通過DHCP獲取到IP地址。
這種方案下,智能網卡裸機節點部署就存在3種網絡:
業務網絡。該網絡的用途在於將裸機節點接入VPC,承載租戶的業務報文。
管理網絡。該網絡的用途在於管理裸機節點,承載管理流量和控制流量。
部署網絡。用於在inspect和deploy過程中與控制節點進行通信,比如從HTTP Server下載鏡像。
如上圖所示,業務網絡是overlay報文,用VXLAN來進行承載;部署網絡和管理網絡是underlay報文, 這3種網絡處於不同的VLAN內。裝機網絡用access接入,這樣在使用PXE裝機的時候就可以不用去配置VLAN,直接從與部署網絡直連的DHCP Server為裸機節點獲取到IP,並通過該IP與管控節點,HTTP Server等進行通信;管理網絡和業務網絡用trunk接入,在DPU ARM Subsystem上分別配置不同的vlan子接口。
這種方案下,我們無需再去通過netconf更改交換機配置,只需要在機器上架時將與裸機直連的TOR交換機配置為trunk allow (部署網絡VLAN,業務網絡VLAN, 管理網絡VLAN), 並配置trunk pvid為部署網絡vlan即可。
總結
使用NVDIA BlueField1 25Gbps雙口網卡(實際接10G交換機),用iperf2來簡單測試兩台裸機節點間的帶寬和PPS,帶寬18.3Gbps,pps 1100萬,同樣的測試方法用於82599網卡的物理服務器上測試差不多是600萬的PPS。由此可見,在使用DPU將數據報文offload後,性能上確實還是提升了不少。當然,在測試過程中也發現了一些問題,比如TCP短連接的性能問題,offload之後的報文無法直接通過tcdump來抓包,DPU子系統安裝時間過長等等,都需要後續做進一步的優化。
總體來說,裸金屬產品內嵌到自己的產品體系,形成閉環,和已有的產品打通,兼容已有的API只是第一步;由於DPU的發展還處在初期階段,而且DPU網卡的價格相比於普通網卡售價偏高很多,因此若能讓產品功能更穩定,性能更強大,運維更容易,不斷滿足客戶越來越嚴苛的要求,同時還能形成成本上的優勢,則DPU與裸金屬服務器的發展一定會大放異彩。
本文作者:網易數帆網絡技術團隊