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