揭秘FPGA:為什么比 GPU 的延遲低這么多?

▲本地和遠程的 FPGA 均可以降低搜索延遲,遠程 FPGA 的通信延遲相比搜索延遲可忽略。
FPGA 在 Bing 的部署取得了成功,Catapult 項目繼續(xù)在公司內擴張。
微軟內部擁有最多服務器的,就是云計算 Azure 部門了。
Azure 部門急需解決的問題是網絡和存儲虛擬化帶來的開銷。Azure 把虛擬機賣給客戶,需要給虛擬機的網絡提供防火墻、負載均衡、隧道、NAT 等網絡功能。由于云存儲的物理存儲跟計算節(jié)點是分離的,需要把數(shù)據(jù)從存儲節(jié)點通過網絡搬運過來,還要進行壓縮和加密。
在 1 Gbps 網絡和機械硬盤的時代,網絡和存儲虛擬化的 CPU 開銷不值一提。隨著網絡和存儲速度越來越快,網絡上了 40 Gbps,一塊 SSD 的吞吐量也能到 1 GB/s,CPU 漸漸變得力不從心了。
例如 Hyper-V 虛擬交換機只能處理 25 Gbps 左右的流量,不能達到 40 Gbps 線速,當數(shù)據(jù)包較小時性能更差;AES-256 加密和 SHA-1 簽名,每個 CPU 核只能處理 100 MB/s,只是一塊 SSD 吞吐量的十分之一。

▲網絡隧道協(xié)議、防火墻處理 40 Gbps 需要的 CPU 核數(shù)。
為了加速網絡功能和存儲虛擬化,微軟把 FPGA 部署在網卡和交換機之間。
如下圖所示,每個 FPGA 有一個 4 GB DDR3-1333 DRAM,通過兩個 PCIe Gen3 x8 接口連接到一個 CPU socket(物理上是 PCIe Gen3 x16 接口,因為 FPGA 沒有 x16 的硬核,邏輯上當成兩個 x8 的用)。物理網卡(NIC)就是普通的 40 Gbps 網卡,僅用于宿主機與網絡之間的通信。

▲Azure 服務器部署 FPGA 的架構。
FPGA(SmartNIC)對每個虛擬機虛擬出一塊網卡,虛擬機通過 SR-IOV 直接訪問這塊虛擬網卡。原本在虛擬交換機里面的數(shù)據(jù)平面功能被移到了 FPGA 里面,虛擬機收發(fā)網絡數(shù)據(jù)包均不需要 CPU 參與,也不需要經過物理網卡(NIC)。這樣不僅節(jié)約了可用于出售的 CPU 資源,還提高了虛擬機的網絡性能(25 Gbps),把同數(shù)據(jù)中心虛擬機之間的網絡延遲降低了 10 倍。

▲網絡虛擬化的加速架構。來源:[6]
這就是微軟部署 FPGA 的第三代架構,也是目前「每臺服務器一塊 FPGA」大規(guī)模部署所采用的架構。
FPGA 復用主機網絡的初心是加速網絡和存儲,更深遠的影響則是把 FPGA 之間的網絡連接擴展到了整個數(shù)據(jù)中心的規(guī)模,做成真正 cloud-scale 的「超級計算機」。
第二代架構里面,F(xiàn)PGA 之間的網絡連接局限于同一個機架以內,F(xiàn)PGA 之間專網互聯(lián)的方式很難擴大規(guī)模,通過 CPU 來轉發(fā)則開銷太高。
第三代架構中,F(xiàn)PGA 之間通過 LTL (Lightweight Transport Layer) 通信。同一機架內延遲在 3 微秒以內;8 微秒以內可達 1000 塊 FPGA;20 微秒可達同一數(shù)據(jù)中心的所有 FPGA。第二代架構盡管 8 臺機器以內的延遲更低,但只能通過網絡訪問 48 塊 FPGA。為了支持大范圍的 FPGA 間通信,第三代架構中的 LTL 還支持 PFC 流控協(xié)議和 DCQCN 擁塞控制協(xié)議。

▲縱軸:LTL 的延遲,橫軸:可達的 FPGA 數(shù)量。來源:[4]

▲FPGA 內的邏輯模塊關系,其中每個 Role 是用戶邏輯(如 DNN 加速、網絡功能加速、加密),外面的部分負責各個 Role 之間的通信及 Role 與外設之間的通信。來源:[4]
評論