專(zhuān)利名稱:用于傳輸卸載引擎的重發(fā)系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明是關(guān)于用于傳輸卸載引擎,更特別的,是關(guān)于利用卸載引擎處理重發(fā)請(qǐng)求。
背景技術(shù):
傳輸卸載引擎(TOE)包含為優(yōu)化處理能力和降低處理器的利用的目的而在高速系統(tǒng)中得到普及的技術(shù)。TOE組件經(jīng)常被整合在各種印刷電路板中的一種,所述印刷電路板例如網(wǎng)卡(NIC)、主機(jī)總線適配器(HBA)、主板或任何其它希望的卸載設(shè)備(offloadingcontext)。
近年來(lái),系統(tǒng)通訊速度的增長(zhǎng)遠(yuǎn)高于處理器速度的增長(zhǎng),這已經(jīng)產(chǎn)生了一個(gè)輸入/輸出(I/O)瓶頸。處理器主要被設(shè)計(jì)用于計(jì)算,而不是用于I/O;因而典型地跟不上遍及網(wǎng)絡(luò)的數(shù)據(jù)流。因而,數(shù)據(jù)流的處理速度小于網(wǎng)絡(luò)速度。TOE技術(shù)通過(guò)從處理器和/或I/O子系統(tǒng)除去負(fù)荷(例如卸載)解決了這個(gè)問(wèn)題。
現(xiàn)有技術(shù)的圖1顯示了一個(gè)TOE的典型的操作100。如現(xiàn)有技術(shù)的圖1所示,一個(gè)本地處理器(任何形式)首先向TOE發(fā)送一個(gè)傳輸數(shù)據(jù)的指令,以根據(jù)傳輸控制協(xié)議(TCP)連接,從具有TOE的處理器向網(wǎng)絡(luò)上的一個(gè)遠(yuǎn)端處理器傳輸數(shù)據(jù),見(jiàn)操作102。
接著,在操作104,TOE獲得該數(shù)據(jù),并將其分成多個(gè)分段,并向每一個(gè)數(shù)據(jù)段加上以太網(wǎng)、TCP、和網(wǎng)絡(luò)協(xié)議(IP)標(biāo)頭,以生成一個(gè)對(duì)應(yīng)于每一個(gè)數(shù)據(jù)段的TCP/IP信息包。此后,TOE將得到的信息包發(fā)送到網(wǎng)絡(luò),如操作106所示。
遠(yuǎn)端處理器接收并確認(rèn)該信息包后,遠(yuǎn)端處理器向本地處理器發(fā)回確認(rèn)(ACK),以指示有多少數(shù)據(jù)已被成功接收。一旦接收一條用于所有已發(fā)送數(shù)據(jù)的ACK(見(jiàn)判定108),則TOE發(fā)送一條完成指令到本地處理器,以指示發(fā)送指令已通過(guò)TOE的傳輸功能被完成,見(jiàn)操作110。然后額外數(shù)據(jù)可以被發(fā)送,如操作112所示。
如果TOE在相應(yīng)的信息包發(fā)出后的一個(gè)預(yù)定的時(shí)間沒(méi)有收到ACK,這指示了一個(gè)出錯(cuò)的情況,TCP數(shù)據(jù)被從TOE的存儲(chǔ)器重新取出,見(jiàn)操作114。然后在操作116,TOE可以重發(fā)部分或全部未被確認(rèn)的信息包。
因此,當(dāng)通過(guò)一個(gè)信息包轉(zhuǎn)換的網(wǎng)絡(luò)傳輸數(shù)據(jù)時(shí),數(shù)據(jù)可能丟失,且這些數(shù)據(jù)必須被重發(fā)。因?yàn)檫@個(gè)原因,TOE存儲(chǔ)所有未被確認(rèn)的數(shù)據(jù)。但是,使用一個(gè)10Gbps的連接和一個(gè)可能的200ms的來(lái)回程延遲的廣域網(wǎng),這可能意味著大到10Gbps×200ms,或者說(shuō)2千兆的信息必須被存儲(chǔ)。不幸的是,這么大量的數(shù)據(jù)很難以成本節(jié)約的方式存儲(chǔ)在一個(gè)集成的TOE上,因?yàn)樵赥OE上的集成電路存儲(chǔ)器可能是非常昂貴的。
因而需要有一種經(jīng)濟(jì)有效的技術(shù)用于實(shí)現(xiàn)網(wǎng)絡(luò)重發(fā)。
發(fā)明內(nèi)容
本發(fā)明提供了一種用于在網(wǎng)絡(luò)上實(shí)現(xiàn)數(shù)據(jù)重發(fā)的系統(tǒng)和方法,包括一個(gè)與系統(tǒng)存儲(chǔ)器和一個(gè)網(wǎng)絡(luò)通信連接的卸載引擎。該卸載引擎用于管理網(wǎng)絡(luò)中被發(fā)送的數(shù)據(jù)的重發(fā)。
為了實(shí)現(xiàn)這一目的,該卸載引擎確定那些需要重發(fā)的數(shù)據(jù),找回存儲(chǔ)在系統(tǒng)存儲(chǔ)器中的那些需要重發(fā)的數(shù)據(jù),并發(fā)送這些找回的數(shù)據(jù)。通過(guò)以這樣一種方式利用系統(tǒng)存儲(chǔ)器,本發(fā)明提供了一種用于完成網(wǎng)絡(luò)重發(fā)的經(jīng)濟(jì)有效的技術(shù)。
在一個(gè)實(shí)施例中,該卸載引擎可以發(fā)送一個(gè)狀態(tài)到一個(gè)處理器,以啟動(dòng)需要重發(fā)的數(shù)據(jù)的找回。優(yōu)選的,這個(gè)狀態(tài)信息可以基于收到的至少一個(gè)確認(rèn)或確認(rèn)缺失(由于超時(shí)等)而發(fā)送。而且,該狀態(tài)信息可以包括一個(gè)用于控制模塊的句柄(handle),該句柄用于接口(socket)、序列號(hào)和/或與重發(fā)請(qǐng)求相關(guān)的重發(fā)數(shù)據(jù)的大小。
而且,響應(yīng)該狀態(tài)信息,處理器可以向卸載引擎發(fā)送一個(gè)重發(fā)指令信息。該重發(fā)指令信息可以包括一個(gè)序列號(hào)、指向一個(gè)主機(jī)緩沖的指針(pointer)等。需要注意的是,該指針可以由卸載引擎和/或處理器來(lái)維護(hù)。
優(yōu)選的,該重發(fā)指令信息還可以包含一個(gè)補(bǔ)償,該補(bǔ)償與指針共同使用,以確定需要重發(fā)的數(shù)據(jù)。如果需要重發(fā)的數(shù)據(jù)緩沖(buffer)只有部分被確認(rèn),則該重發(fā)指令信息可以優(yōu)選地包含這個(gè)補(bǔ)償。而且,該重發(fā)指令信息可以包含一個(gè)用于控制模塊的句柄,該句柄用于接口。
使用中,卸載引擎可以請(qǐng)求一個(gè)直接存儲(chǔ)訪問(wèn)(DMA)以響應(yīng)重發(fā)指令信息,找回需要重發(fā)的數(shù)據(jù)。響應(yīng)需要重發(fā)的數(shù)據(jù)的接收,卸載引擎可以啟動(dòng)一個(gè)涉及序列號(hào)的比較。此后,卸載引擎可以根據(jù)比較重發(fā)該數(shù)據(jù)。
需注意到的是,系統(tǒng)存儲(chǔ)器可以通過(guò)一根總線連接到一個(gè)處理器和/或駐留在該處理器上。而且,該卸載引擎可以包括一個(gè)接收器、一個(gè)輪詢器、存儲(chǔ)器、一個(gè)狀態(tài)信息發(fā)生器、一個(gè)解析器、一個(gè)發(fā)送請(qǐng)求器、一個(gè)DMA隊(duì)列(queue)、一個(gè)信息包發(fā)生器和/或其它任何需要的組件。
圖1為現(xiàn)有技術(shù)的用于從一個(gè)主機(jī)發(fā)送和重發(fā)數(shù)據(jù)的方法的流程圖,該主機(jī)具有界面設(shè)備,例如一個(gè)卸載引擎。
圖2顯示了根據(jù)一個(gè)實(shí)施例的一個(gè)網(wǎng)絡(luò)系統(tǒng)。
圖3顯示了一個(gè)典型的結(jié)構(gòu),該結(jié)構(gòu)可以實(shí)現(xiàn)一個(gè)實(shí)施例。
圖4顯示了根據(jù)一個(gè)實(shí)施例的、在網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)重發(fā)的一個(gè)典型的方法。
圖5顯示了根據(jù)一個(gè)實(shí)施例的、用于產(chǎn)生重發(fā)指令信息的一個(gè)典型的方法。
圖6顯示了根據(jù)一個(gè)實(shí)施例的、用于處理重發(fā)請(qǐng)求的一個(gè)典型的設(shè)計(jì)和操作。
圖7顯示了根據(jù)一個(gè)實(shí)施例的、用于跟蹤數(shù)據(jù)發(fā)送的SGL的一個(gè)典型的設(shè)計(jì)。
具體實(shí)施例方式
根據(jù)一個(gè)實(shí)施例,圖2顯示了一個(gè)網(wǎng)絡(luò)系統(tǒng)200。如圖所示,提供了一個(gè)網(wǎng)絡(luò)202。在本網(wǎng)路系統(tǒng)200的上下文中,網(wǎng)絡(luò)系統(tǒng)202可以采用任何形式,包括但不局限于局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)例如互聯(lián)網(wǎng)等。
連接到網(wǎng)絡(luò)202的是一個(gè)本地主機(jī)204和一個(gè)遠(yuǎn)端主機(jī)206,它們能夠通過(guò)網(wǎng)絡(luò)202進(jìn)行通信。在現(xiàn)有描述的上下文中,這些主機(jī)204、206可以是網(wǎng)絡(luò)服務(wù)器、桌面電腦、筆記本電腦、手提電腦、打印機(jī)或任何其它類(lèi)型的硬件/軟件。需要注意的是,每一個(gè)前述組件以及其它任何未說(shuō)明的設(shè)備都可以通過(guò)一個(gè)或多個(gè)網(wǎng)絡(luò)相互連接。
圖3為一個(gè)典型的結(jié)構(gòu)300,該結(jié)構(gòu)可以實(shí)現(xiàn)一個(gè)實(shí)施例。在一個(gè)實(shí)施例中,該結(jié)構(gòu)300可以表示圖2的主機(jī)204、206中的一個(gè)。當(dāng)然,雖然這樣,應(yīng)該注意到,結(jié)構(gòu)300可以在任何希望的上下文中實(shí)現(xiàn)。
例如,結(jié)構(gòu)300可以在下列情況下實(shí)現(xiàn)常規(guī)計(jì)算機(jī)系統(tǒng)、電路板系統(tǒng)、用于娛樂(lè)目的的游戲控制系統(tǒng)、機(jī)頂盒、路由器、網(wǎng)絡(luò)系統(tǒng)、存儲(chǔ)系統(tǒng)、特定應(yīng)用系統(tǒng)或與網(wǎng)絡(luò)202相關(guān)的任何其它希望的系統(tǒng)。
如圖所示,結(jié)構(gòu)300包括多個(gè)通過(guò)一根總線302相連接的組件,包括至少一個(gè)用于處理數(shù)據(jù)的處理器304。而該處理器304可以采用任何形式,在一個(gè)實(shí)施例中,處理器304采用的形式有中央處理單元(CPU)、芯片組(例如一組集成電路等,設(shè)計(jì)成作為一個(gè)單元用于實(shí)現(xiàn)相關(guān)功能),或任何其它希望的能夠處理數(shù)據(jù)的處理設(shè)備。
另外,結(jié)構(gòu)300還包括一個(gè)處理系統(tǒng)存儲(chǔ)器306,與處理器304相互通信以用于存儲(chǔ)數(shù)據(jù)。該處理系統(tǒng)存儲(chǔ)器306可以采用的形式包括機(jī)載(on-board)或離機(jī)(off-board)隨機(jī)訪問(wèn)存儲(chǔ)器(RAM),硬盤(pán)驅(qū)動(dòng)器,可移動(dòng)存儲(chǔ)驅(qū)動(dòng)器(例如軟盤(pán)驅(qū)動(dòng)器、磁盤(pán)驅(qū)動(dòng)器、光盤(pán)驅(qū)動(dòng)器等),和/或任意其它形式的可用于存儲(chǔ)數(shù)據(jù)的希望的存儲(chǔ)器。
使用中,優(yōu)選的,程序、控制邏輯算法可以任意地存儲(chǔ)于處理系統(tǒng)存儲(chǔ)器306。當(dāng)執(zhí)行時(shí),這些程序使結(jié)構(gòu)300完成各種功能。當(dāng)然,結(jié)構(gòu)300可以簡(jiǎn)單地直接連接。
此外還顯示了一個(gè)與處理器304和網(wǎng)絡(luò)(例如圖2所示的網(wǎng)絡(luò)202)通信的卸載引擎312。在一個(gè)實(shí)施例中,卸載引擎312可以通過(guò)總線302保持與處理器304的通信。當(dāng)然,盡管這樣,卸載引擎312可以通過(guò)任意提供相互間連接的設(shè)備保持與處理器304之間的通信。卸載引擎312可以包括一個(gè)傳輸(例如TCP/IP)卸載引擎(TOE),或任意能夠管理網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)的集成電路。
在操作中,為了提供一種用于實(shí)現(xiàn)網(wǎng)絡(luò)重發(fā)的經(jīng)濟(jì)有效的技術(shù),該卸載引擎312用于確定需要重發(fā)的數(shù)據(jù),找回存儲(chǔ)在系統(tǒng)存儲(chǔ)器(例如,處理器系統(tǒng)存儲(chǔ)器306)中的需要重發(fā)的數(shù)據(jù),并重發(fā)那些找回的數(shù)據(jù)。通過(guò)使用系統(tǒng)存儲(chǔ)器存儲(chǔ)那些重發(fā)的數(shù)據(jù),卸載引擎312的生產(chǎn)可以具有更小的集成存儲(chǔ)器或不需要存儲(chǔ)器。從而提供了一種更為經(jīng)濟(jì)有效的技術(shù)。參考讓卸載引擎312以前述方式使用系統(tǒng)存儲(chǔ)器的典型的方法,更多的信息可以被提供。
根據(jù)一個(gè)實(shí)施例,圖4顯示了一種在網(wǎng)絡(luò)上進(jìn)行數(shù)據(jù)重發(fā)的典型的方法400。作為選擇,方法400可以在圖3的典型結(jié)構(gòu)300的上下文中實(shí)現(xiàn)。當(dāng)然,盡管這樣,應(yīng)該注意的是,方法400可以在任何所希望的上下文中實(shí)現(xiàn)。而且,重要的是應(yīng)當(dāng)理解,如果可以給這些典型組件(例如上述的各種組件)分配各種功能,則所述各種功能可以通過(guò)任何希望的實(shí)體(entity)實(shí)現(xiàn)。
如圖所示,在判斷401中,該判斷是確定確保數(shù)據(jù)重發(fā)的標(biāo)準(zhǔn)是否滿足。正是通過(guò)例中的方式,所述標(biāo)準(zhǔn)可以基于以下事項(xiàng)至少一個(gè)確認(rèn)(ACK)或確認(rèn)缺失、一個(gè)重復(fù)的ACK閥值、超時(shí)、各種計(jì)時(shí)參數(shù)和/或任何其它希望的標(biāo)準(zhǔn)。例如,在一個(gè)例子中,該標(biāo)準(zhǔn)包括一個(gè)重復(fù)的ACK閥值,該重復(fù)的ACK閥值可以是任何預(yù)先設(shè)定的,或用戶設(shè)定的接收的ACK的數(shù)量,或其它任何與ACK相關(guān)的參數(shù)。在本描述的上下文中,ACK包括任何從接收主機(jī)發(fā)送到發(fā)送主機(jī)的、指示數(shù)據(jù)已被成功發(fā)送的信號(hào)。
通過(guò)判斷401,如果重發(fā)的標(biāo)準(zhǔn)被確定為符合,則生成一條狀態(tài)信息,并發(fā)送到一個(gè)處理器(例如圖3的處理器304),如操作402所示。在一個(gè)實(shí)施例中,是利用一個(gè)卸載引擎(例如圖3的卸載引擎312)生成該狀態(tài)信息。而且,狀態(tài)信息可以采用任何能夠請(qǐng)求存儲(chǔ)于系統(tǒng)存儲(chǔ)器(例如圖3的存儲(chǔ)器306)的數(shù)據(jù)重發(fā)的形式。
作為選擇,該狀態(tài)信息可以包括便于請(qǐng)求數(shù)據(jù)重發(fā)的各種信息。例如,該狀態(tài)信息可以包括一個(gè)序列號(hào)。在本發(fā)明的上下文中,這種序列號(hào)可以包括與重發(fā)的數(shù)據(jù)相關(guān)的號(hào)碼,該號(hào)碼反映該數(shù)據(jù)相對(duì)于其它發(fā)送數(shù)據(jù)的順序。
作為又一個(gè)選擇,該狀態(tài)信息可以包括重發(fā)數(shù)據(jù)的大小。典型的,該重發(fā)數(shù)據(jù)的大小是以字節(jié)規(guī)定的數(shù)據(jù)、例如一個(gè)遠(yuǎn)端主機(jī)能夠在一個(gè)單一的、未分段的片段中處理的數(shù)據(jù)的最大值。重發(fā)數(shù)據(jù)的大小也可以根據(jù)本地主機(jī)接收到的遠(yuǎn)端主機(jī)的ACK而規(guī)定。在這種情況下,遠(yuǎn)端主機(jī)可以請(qǐng)求多個(gè)用于重發(fā)的TCP信息包。而且,該狀態(tài)信息可以包括一個(gè)用于接口的控制模塊(CB)句柄,或任何其它希望的信息。應(yīng)該注意,所述CB可以包括各種信息,例如與最新確認(rèn)的數(shù)據(jù)相關(guān)的信息。
表1顯示了一個(gè)典型的狀態(tài)信息的格式。該格式僅用于說(shuō)明的目的,不應(yīng)認(rèn)為是任何方式的限制。
表1
接著,作為對(duì)該狀態(tài)信息的響應(yīng),處理器生成一條重發(fā)指令信息并發(fā)送到該卸載引擎。見(jiàn)操作404。在本描述的上下文中,重發(fā)指令信息包括任何便于找回需要重發(fā)的數(shù)據(jù)的信息,其方式將在下面被闡述。參考圖5,與這個(gè)重發(fā)指令信息相關(guān)的更多信息將被更加詳細(xì)地闡述。
作為對(duì)重發(fā)指令信息的響應(yīng),該卸載引擎將請(qǐng)求一個(gè)直接存儲(chǔ)訪問(wèn)(DMA),見(jiàn)操作406。請(qǐng)求該DMA是為了找回存儲(chǔ)在系統(tǒng)存儲(chǔ)器中的需要被重發(fā)的數(shù)據(jù)。應(yīng)該注意,在本描述的上下文中,DMA可以允許數(shù)據(jù)從存儲(chǔ)器直接發(fā)送,這樣,處理器可以避免被卷入特定數(shù)據(jù)的發(fā)送,從而加快了整個(gè)操作。
一旦成功完成DMA,并且所述數(shù)據(jù)也被接收,接著根據(jù)即時(shí)數(shù)據(jù),確定是否接收到ACK,在此同時(shí),各種前述的操作也被執(zhí)行,見(jiàn)判定408。這個(gè)操作可以通過(guò)任何所希望的方式完成,優(yōu)選的,可以通過(guò)啟動(dòng)一個(gè)上述序列號(hào)的比較來(lái)完成。特別是,如果一個(gè)ACK的序列號(hào)比先前收集的序列號(hào)大,那么可以假設(shè),數(shù)據(jù)的部分或全部已被遠(yuǎn)端主機(jī)成功接收。
因此,根據(jù)判定408的先前的比較,通過(guò)使用該卸載引擎,所述數(shù)據(jù)可以通過(guò)網(wǎng)絡(luò)被重發(fā),見(jiàn)操作410。特別的,如果所述數(shù)據(jù)沒(méi)有被確認(rèn)已被成功接收,則該數(shù)據(jù)可以被重發(fā)。
根據(jù)一個(gè)實(shí)施例,圖5顯示了一個(gè)用于生成一個(gè)重發(fā)指令信息的典型的方法500。作為選擇,方法500可以在圖4的操作404的上下文中實(shí)現(xiàn)。當(dāng)然,盡管這樣,應(yīng)該注意,方法500可以通過(guò)任何希望的情形實(shí)現(xiàn)。而且,重要的是應(yīng)當(dāng)理解,如果可以給這些典型組件(例如上述的各種組件)分配各種功能,則所述各種功能可以通過(guò)任何希望的實(shí)體實(shí)現(xiàn)。
如圖所示,在操作502,一個(gè)緩沖(buffer)被處理器(如圖3的處理器304)確定。如表1所列舉的狀態(tài)信息所示,該緩沖可以通過(guò)CB句柄來(lái)確定。一般而言,將被重發(fā)的緩沖是與上述CB句柄相關(guān)的未確認(rèn)的最舊的緩沖。
接著在判斷504,該緩沖被確定是否已被遠(yuǎn)端主機(jī)部分接收。換句話說(shuō),由處理器確定在確定的緩沖中的需要重發(fā)的數(shù)據(jù)是否以一個(gè)成功的方式被部分接收。如果數(shù)據(jù)緩沖已被至少部分確認(rèn),則一個(gè)用于補(bǔ)償與前述DMA(見(jiàn)圖4的操作406)相關(guān)的啟動(dòng)地址的補(bǔ)償(offset)被確定,見(jiàn)操作506。如果不需要補(bǔ)償,則跳過(guò)操作506。作為替換,與上述DMA相關(guān)的啟動(dòng)地址可以由補(bǔ)償?shù)闹涤枰孕薷?,從而排除了一個(gè)獨(dú)立的補(bǔ)償指示器(offset indicator)的需要。
接著,判斷該數(shù)據(jù)的大小是否小于前述狀態(tài)信息指示的重發(fā)數(shù)據(jù)。如果是這種情況,則加入一個(gè)額外的緩沖,見(jiàn)操作510。但是如果不是,則跳過(guò)操作510。
這樣,類(lèi)似于表1的狀態(tài)信息,重發(fā)指令信息也可以包括各種信息。例如,用于DMA操作的啟動(dòng)地址可以作為一個(gè)補(bǔ)償加入到一個(gè)與接口相關(guān)的分散-收集表(SGL)。而且,重發(fā)指令信息還可以包括前文所述的序列號(hào)。此外,重發(fā)指令信息可以包括一個(gè)用于接口的CB句柄,或任何其它希望的信息。
表2顯示了一個(gè)典型的重發(fā)指令信息的格式。該格式僅用于說(shuō)明的目的,不應(yīng)認(rèn)為是任何方式的限制。
表2
因此,重發(fā)指令信息可以用于那些位于圖4中操作404(如圖4的操作406-410)之后的操作。
根據(jù)一個(gè)實(shí)施例,圖6顯示了一個(gè)用于處理重發(fā)請(qǐng)求的典型的設(shè)計(jì)和操作600。作為選擇,該設(shè)計(jì)和操作600可以在前述附圖所公開(kāi)的上下文中實(shí)現(xiàn)。當(dāng)然,盡管這樣,應(yīng)該注意,該設(shè)計(jì)和操作600可以在任何希望的情況下實(shí)現(xiàn)。最重要的是,該典型的設(shè)計(jì)和操作600僅用于說(shuō)明的目的,不應(yīng)認(rèn)為是任何方式的限制。
如圖所示,該典型的設(shè)計(jì)和操作600包括一個(gè)與處理器相連接的主機(jī)驅(qū)動(dòng)器618,該處理器又與一個(gè)卸載引擎601通信連接,該卸載引擎具有多個(gè)典型的組件。例如,所示的卸載引擎601包括一個(gè)接收器604、一個(gè)CB輪詢器602、一個(gè)狀態(tài)信息發(fā)生器606、一個(gè)指令模塊(IB)隊(duì)列620、一個(gè)IB解析器608、一個(gè)重發(fā)請(qǐng)求器610、一個(gè)DMA隊(duì)列612、CB存儲(chǔ)器614和一個(gè)數(shù)據(jù)信息包發(fā)生器616。這些組件如圖所示進(jìn)行連接。在下文的對(duì)典型設(shè)計(jì)和操作600的討論中,各種組件的功能將被更為詳細(xì)的闡述。
如圖所示,通過(guò)檢查CB存儲(chǔ)器中一個(gè)重發(fā)的時(shí)間戳,CB輪詢器確定重發(fā)是否需要一個(gè)接口。接著,狀態(tài)信息發(fā)生器606生成一條重發(fā)狀態(tài)信息,并通過(guò)主機(jī)驅(qū)動(dòng)器618發(fā)送到本地主機(jī)。如前文所述,該狀態(tài)信息可以包括與重發(fā)請(qǐng)求相關(guān)的序列號(hào),并由來(lái)自CB存儲(chǔ)器614的最新的未確認(rèn)序列號(hào)域得到。該狀態(tài)信息也可以包括與重發(fā)請(qǐng)求相關(guān)的重發(fā)數(shù)據(jù)的大小。
該本地主機(jī)(或卸載引擎601,兩者都可以)可以維持一個(gè)用于接口的SGL。如果本地主機(jī)接收到狀態(tài)信息,驅(qū)動(dòng)器618就將表中最舊的緩沖取出,并在重發(fā)指令信息中使用。如前文所述,如果最舊的緩沖的數(shù)據(jù)的量小于遠(yuǎn)端主機(jī)要求重發(fā)的數(shù)據(jù)的大小,則本地主機(jī)就按照需要,在重發(fā)指令信息中加入盡量多的緩沖。
由于本地主機(jī)通過(guò)狀態(tài)信息而獲得用于接口的事件進(jìn)展的所有ACK。因而,如果遠(yuǎn)端主機(jī)的緩沖中有部分確認(rèn)的數(shù)據(jù),本地主機(jī)也知道。在這種情況下,如上文所解釋?zhuān)镜刂鳈C(jī)可以適當(dāng)?shù)膶?duì)緩沖中的啟動(dòng)地址進(jìn)行補(bǔ)償。表3顯示了一個(gè)ACK狀態(tài)信息的典型格式。該格式僅用于說(shuō)明的目的,不應(yīng)認(rèn)為是任何方式的限制。
表3
本地主機(jī)收到狀態(tài)信息后,將產(chǎn)生一個(gè)重發(fā)指令信息,并將該信息發(fā)送到卸載引擎601,并排在本地的緩沖中。
當(dāng)IB解析器608收到該重發(fā)指令信息后,解析器將對(duì)該指令信息進(jìn)行解析;一旦確定該信息是一個(gè)重發(fā)指令,解析器將把該請(qǐng)求發(fā)送到發(fā)送請(qǐng)求器610。然后,發(fā)送請(qǐng)求器610從CB存儲(chǔ)器614中找回必要的參數(shù),并請(qǐng)求一個(gè)DMA操作以找回主機(jī)系統(tǒng)中的重發(fā)數(shù)據(jù)。然后,該DMA請(qǐng)求排在DMA隊(duì)列的一個(gè)FIFO中。該DMA操作可以類(lèi)似于通常的數(shù)據(jù)發(fā)送請(qǐng)求。來(lái)自重發(fā)指令信息的序列號(hào),連同一個(gè)額外的部分,將與DMA請(qǐng)求一起被發(fā)送,以指示該數(shù)據(jù)請(qǐng)求是用于重發(fā)。
如果該DMA完成,該數(shù)據(jù)信息包發(fā)生器616可以確定該請(qǐng)求是一個(gè)重發(fā)請(qǐng)求,因?yàn)樵撝匕l(fā)部分與一個(gè)DMA數(shù)據(jù)的有效指針一起被維持。如果數(shù)據(jù)信息包發(fā)生器616遇到了這個(gè)情況,則數(shù)據(jù)信息包發(fā)生器616會(huì)將需要被重發(fā)的信息包的序列號(hào)與CB存儲(chǔ)器614中最舊的未確認(rèn)的序列號(hào)進(jìn)行比較。如果二者相一致,則重發(fā)有效,信息包被重發(fā)。如果CB存儲(chǔ)器中的序列號(hào)的版本大于重發(fā)數(shù)據(jù)的序列號(hào),則表明遠(yuǎn)端主機(jī)已經(jīng)在重發(fā)請(qǐng)求發(fā)出與DMA操作完成之間的時(shí)間內(nèi)完成全部或部分?jǐn)?shù)據(jù)的確認(rèn)。在這種情況下,根據(jù)被確認(rèn)數(shù)據(jù)的量,數(shù)據(jù)重發(fā)請(qǐng)求可以被放棄或繼續(xù)。
使用中,由重復(fù)的ACK或選擇性的確認(rèn)(SACK)選項(xiàng)引發(fā)的重發(fā),也可以由指向本地主機(jī)的一個(gè)狀態(tài)信息引發(fā)。根據(jù)遠(yuǎn)端主機(jī)的觀點(diǎn),沒(méi)有必要觀察不同重發(fā)類(lèi)型之間的區(qū)別。對(duì)于這些情況,接收器604可以被配置成請(qǐng)求狀態(tài)信息。一旦收到的重復(fù)ACK的數(shù)量值,則達(dá)到界限,接收器604可以請(qǐng)求一條重發(fā)狀態(tài)信息并在接口CB存儲(chǔ)器614中規(guī)定一個(gè)重復(fù)ACK狀態(tài)。如果接收器接收到進(jìn)一步的重復(fù)ACK并觀察到這個(gè)部分仍然存在,則接收器不再重新請(qǐng)求進(jìn)一步的重發(fā)。如果數(shù)據(jù)信息包發(fā)生器616發(fā)送了該重發(fā)信息包,則數(shù)據(jù)信息包發(fā)生器就可以清除前述的該部分。
如果接收器604接收到的來(lái)自遠(yuǎn)端主機(jī)的信息包含有SACK選項(xiàng),則接收器也可以請(qǐng)求一條重發(fā)狀態(tài)信息。與重復(fù)的ACK不一樣,一條重發(fā)狀態(tài)信息可以被請(qǐng)求用于每一個(gè)收到的SACK選項(xiàng)。重發(fā)數(shù)據(jù)的大小也可以由SACK選項(xiàng)中收到的參數(shù)而得知。
圖7顯示了一個(gè)SGL列表的典型的設(shè)計(jì),該列表被維持以用于每一個(gè)接口。SGL700含有一個(gè)入口(entry)的列表,該列表規(guī)定了接口上發(fā)送的數(shù)據(jù)。
每個(gè)SGL入口包含一個(gè)指針,該指針指示被發(fā)送信息在主機(jī)存儲(chǔ)器上的位置,以及將被發(fā)送的數(shù)據(jù)的量。表4顯示了一個(gè)典型的SGL入口格式。該格式僅用于說(shuō)明的目的,不應(yīng)認(rèn)為是任何方式的限制。
表4
用于每一個(gè)SGL的指針有兩個(gè)。第一個(gè)指針指示下一個(gè)項(xiàng)目在SGL中將被寫(xiě)入的位置,見(jiàn)701。當(dāng)更多的數(shù)據(jù)需要在接口發(fā)送,則該指針?biāo)甘镜腟GL位置將被一個(gè)SGL項(xiàng)目寫(xiě)入,該項(xiàng)目包含放置數(shù)據(jù)的主機(jī)地址,以及有多少數(shù)據(jù)將被發(fā)送。
用于SGL的第二個(gè)指針是指向最舊的未確認(rèn)數(shù)據(jù)緩沖,見(jiàn)702。當(dāng)收到一條重發(fā)狀態(tài)信息時(shí),該指針用于追蹤哪個(gè)數(shù)據(jù)需要被重發(fā)。由于本地主機(jī)收到了指示有多少數(shù)據(jù)已被遠(yuǎn)端主機(jī)接收的ACK狀態(tài)信息,因此指針被增長(zhǎng)。如果在最舊的SGL選項(xiàng)中的所有數(shù)據(jù)都被確認(rèn)了,則上述選項(xiàng)所指示的緩沖可以被釋放,并被本地主機(jī)重新使用。通過(guò)這種方式,當(dāng)本地主機(jī)接收到重發(fā)狀態(tài)信息時(shí),可以快速的對(duì)需要重發(fā)的數(shù)據(jù)進(jìn)行定位。
盡管前文描述了多種不同的實(shí)施例,但是,這些實(shí)施例僅僅用于舉例說(shuō)明本發(fā)明,并不是用來(lái)限制本發(fā)明。因此,上述的典型的實(shí)施例不應(yīng)限制這些優(yōu)選的實(shí)施例的應(yīng)用范圍,這些實(shí)施例的應(yīng)用范圍應(yīng)該依據(jù)權(quán)利要求進(jìn)行限制。
權(quán)利要求
1.一個(gè)卸載引擎系統(tǒng),用于在網(wǎng)絡(luò)上執(zhí)行數(shù)據(jù)重發(fā),其特征在于,該系統(tǒng)包括一個(gè)卸載引擎,與系統(tǒng)存儲(chǔ)器以及網(wǎng)絡(luò)進(jìn)行通信;其中,所述卸載引擎用于管理網(wǎng)絡(luò)中發(fā)送的數(shù)據(jù)的重發(fā)。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述卸載引擎與處理器進(jìn)行通信,并管理數(shù)據(jù)的重發(fā),通過(guò)確定將被重發(fā)的數(shù)據(jù);找回存儲(chǔ)在系統(tǒng)存儲(chǔ)器中的、需要重發(fā)的數(shù)據(jù);重發(fā)找回的數(shù)據(jù)。
3.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述卸載引擎向處理器發(fā)送一條狀態(tài)信息,以啟動(dòng)需要重發(fā)的數(shù)據(jù)的找回;且該狀態(tài)信息的發(fā)送是基于接收的至少一個(gè)確認(rèn)或者確認(rèn)缺失。
4.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述卸載引擎向處理器發(fā)送一條狀態(tài)信息,以啟動(dòng)需要重發(fā)的數(shù)據(jù)的找回;且該狀態(tài)信息基于超時(shí)而發(fā)送。
5.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述卸載引擎向處理器發(fā)送一條狀態(tài)信息,以啟動(dòng)需要重發(fā)的數(shù)據(jù)的找回;且該狀態(tài)信息包括一個(gè)用于控制模塊的句柄,該控制模塊用于接口。
6.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述卸載引擎向處理器發(fā)送一條狀態(tài)信息,以啟動(dòng)需要重發(fā)的數(shù)據(jù)的找回;且該狀態(tài)信息包括一個(gè)序列號(hào)。
7.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述卸載引擎向處理器發(fā)送一條狀態(tài)信息,以啟動(dòng)需要重發(fā)的數(shù)據(jù)的找回;且該狀態(tài)信息包括一個(gè)重發(fā)數(shù)據(jù)的大小。
8.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述卸載引擎向處理器發(fā)送一條狀態(tài)信息,以啟動(dòng)需要重發(fā)的數(shù)據(jù)的找回;響應(yīng)該狀態(tài)信息,該處理器向該卸載引擎發(fā)送一條重發(fā)指令信息。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述重發(fā)指令信息包括一個(gè)序列號(hào)。
10.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述重發(fā)指令信息包括至少一個(gè)指針,該指針指向至少一個(gè)主機(jī)緩沖。
11.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述指針由該卸載引擎維持。
12.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述指針由該處理器維持。
13.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述重發(fā)指令信息包括一個(gè)補(bǔ)償,該補(bǔ)償與該指針一起用于確定將被重發(fā)的數(shù)據(jù)。
14.如權(quán)利要求13述的系統(tǒng),其特征在于,所述補(bǔ)償被包括是為了規(guī)定緩沖列表中的一個(gè)起始位置,該緩沖列表用于將被重發(fā)的數(shù)據(jù)。
15.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述重發(fā)指令信息包括一個(gè)用于控制模塊的句柄,該控制模塊用于接口。
16.如權(quán)利要求15所述的系統(tǒng),其特征在于,所述控制模塊包括與最新確認(rèn)的數(shù)據(jù)相關(guān)的信息。
17.如權(quán)利要求8所述的系統(tǒng),其特征在于,響應(yīng)該重發(fā)指令信息,所述卸載引擎請(qǐng)求一個(gè)直接存儲(chǔ)訪問(wèn)以找回將被重發(fā)的數(shù)據(jù)。
18.如權(quán)利要求17所述的系統(tǒng),其特征在于,響應(yīng)收到將被重發(fā)的所述數(shù)據(jù),所述卸載引擎啟動(dòng)一個(gè)涉及序列號(hào)的比較。
19.如權(quán)利要求18所述的系統(tǒng),其特征在于,所述卸載引擎基于所述比較重發(fā)所述數(shù)據(jù)。
20.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述卸載引擎向一個(gè)處理器發(fā)送一條狀態(tài)信息,以指示已從遠(yuǎn)端主機(jī)收到一條用于發(fā)送的數(shù)據(jù)的確認(rèn)。
21.如權(quán)利要求20所述的系統(tǒng),其特征在于,所述狀態(tài)信息包括一個(gè)控制模塊的句柄,該控制模塊用于接口。
22.如權(quán)利要求20所述的系統(tǒng),其特征在于,狀態(tài)信息包括一個(gè)確認(rèn)號(hào)碼。
23.一個(gè)卸載引擎子系統(tǒng),用于在網(wǎng)絡(luò)上執(zhí)行數(shù)據(jù)重發(fā),其特征在于,該系統(tǒng)包括一個(gè)卸載引擎,與一個(gè)存儲(chǔ)器和一個(gè)網(wǎng)絡(luò)進(jìn)行通信;其中,所述卸載引擎管理網(wǎng)絡(luò)中數(shù)據(jù)的發(fā)送,通過(guò)確定將被重發(fā)的數(shù)據(jù);找回存儲(chǔ)與處理系統(tǒng)存儲(chǔ)器中的需要被重發(fā)的數(shù)據(jù);重發(fā)該找回的數(shù)據(jù)。
24.一種利用卸載引擎在網(wǎng)絡(luò)上執(zhí)行數(shù)據(jù)重發(fā)的方法,其特征在于,該方法包括確定將被重發(fā)的數(shù)據(jù);找回存儲(chǔ)與處理系統(tǒng)存儲(chǔ)器中的需要被重發(fā)的數(shù)據(jù);和重發(fā)該找回的數(shù)據(jù)。
全文摘要
一種系統(tǒng)和方法,該系統(tǒng)和方法用于在網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)重發(fā)。該系統(tǒng)和方法包括一個(gè)卸載引擎,該卸載引擎與系統(tǒng)存儲(chǔ)器以及網(wǎng)絡(luò)進(jìn)行通信。該卸載引擎用于管理網(wǎng)絡(luò)中被發(fā)送數(shù)據(jù)的重發(fā)。
文檔編號(hào)H04L29/06GK1638319SQ20041010498
公開(kāi)日2005年7月13日 申請(qǐng)日期2004年12月20日 優(yōu)先權(quán)日2003年12月19日
發(fā)明者米納米·約翰·希吉托, 約翰遜·邁克爾·瓦爾德, 庫(kù)里德·安德魯, 卡努里·姆魯杜拉 申請(qǐng)人:恩維迪亞公司