在高速網(wǎng)卡中實現(xiàn)可編程傳輸協(xié)議
隨著數(shù)據(jù)中心網(wǎng)絡需求的不斷提升,尤其是對數(shù)據(jù)速率和延遲的嚴格要求,網(wǎng)絡協(xié)議棧正逐漸從軟件轉向硬件實現(xiàn)。這一轉變旨在以低延遲和低CPU利用率實現(xiàn)100 Gbps甚至更高的數(shù)據(jù)速率。然而,傳統(tǒng)的網(wǎng)絡接口卡(NIC)中的網(wǎng)絡協(xié)議棧通常采用硬連線方式,這限制了傳輸協(xié)議的創(chuàng)新和靈活性。為了解決這一問題,本文提出了一種名為Tonic的可編程硬件架構,旨在高速網(wǎng)卡中實現(xiàn)靈活且高效的傳輸協(xié)議。
一、背景與挑戰(zhàn)
在數(shù)據(jù)中心網(wǎng)絡中,傳統(tǒng)的軟件網(wǎng)絡協(xié)議棧盡管一直在努力提高其性能和效率,但在100 Gbps以太網(wǎng)上,它們往往會消耗高達30-40%的CPU周期。為了降低CPU利用率和提高性能,多個供應商開發(fā)了完全在NIC上運行的硬件網(wǎng)絡協(xié)議棧。然而,這些NIC通常僅實現(xiàn)了兩種主要的傳輸協(xié)議(如RoCE和TCP),并且這些協(xié)議是硬連線的,只能由供應商進行修改。
這種硬連線方式限制了傳輸協(xié)議的創(chuàng)新和適應性。例如,盡管近年來提出了許多用于可靠傳輸和擁塞控制的新算法,但現(xiàn)有的硬件堆棧通常只支持一小部分這些算法。此外,當運營商需要修改數(shù)據(jù)傳輸算法以避免網(wǎng)絡中出現(xiàn)活鎖時,他們必須依賴NIC供應商進行更改,這增加了操作的復雜性和成本。
二、Tonic架構概述
為了克服這些挑戰(zhàn),我們設計并開發(fā)了Tonic,這是一種用于傳輸邏輯的靈活硬件架構。Tonic旨在高速網(wǎng)卡中實現(xiàn)可編程傳輸協(xié)議,同時滿足100 Gbps的數(shù)據(jù)速率要求。
Tonic的核心思想是識別跨不同傳輸協(xié)議的傳輸邏輯的通用模式,并基于這些模式創(chuàng)建一個高效的硬件“模板”。這個模板允許用戶使用簡單的API進行編程,而無需深入了解高速硬件編程的復雜性。
三、Tonic的設計與實現(xiàn)
Tonic的設計主要圍繞以下兩個方面:
可編程傳輸邏輯:
傳輸協(xié)議的實現(xiàn)涉及多種功能,如連接管理、數(shù)據(jù)緩沖區(qū)管理和數(shù)據(jù)傳輸。然而,其核心任務是決定傳輸哪些數(shù)據(jù)段(數(shù)據(jù)傳輸)和何時傳輸(擁塞控制),這些統(tǒng)稱為傳輸邏輯。Tonic通過提供一個可編程的傳輸邏輯架構,使用戶能夠修改這些核心功能,從而實現(xiàn)靈活的傳輸協(xié)議。
高效硬件模板:
盡管不同的傳輸協(xié)議在連接和數(shù)據(jù)緩沖區(qū)管理方面存在差異,但它們有幾種共同的模式。例如,不同的傳輸協(xié)議使用不同的算法來檢測丟失的數(shù)據(jù)包,但一旦數(shù)據(jù)包被宣布丟失,可靠傳輸協(xié)議就會將其重傳。Tonic利用這些通用模式創(chuàng)建了一個高效的硬件模板,該模板可以支持多種傳輸協(xié)議的傳輸邏輯。
四、代碼實現(xiàn)與實驗驗證
我們在Verilog中實現(xiàn)了Tonic原型,并在FPGA上進行了實驗驗證。實驗結果表明,Tonic能夠支持多種協(xié)議的傳輸邏輯,并滿足100 Gbps背靠背128字節(jié)數(shù)據(jù)包的時序要求。
以下是Tonic原型的一部分Verilog代碼示例:
verilog
module tonic(
input wire clk,
input wire rst,
// 輸入端口,用于接收來自傳輸層的數(shù)據(jù)和元數(shù)據(jù)
input wire [31:0] data_in,
input wire [15:0] meta_in,
// 輸出端口,用于將數(shù)據(jù)發(fā)送到下游DMA流水線
output wire [31:0] data_out,
output wire valid_out
);
// 內(nèi)部信號定義
wire [31:0] buffer[0:2047]; // 用于存儲未完成的數(shù)據(jù)段
wire [15:0] meta_buffer[0:2047]; // 用于存儲元數(shù)據(jù)
wire [9:0] stream_id; // 流標識符
wire [11:0] byte_count; // 未完成字節(jié)數(shù)
// 傳輸邏輯實現(xiàn)(示例)
// ...(此處省略了具體的傳輸邏輯實現(xiàn)代碼)
// 數(shù)據(jù)輸出邏輯
assign data_out = buffer[stream_id];
assign valid_out = (byte_count > 0) && (/* 其他條件 */);
// 其他邏輯(如連接管理、緩沖區(qū)管理等)
// ...(此處省略了其他邏輯的實現(xiàn)代碼)
endmodule
請注意,上述代碼僅為示例,并未包含完整的傳輸邏輯實現(xiàn)。在實際應用中,需要根據(jù)具體的傳輸協(xié)議和需求進行詳細的實現(xiàn)。
五、結論
Tonic作為一種用于高速網(wǎng)卡中可編程傳輸協(xié)議的靈活硬件架構,為傳輸協(xié)議的創(chuàng)新和靈活性提供了新的解決方案。通過識別跨不同傳輸協(xié)議的通用模式,并基于這些模式創(chuàng)建高效的硬件模板,Tonic能夠在滿足100 Gbps數(shù)據(jù)速率要求的同時,支持多種傳輸協(xié)議的傳輸邏輯。實驗結果表明,Tonic具有可行性和高效性,有望在未來的數(shù)據(jù)中心網(wǎng)絡中得到廣泛應用。