網(wǎng)絡(luò)接口加速器可能是助力也可能是阻力
從校驗和驗證(checksum validation)到TCP及更高層協(xié)議的卸載,網(wǎng)絡(luò)接口架構(gòu)包含的加速功能日益增多。這些加速功能有部分可以利用軟件來有效執(zhí)行。在某些環(huán)境中,復(fù)雜加速功能的使用實際上可能降低性能,損害系統(tǒng)完整性和安全性。 正如過去30年中以太網(wǎng)標準取得了眾多進步一樣,這種主網(wǎng)絡(luò)接口架構(gòu)也不斷有重大創(chuàng)新,其中許多旨在使操作系統(tǒng)和應(yīng)用軟件能夠以更高的鏈路速度更有效地處理數(shù)據(jù)。在網(wǎng)絡(luò)鏈路速度提高給服務(wù)器I/O性能帶來挑戰(zhàn)的同時,新的加速功能出現(xiàn),這并非巧合。某些加速功能經(jīng)受住了時間的考驗,另一些因CPU和內(nèi)核芯片組性能增益的穩(wěn)定進步而漸被淘汰。研究如何在一個系統(tǒng)環(huán)境中運用某一特定加速功能,將有利于我們了解該功能的長期效用。 普通的網(wǎng)絡(luò)接口不執(zhí)行鏈路層協(xié)議以上的數(shù)據(jù)包處理。例如,以太網(wǎng)接口可以處理以太網(wǎng)幀校驗和(FCS),執(zhí)行第二層多點傳送濾波。一個能夠基于包含在單幀的高層協(xié)議中的本地狀態(tài)提供最優(yōu)化的適配器被定義為無狀態(tài)卸載適配器。能夠基于更高級協(xié)議被執(zhí)行的無狀態(tài)卸載包括數(shù)據(jù)包包頭分離和TCP/IP校驗和計算及驗證。 即使檢驗和這樣的簡單卸載,也可能在系統(tǒng)中引入運算沖突。例如,未經(jīng)以太網(wǎng)FCS檢測的網(wǎng)絡(luò)故障根源的研究發(fā)現(xiàn)了硬件(如網(wǎng)絡(luò)接口適配器內(nèi)部的直接存儲器存取(DMA)控制器)中的系統(tǒng)性錯誤。在硬件中,當在硬件中驗證檢驗和時,應(yīng)用沒有被保護免受這些故障的損害。鑒于這個原因,在引入復(fù)雜的硬件或進行故障檢修時,應(yīng)該謹慎地中止加速功能,以避免它們成為故障源頭。不過,隨著卸載技術(shù)和網(wǎng)絡(luò)適配器日益復(fù)雜,這可能不再是一個選擇。 例如,遠程DMA(RDMA)協(xié)議激活網(wǎng)絡(luò)接口,直接向應(yīng)用緩沖器傳送數(shù)據(jù)。因此,整個軟件堆棧需要作大量改變。在這種模型中,檢驗和必然在網(wǎng)絡(luò)適配器中產(chǎn)生并驗證。關(guān)于為了解決可靠性問題而在整個數(shù)據(jù)中心禁用(Infiniband)RDMA這樣的事件報告就不足為奇了。 關(guān)于卸載技術(shù)前景需考慮的另一個權(quán)衡問題是,加速由硬件還是軟件實現(xiàn)最好。TCP段卸載(TSO) 即是一個好例子。TSO是無狀態(tài)卸載,其中TCP層經(jīng)堆棧把一個非常大的段(比連接的最大的段尺寸還要大)傳送到網(wǎng)絡(luò)接口,再由網(wǎng)絡(luò)接口把它分割為大量數(shù)據(jù)包。 這種方法降低了網(wǎng)絡(luò)堆棧內(nèi)每個數(shù)據(jù)包的軟件開銷,從而提高了性能。這種分割工作通常由網(wǎng)絡(luò)適配器執(zhí)行,并需要復(fù)雜的硅技術(shù)或嵌入式處理器來為每個數(shù)據(jù)包產(chǎn)生包頭。或者,也可以利用軟件在堆棧最低層執(zhí)行,如同在Linux普通段卸載(GSO)中所做的那樣。同期測量結(jié)果顯示,除了無硅成本之外,其獲得的性能與采用硬件實現(xiàn)的幾無差別。