本發(fā)明大體上涉及計算機(jī)網(wǎng)絡(luò),并且具體地涉及用于TCP卸載的方法和系統(tǒng)。
發(fā)明背景
計算機(jī)網(wǎng)絡(luò)中的通信通常使用傳輸控制協(xié)議(TCP)承載。由TCP端點(diǎn)的中央處理單元(CPU)對TCP協(xié)議棧操作的處理導(dǎo)致相當(dāng)大的延遲以及CPU和內(nèi)存開銷。一種用于減少這種開銷的解決方案是使用遠(yuǎn)程直接內(nèi)存訪問(RDMA)。例如,RDMA是在2007年10月的Internet工程任務(wù)組(IETF)的征求意見文檔(RFC)5040中的標(biāo)題為“A Remote Direct Memory Access Protocol Specification”中指定,其通過引用并入本文。IETF還在2012年7月的標(biāo)題為“Shared Memory Communications over RDMA”的Internet草案中提出了經(jīng)由RDMA的共享內(nèi)存通信(SMC-R)協(xié)議,該協(xié)議向TCP端點(diǎn)提供RDMA通信,其通過引用并入本文。
發(fā)明概述
本文所描述的本發(fā)明的實施例提供方法,該方法包括在源服務(wù)器中生成將通過傳輸控制協(xié)議(TCP)連接被發(fā)送到目標(biāo)服務(wù)器的數(shù)據(jù)。使用遠(yuǎn)程直接內(nèi)存訪問(RDMA)來將數(shù)據(jù)從源服務(wù)器傳遞到卸載服務(wù)器,而繞過源服務(wù)器的本地TCP棧。根據(jù)TCP在卸載服務(wù)器中對數(shù)據(jù)進(jìn)行組合,并且組合的數(shù)據(jù)通過TCP連接被轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器。
在一些實施例中,目標(biāo)服務(wù)器不支持RDMA。在一些實施例中,方法包括在卸載服務(wù)器和源服務(wù)器的本地TCP棧之間對TCP連接的狀態(tài)進(jìn)行同步。在實施例中,在卸載服務(wù)器中組合數(shù)據(jù)包括以具有各自的序列號的TCP報文段對數(shù)據(jù)進(jìn)行格式化,以及同步TCP連接的狀態(tài)包括向源服務(wù)器的本地TCP棧報告序列號。
在實施例中,通過TCP連接轉(zhuǎn)發(fā)數(shù)據(jù)包括將失敗的TCP傳輸從卸載服務(wù)器重傳到目標(biāo)服務(wù)器。在實施例中,該方法包括在源服務(wù)器中按每個TCP連接決定是將數(shù)據(jù)的發(fā)送卸載到卸載服務(wù)器還是使用本地TCP棧來發(fā)送數(shù)據(jù)。在另一個實施例中,該方法包括使用本地TCP棧對從目標(biāo)服務(wù)器到源服務(wù)器的傳入流量進(jìn)行處理,同時繞過或穿越卸載服務(wù)器。
根據(jù)本發(fā)明的實施例,本發(fā)明另外提供包括源服務(wù)器和卸載服務(wù)器的系統(tǒng)。源服務(wù)器被配置為生成通過傳輸控制協(xié)議(TCP)連接要被發(fā)送到目標(biāo)服務(wù)器的數(shù)據(jù)并且使用遠(yuǎn)程直接內(nèi)存訪問(RDMA)通過網(wǎng)絡(luò)傳遞所述數(shù)據(jù),而繞過源服務(wù)器的本地TCP棧。卸載服務(wù)器被配置為根據(jù)TCP對數(shù)據(jù)進(jìn)行組合,并且通過TCP連接將組合的數(shù)據(jù)轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器。
根據(jù)本發(fā)明的實施例,本發(fā)明還提供方法,該方法包括在卸載服務(wù)器中使用遠(yuǎn)程直接內(nèi)存訪問(RDMA)接收已在源服務(wù)器中生成的、用于通過傳輸控制協(xié)議(TCP)連接發(fā)送給目標(biāo)服務(wù)器的數(shù)據(jù)。根據(jù)TCP在卸載服務(wù)器中對數(shù)據(jù)進(jìn)行組合,并且組合的數(shù)據(jù)通過TCP連接被轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器。
在一些實施例中,該方法包括在卸載服務(wù)器和源服務(wù)器的本地TCP棧之間對TCP連接的狀態(tài)進(jìn)行同步。在一些實施例中,該方法包括將傳入流量從目標(biāo)服務(wù)器轉(zhuǎn)發(fā)到源服務(wù)器,同時繞過或穿越卸載服務(wù)器。
根據(jù)本發(fā)明的實施例,本發(fā)明還提供包括第一網(wǎng)絡(luò)接口和第二網(wǎng)絡(luò)接口以及處理器的裝置。第一網(wǎng)絡(luò)接口被配置用于使用遠(yuǎn)程直接內(nèi)存訪問(RDMA)與源服務(wù)器進(jìn)行通信。第二網(wǎng)絡(luò)接口被配置用于使用傳輸控制協(xié)議(TCP)與目標(biāo)服務(wù)器進(jìn)行通信。處理器被配置為通過第一網(wǎng)絡(luò)接口,使用RDMA來接收已在源服務(wù)器中生成、用于通過TCP連接發(fā)送給目標(biāo)服務(wù)器的數(shù)據(jù),根據(jù)TCP組合數(shù)據(jù)并且使用第二網(wǎng)絡(luò)接口通過TCP連接將組合的數(shù)據(jù)轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器。
從結(jié)合附圖進(jìn)行的本發(fā)明的實施例的以下詳細(xì)描述,本發(fā)明將被更完全地理解,其中:
附圖簡述
圖1是根據(jù)本發(fā)明的實施例示意性圖示使用基于RDMA的TCP卸載的計算系統(tǒng)的框圖;以及
圖2是根據(jù)本發(fā)明的實施例示意性圖示用于經(jīng)由RDMA的TCP卸載的方法的流程圖。
實施例的詳細(xì)描述
概述
本文描述的本發(fā)明的實施例提供用于在數(shù)據(jù)中心和其他計算系統(tǒng)中卸載TCP處理的改進(jìn)的方法和系統(tǒng)。在一些實施例中,計算系統(tǒng)包括多個服務(wù)器,該多個服務(wù)器使用TCP與系統(tǒng)中的其他服務(wù)器或者與外部服務(wù)器進(jìn)行通信。該系統(tǒng)還包括用于從服務(wù)器卸載TCP連接處理的至少一個卸載服務(wù)器。雖然不是必須的,但是卸載服務(wù)器通常被定位在計算系統(tǒng)的邊緣,并且被配置為卸載預(yù)定到外部服務(wù)器的傳出TCP流量的處理。卸載服務(wù)器可以在例如,網(wǎng)絡(luò)交換機(jī)中或者在反向代理服務(wù)器中實現(xiàn)。
在實施例中,給定的服務(wù)器(被稱為源服務(wù)器)生成通過TCP連接要被發(fā)送給某個目標(biāo)服務(wù)器的數(shù)據(jù)。源服務(wù)器使用RDMA將數(shù)據(jù)傳遞到卸載服務(wù)器。卸載服務(wù)器建立與目標(biāo)服務(wù)器的TCP連接,將數(shù)據(jù)組合成TCP報文段,并且通過TCP連接將TCP報文段發(fā)送給目標(biāo)服務(wù)器。
卸載服務(wù)器通常管理各種TCP數(shù)據(jù)流機(jī)制,例如,亂序報文段到達(dá)的重傳和緩解,以及諸如連接建立和拆除的管理任務(wù)。因為使用RDMA將傳出數(shù)據(jù)從源服務(wù)器傳遞到卸載服務(wù)器,卸載源服務(wù)器的中央處理單元(CPU)的傳出TCP處理。
通常,源服務(wù)器運(yùn)行本地TCP棧,在向卸載服務(wù)器發(fā)送傳出數(shù)據(jù)時繞過該本地TCP棧。然而,卸載服務(wù)器和源服務(wù)器的本地TCP棧相互協(xié)調(diào)TCP連接狀態(tài)。例如,卸載服務(wù)器向源服務(wù)器通知TCP報文段的序列號,并且源服務(wù)器相應(yīng)地更新其本地TCP棧。
應(yīng)該注意到,在一些實施例中,RDMA通信僅限于源服務(wù)器和卸載服務(wù)器之間的內(nèi)部通信。卸載服務(wù)器和外部目標(biāo)服務(wù)器之間的通信常常通過不支持RDMA的網(wǎng)絡(luò)(例如,通過因特網(wǎng))執(zhí)行。因此,所公開的技術(shù)能夠通過RDMA執(zhí)行TCP卸載,甚至在目標(biāo)服務(wù)器根本不支持RDMA時。
本文所描述的方法和系統(tǒng)在非對稱的場景中是非常有效,在該非對稱的場景中,高TCP流量從計算系統(tǒng)流向外部服務(wù)器,而只有小流量流進(jìn)該系統(tǒng)。這類非對稱流量例如,在向外部服務(wù)器提供內(nèi)容的數(shù)據(jù)中心中是常見的。在這樣的情況下,傳出流量包括高帶寬內(nèi)容,而傳入流量主要由請求和確認(rèn)組成。然而,所公開的技術(shù)可適用于各種其他系統(tǒng)和用例。
系統(tǒng)描述
圖1是根據(jù)本發(fā)明的實施例示意性圖示使用基于RDMA的TCP卸載的計算系統(tǒng)20的框圖。系統(tǒng)20可以包括例如,數(shù)據(jù)中心、云計算系統(tǒng)、高性能計算(HPC)系統(tǒng)或任何其他合適的系統(tǒng)。
系統(tǒng)20包括多個服務(wù)器24。在本專利申請的上下文中和在權(quán)利要求中,術(shù)語“服務(wù)器”指的是任何合適類型的計算平臺或計算節(jié)點(diǎn)。系統(tǒng)20可以包括任何合適數(shù)量的相同類型或者不同類型的服務(wù)器24,或者甚至只有單個服務(wù)器。服務(wù)器24是通過通信網(wǎng)絡(luò)28(通常是局域網(wǎng)(LAN))連接。網(wǎng)絡(luò)28可以根據(jù)任何適當(dāng)?shù)木W(wǎng)絡(luò)協(xié)議操作。
每個服務(wù)器24包括中央處理單元(CPU)42。根據(jù)服務(wù)器的類型,CPU42可以包括多個處理核和/或多個集成電路(IC)。不管具體的服務(wù)器配置,服務(wù)器的處理電路總體上在本文中被認(rèn)為是服務(wù)器CPU。
每個服務(wù)器24還包括存儲器40(通常是易失性隨機(jī)存取存儲器(RAM))以及用于通過網(wǎng)絡(luò)28通信的能進(jìn)行RDMA的網(wǎng)絡(luò)接口卡(NIC)44。除其他任務(wù)外,NIC44用于使用下面描述的方法來卸載TCP處理。
每個服務(wù)器24還運(yùn)行修改的TCP棧52。服務(wù)器24通常保持各自的TCP棧實例用于每個雙向TCP連接。在一些實施例中,當(dāng)處理給定的VM48的虛擬化流量時,修改的TCP棧52在VM內(nèi)部運(yùn)行。當(dāng)處理服務(wù)器的流量時,在服務(wù)器的上下文中的VM外部運(yùn)行。
通常,每個服務(wù)器24運(yùn)行一個或多個客戶端(還被稱為工作負(fù)載)。在本示例中,客戶端包括虛擬機(jī)(VM)48??商鎿Q地,然而,客戶端可以包括例如,用戶應(yīng)用程序、操作系統(tǒng)進(jìn)程或容器、或者任何其它合適類型的客戶端或工作負(fù)載。為了清楚起見,下面的描述指的是VM,但是所公開的技術(shù)可以以相似的方式與任何其它合適類型的客戶端或工作負(fù)載一起使用。
系統(tǒng)20包括一個或多個卸載服務(wù)器56,該卸載服務(wù)器56從服務(wù)器24的CPU42中卸載TCP處理任務(wù)。在本示例中,卸載服務(wù)器56被定位在系統(tǒng)20的邊緣處,即,將系統(tǒng)20連接到諸如因特網(wǎng)的外部網(wǎng)絡(luò)32??商鎿Q地,然而,一個或多個卸載服務(wù)器56可以以任何其它合適的方式定位,不一定在系統(tǒng)20的邊緣。卸載服務(wù)器還可以例如,在網(wǎng)絡(luò)交換機(jī)中或在負(fù)載平衡服務(wù)器中(例如,反向代理服務(wù)器,其將到web服務(wù)器的傳入請求進(jìn)行負(fù)載平衡并且將該請求重定向到web服務(wù)器的集群)實現(xiàn)。
每個卸載服務(wù)器56包括至少一個能進(jìn)行RDMA的NIC60、至少一個卸載處理器64以及至少一個以太網(wǎng)NIC68。能進(jìn)行RDMA的NIC60用于使用RDMA來與服務(wù)器24進(jìn)行通信。卸載處理器64執(zhí)行本文描述的TCP卸載任務(wù)。以太網(wǎng)NIC68用于通過網(wǎng)絡(luò)32與外部服務(wù)器36進(jìn)行通信。外部服務(wù)器通常使用以太網(wǎng)NIC72通信。
在圖1中示出的系統(tǒng)和服務(wù)器配置是示例配置,僅僅為了概念上清晰起見而被選擇。在替換的實施例中,可使用任何其他合適的系統(tǒng)和/或服務(wù)器配置。例如,并不強(qiáng)制所有的服務(wù)器24一定包括能進(jìn)行RDMA的NIC和/或根據(jù)所公開的技術(shù)運(yùn)行修改的TCP棧。
系統(tǒng)20的各種元件,尤其是服務(wù)器24和卸載服務(wù)器56的元件,可以使用諸如在一個或多個專用集成電路(ASIC)或現(xiàn)場可編程門陣列(FPGA)中的硬件/固件來實施??商鎿Q地,一些系統(tǒng)或服務(wù)器元件(例如,CPU44和/或卸載處理器64)可以在軟件中或使用硬件/固件和軟件元件的組合來實施。
在一些實施例中,卸載服務(wù)器56被實現(xiàn)為網(wǎng)絡(luò)設(shè)備,該網(wǎng)絡(luò)設(shè)備傳送RDMA和以太網(wǎng)上行流量(從網(wǎng)絡(luò)32到系統(tǒng)20),并且傳送以太網(wǎng)下行流量(從系統(tǒng)20到網(wǎng)絡(luò)32)。這種網(wǎng)絡(luò)設(shè)備可以在任何合適的物理計算平臺上運(yùn)行。在一些實施例中,卸載服務(wù)器被實現(xiàn)為諸如路由器或防火墻的另一個網(wǎng)絡(luò)設(shè)備的部分。
在一些實施例中,CPU44和/或卸載處理器64包括在軟件中編程以執(zhí)行本文描述的功能的通用處理器。可經(jīng)由網(wǎng)絡(luò)以電子形式將軟件下載到處理器,例如,或者所述軟件可以可選地或附加地被提供和/或存儲在非暫時性有形介質(zhì)上,諸如磁存儲器、光學(xué)存儲器或電子存儲器。
使用RDMA將TCP處理卸載到卸載服務(wù)器
在一些實施例中,VM48生成通過TCP連接從系統(tǒng)20要被發(fā)送給外部服務(wù)器36的數(shù)據(jù)。例如,系統(tǒng)20可以包括向外部服務(wù)器提供請求的內(nèi)容的數(shù)據(jù)中心。卸載服務(wù)器56在服務(wù)器24和外部服務(wù)器36之間進(jìn)行協(xié)調(diào),并且從服務(wù)器24的CPU42中卸載傳出TCP流量的處理。
在典型的流程中,某個VM48生成經(jīng)由TCP連接要被發(fā)送給某個外部服務(wù)器36的數(shù)據(jù)。代替使用本地TCP棧52來生成傳出TCP流量,服務(wù)器24使用RDMA將由VM生成的數(shù)據(jù)傳遞到卸載服務(wù)器56。
因此,數(shù)據(jù)經(jīng)由RDMA連接76在能進(jìn)行RDMA的NIC44(在服務(wù)器24中)和能進(jìn)行RDMA的NIC60(在卸載服務(wù)器56中)之間進(jìn)行傳遞。通常,NIC44和60將數(shù)據(jù)直接從服務(wù)器24的存儲器40傳遞到卸載服務(wù)器56的存儲器,用于由卸載處理器64處理而沒有涉及或加載CPU42。
在卸載服務(wù)器56中,處理器60將數(shù)據(jù)組合成TCP流量,并且經(jīng)由NIC68將TCP流量通過TCP連接80發(fā)送到外部服務(wù)器36。通常,處理器64將數(shù)據(jù)組合成一個或多個TCP報文段,分配TCP報文段各自的序列號,并且通過TCP連接80發(fā)送TCP報文段。
通常,處理器60還處理TCP連接的各種TCP數(shù)據(jù)流任務(wù),諸如接收來自外部服務(wù)器36的確認(rèn),重傳在外部服務(wù)器處沒有正確接收的TCP報文段,以及亂序報文段到達(dá)的處理。另外,處理器60可以處理管理任務(wù),諸如TCP選項標(biāo)志、握手以及連接建立和拆除。因此,卸載處理器60有效地管理TCP連接80的狀態(tài)。
通常,卸載處理器60將TCP連接狀態(tài)與服務(wù)器24的本地TCP棧52進(jìn)行協(xié)調(diào)和同步,使得本地TCP棧52能正確地維護(hù)并且跟蹤連接狀態(tài)。例如,在一些實施例中,卸載處理器60利用分配給發(fā)送到外部服務(wù)器36的TCP報文段的序列號更新TCP棧52。
通常,包括繞過本地TCP棧的公開的卸載方案被應(yīng)用到從服務(wù)器24發(fā)送到外部服務(wù)器36的流量。在系統(tǒng)20內(nèi)部的服務(wù)器24之間交換的TCP流量可以在兩個方向中被卸載到RDMA,而沒有涉及卸載服務(wù)器56。從外部服務(wù)器36到服務(wù)器24的傳入TCP流量通常繞過或穿越卸載服務(wù)器56而無需處理,并且由接收的服務(wù)器24的本地TCP棧處理。
在一些實施例中,源服務(wù)器的CPU42可以決定每個TCP連接是按常規(guī)使用本地TCP棧來處理傳出流量還是卸載到卸載服務(wù)器56的處理。
圖2是根據(jù)本發(fā)明的實施例示意性圖示用于經(jīng)由RDMA的TCP卸載的方法的流程圖。在數(shù)據(jù)生成步驟100處,該方法開始于源服務(wù)器24生成預(yù)定到外部服務(wù)器36的數(shù)據(jù)。
在RDMA傳遞步驟104處,服務(wù)器24使用RDMA將數(shù)據(jù)傳遞到卸載服務(wù)器56。在狀態(tài)更新步驟108處,按照卸載服務(wù)器所報告的,服務(wù)器24利用卸載服務(wù)器56和外部服務(wù)器36之間的TCP連接的狀態(tài)來更新其本地TCP棧52。
在報文段組合步驟112處,卸載服務(wù)器56將從服務(wù)器24接收的數(shù)據(jù)組合成TCP報文段。在TCP傳輸步驟116處,卸載服務(wù)器通過TCP連接將TCP報文段發(fā)送到外部服務(wù)器36。在狀態(tài)維護(hù)步驟120處,卸載服務(wù)器維護(hù)TCP連接的狀態(tài)。維護(hù)可以包括例如,遞增報文段序列號,處理重傳,報文段重新排序以及其他TCP處理功能。卸載服務(wù)器還向源服務(wù)器的本地TCP棧通知TCP連接狀態(tài)中的任何更新。
雖然本文所描述的實施例主要指的是經(jīng)由RDMA的TCP卸載,但是所公開的技術(shù)并不限于這些特定的協(xié)議并且可以與其他合適的協(xié)議一起使用。例如,所公開的技術(shù)可以用于通過高速網(wǎng)絡(luò)(例如,外圍組件互連高速(PCIe))而不是RDMA卸載面向連接協(xié)議而不是TCP。
因此,將理解上述實施例是通過示例引用的,并且本發(fā)明并不限于上文已具體示出和描述的內(nèi)容。相反地,本發(fā)明的范圍包括上文描述的各種特征的組合和子組合,以及本領(lǐng)域的技術(shù)人員在閱讀上述描述后想到的和在現(xiàn)有技術(shù)中沒有公開的其變型和修改。通過引用并入在本專利申請中的文檔將被認(rèn)為是本申請的組成部分,除了在某種程度上,任何術(shù)語是以與在本說明書中顯式或隱式做出的定義沖突的方式在這些并入的文檔定義,只有本說明書中的定義應(yīng)該被考慮。