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