專利名稱:網(wǎng)絡(luò)業(yè)務(wù)的智能負載平衡和故障轉(zhuǎn)移的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的實施例大體上涉及網(wǎng)絡(luò)通信,且更具體地說,涉及一種用于使用散列引擎 來對網(wǎng)絡(luò)業(yè)務(wù)進行智能負載平衡和故障轉(zhuǎn)移的系統(tǒng)和方法。
背景技術(shù):
性能和可靠性是對現(xiàn)代計算機網(wǎng)絡(luò)的關(guān)鍵要求。當新的網(wǎng)絡(luò)連接在包含多個網(wǎng)絡(luò)接 口卡("NIC")的計算裝置上啟動時,操作系統(tǒng)通常為所述連接選擇NIC,而不考慮每 個NIC的利用率或出錯率。此類環(huán)境的一個劣勢是新的連接通常被指配給過載且/或不 可靠的NIC,從而導(dǎo)致用于新的連接且可能用于選定NIC上的其它現(xiàn)存連接的網(wǎng)絡(luò)性能 降低。
一些現(xiàn)有技術(shù)解決方案試圖通過保存含有"連接狀態(tài)"的復(fù)雜的數(shù)據(jù)結(jié)構(gòu)來避免將 新的連接指配給過載且/或不可靠的NIC。分析此數(shù)據(jù)結(jié)構(gòu)使得網(wǎng)絡(luò)裝置驅(qū)動器可確定哪 些NIC是過載且/或不可靠的。然而,此連接狀態(tài)的結(jié)構(gòu)無助于有效地識別已向每個連 接指配哪一NIC,或有效地將連接從過載或不可靠的NIC重新分配到完全起作用的NIC。 另外,保存或分析此連接狀態(tài)在計算上是昂貴的,這可能使計算裝置的計算和網(wǎng)絡(luò)性能 降級。
如前面所說明,此項技術(shù)中需要一種更有效的用于在計算裝置中的NIC上分配和再 分配網(wǎng)絡(luò)連接的技術(shù)。
發(fā)明內(nèi)容
本發(fā)明的一個實施例陳述一種用于智能地將網(wǎng)絡(luò)連接轉(zhuǎn)移到網(wǎng)絡(luò)接口卡(NIC)以 接收網(wǎng)絡(luò)業(yè)務(wù)的方法。所述方法包含截取由操作系統(tǒng)產(chǎn)生的地址解析協(xié)議(ARP)響 應(yīng)包,其中所述ARP響應(yīng)包具有與第一NIC相關(guān)聯(lián)的第一媒體接入控制(MAC)地址, 所述第一 NIC已經(jīng)被操作系統(tǒng)選擇用來接收與網(wǎng)絡(luò)連接有關(guān)的網(wǎng)絡(luò)業(yè)務(wù)對ARP響應(yīng) 包進行解碼;通過向散列函數(shù)提供經(jīng)解碼的ARP響應(yīng)包中所包含的一個或一個以上網(wǎng) 絡(luò)參數(shù)來產(chǎn)生與第二 NIC相關(guān)聯(lián)的第二 MAC地址;以及用第二 MAC地址來代替ARP 響應(yīng)包中的第一 MAC地址。
所揭示的方法的一個優(yōu)勢是其允許網(wǎng)絡(luò)連接使用散列引擎在計算裝置中的多個NIC 上智能地轉(zhuǎn)移??墒褂眠B接轉(zhuǎn)移來執(zhí)行負載平衡、故障轉(zhuǎn)移或故障恢復(fù)功能。以此方式, 可更容易地避免通過過載或不可靠的NIC來運行網(wǎng)絡(luò)連接,從而改進總體網(wǎng)絡(luò)性能。
因此,為了可更詳細了解本發(fā)明的上述特征,可參考實施例對上文簡要概述的本發(fā) 明進行更具體的描述,所述實施例中的一些實施例在附圖中說明。然而,應(yīng)注意,附圖 只說明本發(fā)明的典型實施例,且因此不應(yīng)被視為限制本發(fā)明的范圍,因為本發(fā)明可承認 其它同等有效的實施例。
圖1A到圖1C說明可實施本發(fā)明的一個或一個以上方面的計算裝置以及
圖2說明根據(jù)本發(fā)明一個實施例的用于基于向散列函數(shù)提供的參數(shù)來從散列表中選 擇MAC地址的方法步驟的流程圖。
圖3A和圖3B說明根據(jù)本發(fā)明一個實施例的用于將連接轉(zhuǎn)移到被散列引擎選擇用來 接收網(wǎng)絡(luò)業(yè)務(wù)的NIC的方法步驟的流程圖;以及
圖4A和圖4B說明根據(jù)本發(fā)明一個實施例的用于將連接轉(zhuǎn)移到被散列引擎選擇用來 傳輸網(wǎng)絡(luò)業(yè)務(wù)的NIC的方法步驟的流程圖。
圖5說明根據(jù)本發(fā)明一個實施例的用于將現(xiàn)存連接卸載到由散列引擎選擇的NIC的 方法步驟的流程圖。
圖6說明根據(jù)本發(fā)明一個實施例的用于使用虛擬返回因特網(wǎng)協(xié)議地址來執(zhí)行地址解 析協(xié)議請求的方法步驟的流程圖。
具體實施例方式
可通過使用截取、修改和重新引導(dǎo)從計算裝置中的操作系統(tǒng)傳輸?shù)骄W(wǎng)絡(luò)上的遠程計 算裝置的包,來實現(xiàn)計算裝置中的多個NIC之間的網(wǎng)絡(luò)連接的智能負載平衡和故障轉(zhuǎn) 移??赏ㄟ^在地址解析協(xié)議("ARP")響應(yīng)包由操作系統(tǒng)傳輸?shù)竭h程計算裝置時截取所 述ARP響應(yīng)包,來對用于連接的接收業(yè)務(wù)進行負載平衡或故障轉(zhuǎn)移。在被繼續(xù)發(fā)送到 遠程計算裝置之前,被截取的ARP響應(yīng)包經(jīng)修改以包含被網(wǎng)絡(luò)驅(qū)動器選擇用來接收用 于連接的業(yè)務(wù)的NIC的MAC地址。此修改導(dǎo)致來自遠程計算裝置的接收業(yè)務(wù)到達由網(wǎng) 絡(luò)驅(qū)動器選擇的NIC,而不是到達由操作系統(tǒng)選擇的NIC。
類似地,可通過在標準傳輸包由操作系統(tǒng)傳輸?shù)竭h程計算裝置時截取所述標準傳輸 包,來對用于連接的傳輸業(yè)務(wù)進行負載平衡或故障轉(zhuǎn)移。在被發(fā)送到遠程計算裝置上之
前,被截取的傳輸包經(jīng)修改以包含被網(wǎng)絡(luò)驅(qū)動器選擇用來傳輸用于連接的業(yè)務(wù)的NIC的 MAC地址。此修改導(dǎo)致傳輸業(yè)務(wù)通過由網(wǎng)絡(luò)驅(qū)動器選擇的NIC而不是通過由操作系統(tǒng) 選擇的NIC發(fā)送到遠程計算裝置。
圖1A到圖IC說明可實施本發(fā)明的一個或一個以上方面的計算裝置100。計算裝置 100可以是桌上型計算機、服務(wù)器、膝上型計算機、掌上型計算機、個人數(shù)字助理、平 板電腦、游戲控制臺、蜂窩式電話或處理信息的任何其它類型的類似裝置。如圖所示, 計算裝置IOO包含主存儲器102、存儲器控制器104、微處理器106、 1/O控制器108和 NIC 110、 116。 NIC 110包含硬件卸載引擎("HOE") 112,且NIC 116包含HOE 118。 HOE 112禾B 118包含經(jīng)配置以用于處理與計算裝置100與已經(jīng)被選擇性地卸載到NIC 110、 116的一個或一個以上遠程網(wǎng)絡(luò)計算裝置(未圖示)之間的網(wǎng)絡(luò)連接相關(guān)聯(lián)的網(wǎng)絡(luò) 幀的邏輯。與常規(guī)做法一樣,通過用HOE112和118來處理網(wǎng)絡(luò)幀(有時被稱為"在硬 件中處理連接"),而不是在主機軟件傳輸控制協(xié)議和因特網(wǎng)協(xié)議("TCP/IP")堆棧中執(zhí) 行那些處理功能(有時被稱為"在軟件中處理連接"),可實質(zhì)上減少NIC 110、 116與 微處理器106之間的通信以及由微處理器106執(zhí)行的計算。
存儲器控制器104耦合到主存儲器102,且耦合到微處理器106,且I/O控制器108 耦合到微處理器106和NIC110、 116。在本發(fā)明的一個實施例中,微處理器106通過將 命令或數(shù)據(jù)寫入到1/0控制器108中來向NIC 110、 116傳輸命令或數(shù)據(jù)。 一旦此類命令 或數(shù)據(jù)被寫入到I/O控制器108中,I/O控制器108就視情況將所述命令或數(shù)據(jù)翻譯成 目標NIC可理解的格式,并將所述命令或數(shù)據(jù)傳送到所述目標NIC。類似地,NIC 110, 116通過將命令或數(shù)據(jù)寫入到I/O控制器108中來向微處理器106傳輸命令或數(shù)據(jù),且 I/O控制器108視情況將所述命令或數(shù)據(jù)翻譯成微處理器106可理解的格式,并將所述 命令或數(shù)據(jù)傳送到微處理器106。前面提及的耦合可實施為存儲器總線或I/O總線,例 如PCFM總線或其任一組合,或否則可以任何其它技術(shù)上可行的方式來實施。
如圖IB中更詳細展示,主存儲器102包含操作系統(tǒng)122和軟件驅(qū)動器124。軟件 驅(qū)動器124包含負載平衡和故障轉(zhuǎn)移("LBFO")模塊126和TCP/IP堆棧130。 LBFO 模塊125跟蹤每個NIC的聯(lián)網(wǎng)狀態(tài)(例如每個NIC的鏈接狀態(tài),每個NIC上的發(fā)送和 接收錯誤的數(shù)目和/或每個NIC是否發(fā)送和接收保持有效的包),且在網(wǎng)絡(luò)連接在計算裝 置100內(nèi)從一個NIC移動到另一 NIC時與TCP/IP堆棧130通信。LBFO模塊126包含 散列引擎128,其基于前面提及的每個NIC的聯(lián)網(wǎng)狀態(tài),來智能地確定應(yīng)如何在計算裝 置100中的不同的起作用的NIC上分配網(wǎng)絡(luò)連接。
如圖1C中更詳細展示,散列引擎128包含傳輸散列表138和接收散列表140。傳
輸散列表138的目的是基于由LBFO模塊126向傳輸散列表138提供的數(shù)據(jù),在計算裝 置100內(nèi)選擇用于傳輸與網(wǎng)絡(luò)連接有關(guān)的包的起作用的NIC。傳輸散列表138包含多個 散列表條目(例如,散列表條目134)和軟件散列函數(shù)(未圖示)。另外,每個散列表條 目包含表索引(例如,表索引132)和表值(例如,表值136)。 LBFO模塊126引導(dǎo)散 列引擎128通過將TCP/IP連接數(shù)據(jù)傳送到散列引擎128來在計算裝置100內(nèi)選擇傳輸 NIC,所述散列引擎128將TCP/IP連接數(shù)據(jù)傳送到傳輸散列表138中的軟件散列函數(shù)。 作為響應(yīng),軟件散列函數(shù)基于所述TCP/IP連接數(shù)據(jù)而在傳輸散列表138內(nèi)選擇表索弓l。 從此選定的表索引中,傳輸散列表138識別對應(yīng)的表值,且散列引擎128將識別出的表 值傳送回到LBFO模塊126。如果對應(yīng)的表值是無效的,那么散列引擎128基于計算裝 置100中的所有NIC的NIC利用率和NIC出錯率數(shù)據(jù)的經(jīng)加權(quán)的組合(如由LBFO模 塊126保存),而為連接選擇NIC,且散列引擎128將選定NIC的MAC地址存儲在對 應(yīng)于當前表索引的表值中。由于軟件散列函數(shù)的設(shè)計和操作是所屬領(lǐng)域的技術(shù)人員眾所 周知的,所以本文將不會論述這些問題。在一個實施例中,LBFO模塊126將以下四個 TCP/IP數(shù)據(jù)傳送到散列引擎128:客戶機因特網(wǎng)協(xié)議("IP")地址、服務(wù)器IP端口、客 戶機IP端口和虛擬局域網(wǎng)識別符("VLAN ID")。在其它實施例中,LBFO模塊126可 將任何技術(shù)上可行的TCP/IP參數(shù)傳送到散列引擎128。
接收散列表140的目的是基于由LBFO模塊126向接收散列表140提供的數(shù)據(jù),在 計算裝置100內(nèi)選擇用于接收與網(wǎng)絡(luò)連接有關(guān)的包的起作用的NIC。類似于傳輸散列表 138,接收散列表140包含多個散列表條目和軟件散列函數(shù)(未圖示),且每個散列表條 目包含表索引和表值。同樣,LBFO模塊126通過將TCP/IP連接數(shù)據(jù)傳送到散列引擎 128來引導(dǎo)散列引擎128在計算裝置100內(nèi)選擇接收NIC,所述散列引擎128將TCP/IP 連接數(shù)據(jù)傳送到接收散列表"O中的軟件散列函數(shù)。作為響應(yīng),軟件散列函數(shù)基于所述 TCP/IP連接數(shù)據(jù)而在接收散列表140內(nèi)選擇表索引。從此選定的表索引中,接收散列表 140識別對應(yīng)的表值,且散列引擎128將識別出的表值傳送回到LBFO模塊126。同樣, 如果對應(yīng)的表值是無效的,那么散列引擎128基于計算裝置100中的所有NIC的NIC 利用率和NIC出錯率數(shù)據(jù)的經(jīng)加權(quán)的組合(如由LBFO模塊126保存),而為連接選擇 NIC,且散列引擎128將選定NIC的MAC地址存儲在對應(yīng)于當前表索引的表值中。在 一個實施例中,LBFO模塊126傳送到散列引擎128的TCP/IP數(shù)據(jù)包含服務(wù)器IP地址。 在其它實施例中,LBFO模塊126可將任何技術(shù)上可行的TCP/IP數(shù)據(jù)傳送到散列引擎 128。
重要的是,散列引擎128的結(jié)構(gòu)有效地支持在執(zhí)行負載平衡、故障轉(zhuǎn)移或故障恢復(fù)
操作時,將連接從一個NIC轉(zhuǎn)移到另一個NIC。舉例來說,在一個實施例中,如果第一 NIC過載,且LBFO模塊126希望將第一NIC上的一些連接轉(zhuǎn)移到第二NIC,那么散列 引擎128可使散列表值含有過載的第一 NIC的MAC地址的散列表條目失效。如下文在 圖2的論述中更詳細地描述,使散列表條目失效導(dǎo)致散列引擎128選擇第二NIC作為對 應(yīng)于失效的散列表條目的新的用于連接的NIC,并將第二 NIC的MAC地址存儲在散列 表條目中。在對散列表值的此改變之后,散列表索引對應(yīng)于經(jīng)修改的散列表值的所有連 接都將通過第二NIC來通信。
另外,散列引擎128的結(jié)構(gòu)有效地支持將連接從--個NIC故障轉(zhuǎn)移到另-- NIC。舉 例來說,在一個實施例中,如果第一 NIC已經(jīng)失效或己經(jīng)變得不可靠,且LBFO模塊 126希望將第一 NIC上的連接轉(zhuǎn)移到第二 NIC,那么散列引擎128可使散列表值包含失 效或不可靠的NIC的MAC地址的所有散列表條目失效。同樣,如下文在圖2中所述, 使散列表條目失效導(dǎo)致散列引擎128選擇第二NIC作為對應(yīng)于失效的散列表條目的新的 用于連接的NIC,且散列表128將第二 NIC的MAC地址存儲在那些散列表條目中。-一 旦已經(jīng)用第二 NIC的MAC地址覆寫了包含失效或不可靠的NIC的MAC地址的所有散 列表值,第一 NIC上的所有連接都已經(jīng)被故障轉(zhuǎn)移到第二 NIC。在2007年5月18日申
請且序號為____且代理人案號為NVDA/P001880的題為"負載平衡聯(lián)網(wǎng)環(huán)境下的智
能故障轉(zhuǎn)移"("Intelligent Failover In a Load-Balanced Networking Environment")的相 關(guān)美國專利申請案中描述了關(guān)于LBFO模塊126在故障轉(zhuǎn)移期間的功能性的更多細節(jié)。 此相關(guān)專利申請案以引用的方式并入本文中。
另外,散列引擎128的結(jié)構(gòu)有效地支持連接從一個NIC故障恢復(fù)到另一 NIC。舉例 來說,在一個實施例中,如果LBFO模塊126已經(jīng)使一些連接從第一 NIC故障轉(zhuǎn)移到第 二 NIC,且第一 NIC隨后變得完全起作用,那么LBFO模塊126可使一些或所有故障轉(zhuǎn) 移的連接故障恢復(fù)到第一 NIC。在一個實施例中,LBFO模塊126可通過更新對應(yīng)于選 定的經(jīng)故障轉(zhuǎn)移的連接的散列表值來對選定的連接進行故障恢復(fù),以存儲第一 NIC而不 是第二 NIC的MAC地址。 一旦已經(jīng)用第一 NIC的MAC地址覆寫了包含第二 NIC的 MAC地址的散列表值,對應(yīng)于經(jīng)覆寫的散列表值的連接就已經(jīng)故障恢復(fù)到第一 NIC。
在2007年5月18日申請的序號為_______且代理人案號為NVDA/P001882的題為"負
載平衡聯(lián)網(wǎng)環(huán)境下的智能故障恢復(fù)"("Intelligent Failback In a Load-Balanced Networking Environment")的相關(guān)美國專利申請案中描述了關(guān)于LBFO模塊126在故障 恢復(fù)期間的功能性的更多細節(jié)。此相關(guān)專利申請案以引用的方式并入本文中。
基于前面提及的對負載平衡和故障轉(zhuǎn)移/故障恢復(fù)的論述,本發(fā)明可經(jīng)配置以在四種
模式下操作,每個模式有效地解決不同操作環(huán)境的需要。在第一操作模式下,使用散列 引擎128來轉(zhuǎn)移連接,以在不依賴于交換機的網(wǎng)絡(luò)環(huán)境(即,將計算裝置100的NIC耦 合到外部網(wǎng)絡(luò)的交換機不在802.3ad模式下操作的網(wǎng)絡(luò)環(huán)境)下執(zhí)行負載平衡和故障轉(zhuǎn) 移/故障恢復(fù)。在此實施例中,下文所描述的圖3和圖4的方法使用散列引擎128來識別 用于轉(zhuǎn)移連接以分別接收業(yè)務(wù)和傳輸業(yè)務(wù)的NIC。而且,此識別可作為負載平衡的一部 分而執(zhí)行,或作為將連接故障轉(zhuǎn)移到可靠NIC的一部分而執(zhí)行。重要的是,用于連接的 接收業(yè)務(wù)和傳輸業(yè)務(wù)可利用不同的NIC,除非所述連接被卸載,所述卸載會導(dǎo)致單個 NIC處理用于被卸載的連接的接收業(yè)務(wù)和傳輸業(yè)務(wù),如下文更詳細地描述。
在第二操作模式下,散列引擎128用于轉(zhuǎn)移連接以在不依賴于交換機的網(wǎng)絡(luò)環(huán)境下 對傳輸業(yè)務(wù)執(zhí)行負載平衡,但不用于對接收業(yè)務(wù)執(zhí)行負載平衡。重要的是,在此操作模 式下,散列引擎128不用于轉(zhuǎn)移連接以執(zhí)行故障轉(zhuǎn)移或故障恢復(fù)。因此,散列引擎128 可為連接上的傳輸業(yè)務(wù)選擇NIC,且可隨后修改所述選擇以對傳輸業(yè)務(wù)進行負載平衡, 但通過操作系統(tǒng)所選擇的NIC來處理用于連接的接收業(yè)務(wù)。同樣,用于連接的接收業(yè)務(wù) 和傳輸業(yè)務(wù)可利用不同的NIC,除非所述連接被卸載,所述卸載會導(dǎo)致由操作系統(tǒng)選擇 的NIC處理用于被卸載的連接的接收業(yè)務(wù)和傳輸業(yè)務(wù),如下文更詳細地描述。
在第三操作模式下,散列引擎128用于轉(zhuǎn)移連接以在不依賴于交換機的網(wǎng)絡(luò)環(huán)境下 執(zhí)行故障轉(zhuǎn)移和故障恢復(fù),但不執(zhí)行負載平衡。由于在此實施例中,散列引擎128不轉(zhuǎn) 移連接以執(zhí)行負載平衡,所以由操作系統(tǒng)122選擇用來在所述連接上傳輸業(yè)務(wù)和接收業(yè) 務(wù)的NIC被維持。另外,LBFO模塊126可引導(dǎo)散列引擎128在NIC出現(xiàn)故障或變得不 可靠時對網(wǎng)絡(luò)業(yè)務(wù)進行故障轉(zhuǎn)移,并且引導(dǎo)散列引擎128在NIC回到完全起作用的狀態(tài) 時對業(yè)務(wù)進行故障恢復(fù)。
在第四操作模式下,散列引擎128用于轉(zhuǎn)移連接以在依賴于交換機的網(wǎng)絡(luò)環(huán)境(即, 將計算裝置100的NIC耦合到外部網(wǎng)絡(luò)的交換機在802.3ad模式下操作的網(wǎng)絡(luò)環(huán)境)下 執(zhí)行傳輸業(yè)務(wù)而不是接收業(yè)務(wù)的負載平衡和故障轉(zhuǎn)移/故障恢復(fù)。重要的是,在依賴于交 換機的網(wǎng)絡(luò)環(huán)境下,交換機選擇計算裝置100中的哪一 NIC接收用于連接的業(yè)務(wù)。因此, 散列引擎128不執(zhí)行接收業(yè)務(wù)的負載平衡或故障轉(zhuǎn)移/故障恢復(fù),但散列引擎128可對傳 輸業(yè)務(wù)進行負載平衡,且LBFO模塊126可引導(dǎo)散列引擎128對傳輸業(yè)務(wù)進行故障轉(zhuǎn)移 /故障恢復(fù)。然而,同樣,如果網(wǎng)絡(luò)連接被卸載在被交換機選擇用來接收用于連接的業(yè)務(wù) 的NIC上,那么散列引擎128選擇同一 NIC來傳輸用于所述連接的業(yè)務(wù),如下文進一 步詳細描述。
圖2說明根據(jù)本發(fā)明一個實施例的用于基于向散列函數(shù)提供的參數(shù)而從散列表中選
擇MAC地址的方法步驟200的流程圖。盡管參考計算裝置IOO來描述所述方法,但所 屬領(lǐng)域的技術(shù)人員將了解,經(jīng)配置而以任何次序執(zhí)行所述方法步驟的任何系統(tǒng)都在本發(fā) 明的范圍內(nèi)。
如圖所示,用于從散列引擎128中的散列表中選擇MAC地址的方法開始于步驟202, 其中所述散列表內(nèi)的散列函數(shù)根據(jù)由所述散列函數(shù)接收到的參數(shù)來確定散列表索引。由 于用于創(chuàng)建和使用散列函數(shù)以基于向散列函數(shù)提供的參數(shù)來為所述散列表編索引的方 法是所屬領(lǐng)域的技術(shù)人員眾所周知的,所以本文將不會論述這些方法。應(yīng)注意,傳輸散 列函數(shù)接收到的參數(shù)(其作用是為傳輸散列表138編索引)可能不同于接收散列函數(shù)接 收到的參數(shù)(其作用是為接收散列表140編索引)。在本發(fā)明的一個實施例中,接收散 列函數(shù)接收遠程計算裝置的IP地址,作為用于為接收散列表140編索引的參數(shù)。另外, 如果在聯(lián)網(wǎng)環(huán)境下利用VLAN技術(shù),那么傳輸散列函數(shù)接收遠程計算裝置的IP地址, 用于遠程計算裝置的TCP端口、用于計算裝置100的TCP端口以及VLANID,作為用 于為傳輸散列表138編索引的參數(shù)。在本發(fā)明的其它實施例中,接收散列函數(shù)和傳輸散 列函數(shù)可分別接收任何技術(shù)上可行的用于為接收散列表140和傳輸散列表138編索引的 參數(shù)。
在步驟204中,散列引擎128讀取對應(yīng)于在步驟202中識別出的散列表索引的散列 表條目。在步驟206中,散列引擎128確定在步驟204中讀取的散列表條目是否有效。 如果在步驟206中散列表條目有效,那么方法繼續(xù)到步驟208,其中散列引擎128選擇 存儲在被索引的散列表條目中的MAC地址。在步驟216中,散列引擎128將所選的MAC 地址返回到LBFO模塊126,且所述方法終止。
如果在步驟206中,在步驟204中讀取的散列表條目無效,那么所述方法繼續(xù)到步 驟210,其中散列引擎128識別適合傳送網(wǎng)絡(luò)業(yè)務(wù)的NIC。在一個實施例中,當NIC的 利用率(作為所述NIC的傳輸能力或接收能力的百分比)低于計算裝置100中的其它 NIC的利用率時,認為所述NIC適合傳送網(wǎng)絡(luò)業(yè)務(wù)。在另一實施例中,當NIC的出錯率 低于計算裝置100中的其它NIC的出錯率時,認為所述NIC適合傳送網(wǎng)絡(luò)業(yè)務(wù)。在又 一實施例中,NIC的利用率和出錯率的經(jīng)加權(quán)的組合(相對于計算裝置100中的其它 NIC的利用率和出錯率的經(jīng)加權(quán)的組合)可用來確定NIC是否適合傳送網(wǎng)絡(luò)業(yè)務(wù)。在步 驟212中,散列引擎128選擇在步驟210中識別的合適的NIC的MAC地址。在步驟214 中,散列引擎128將所選的MAC地址存儲在對應(yīng)于在步驟202中識別的散列表索引的 散列表條目中。
圖3A和圖3B說明根據(jù)本發(fā)明一個實施例的用于將連接轉(zhuǎn)移到被散列引擎128選擇
用來接收網(wǎng)絡(luò)業(yè)務(wù)的NIC的方法步驟3 00的流程圖。盡管參考計算裝置10 0描述了所述 方法,但所屬領(lǐng)域的技術(shù)人員將了解,經(jīng)配置而以任何次序執(zhí)行所述方法步驟的任何系 統(tǒng)都在本發(fā)明的范圍內(nèi)。
如圖所示,所述用于轉(zhuǎn)移連接的方法開始于步驟302,其中操作系統(tǒng)122收聽來自 遠程計算裝置(未圖示)的ARP請求包。當遠程計算裝置啟動連接以將數(shù)據(jù)傳輸?shù)接?算裝置100時,遠程計算裝置通過向耦合到本地網(wǎng)絡(luò)的計算裝置發(fā)送包含計算裝置100 的IP地址的ARP請求包,來請求計算裝置100的MAC地址。計算裝置100通過發(fā)送 包含計算裝置100的MAC地址的ARP響應(yīng)包來響應(yīng)ARP請求包。在接收到ARP響應(yīng) 包并對其進行解碼之后,遠程計算裝置立即可使用從ARP響應(yīng)包解碼的MAC地址來向 本地計算裝置100傳輸包。由于所述用于交換ARP請求包與ARP響應(yīng)包的方法是所屬 領(lǐng)域的技術(shù)人員眾所周知的,所以本文將不會論述這些方法。在步驟304中,操作系統(tǒng) 122確定在步驟302中是否接收到ARP請求包。如果操作系統(tǒng)122發(fā)現(xiàn)沒有接收到ARP 請求包,那么方法返回到步驟302,其中操作系統(tǒng)122繼續(xù)收聽ARP請求包。
然而,如果在步驟304中,操作系統(tǒng)122發(fā)現(xiàn)接收到了 ARP請求包,那么方法繼 續(xù)到步驟306到310,其中操作系統(tǒng)122響應(yīng)于接收到ARP請求包而產(chǎn)生ARP響應(yīng)包。 在步驟306中,操作系統(tǒng)122識別將通過其而接收用于連接的業(yè)務(wù)的NIC。僅出于論述 的目的,假定操作系統(tǒng)122選擇NIC IIO作為用于接收業(yè)務(wù)的NIC。在步驟308中,操 作系統(tǒng)122產(chǎn)生ARP響應(yīng)包,其包含NIC 110的MAC地址。在步驟310中,操作系統(tǒng) 122向NIC 110發(fā)送ARP響應(yīng)包。
在步驟312中,LBFO模塊126截取從操作系統(tǒng)122發(fā)送到NIC 110的ARP響應(yīng)包。 而且,LBFO模塊126經(jīng)配置以截取從操作系統(tǒng)122發(fā)送到由計算裝置100中的操作系 統(tǒng)122選擇的NIC的ARP響應(yīng)包,且修改這些ARP響應(yīng)包的MAC地址。如下文所陳 述,修改ARP響應(yīng)包以反映由散列引擎128所選擇的NIC的MAC地址允許LBFO模 塊126 (而不是操作系統(tǒng)122)控制哪一NIC接收來自遠程計算裝置的包。因此,并入 到ARP響應(yīng)包中的由散列引擎128作出的智能NIC選擇導(dǎo)致在由LBFO模塊126選擇 的NIC而不是在另一較不有利的NIC上接收對應(yīng)的連接。
在步驟314中,LBFO模塊126將截取的ARP響應(yīng)包解碼成多個組成部分,其中包 含ARP響應(yīng)包所要送交到的遠程計算裝置的IP地址。在步驟315中,LBFO模塊126 確定與ARP響應(yīng)包有關(guān)的連接是否存在且已經(jīng)被卸載到駐存在接收NIC上的硬件卸載 引擎。如果LBFO模塊126發(fā)現(xiàn)所述連接不存在,或所述連接存在但沒有卸載到駐存在 接收NIC上的硬件卸載引擎,那么所述方法繼續(xù)到步驟316,其中散列引擎128選擇
MAC地址。此選擇基于LBFO模塊126將遠程計算裝置的IP地址作為參數(shù)傳遞到散列 引擎128,如先前上文在圖2中所描述。
在步驟318中,LBFO模塊126用選定的MAC地址來代替經(jīng)解碼的ARP響應(yīng)包屮 由操作系統(tǒng)122選擇的MAC地址。在步驟320中,LBFO模塊126對選定的MAC地址 和經(jīng)解碼的ARP響應(yīng)包的其余組成部分進行編碼,以形成ARP響應(yīng)包。在步驟322中, LBFO模塊將ARP響應(yīng)包傳輸?shù)竭h程計算裝置,且所述方法終止。在一個實施例中,通 過對應(yīng)于選定MAC地址的NIC來傳輸ARP響應(yīng)包。
現(xiàn)返回到步驟315,如果LBFO模塊126發(fā)現(xiàn)與被截取的ARP響應(yīng)包有關(guān)的連接存 在且已經(jīng)被卸載到駐存在接收NIC上的硬件卸載引擎,那么所述方法繼續(xù)到步驟317。 在步驟317中,散列引擎128在繼續(xù)進行到修改ARP響應(yīng)包、對所述包進行編碼且傳 輸所述包(如先前上文在步驟318到322中所描述)之前,選擇接收NIC的MAC地址。
圖4A和圖4B說明根據(jù)本發(fā)明一個實施例的用于將連接轉(zhuǎn)移到由散列引擎128選擇 用來傳輸網(wǎng)絡(luò)業(yè)務(wù)的NIC的方法步驟400的流程圖。盡管參考計算裝置100描述所述方 法,但所屬領(lǐng)域的技術(shù)人員將了解,經(jīng)配置以用任何次序執(zhí)行所述方法步驟的任何系統(tǒng) 都在本發(fā)明的范圍內(nèi)。
如圖所述,所述用于轉(zhuǎn)移連接的方法開始于步驟402,其中操作系統(tǒng)122創(chuàng)建傳輸 包,其中包含由操作系統(tǒng)122選擇的NIC的MAC地址。舉例來說,應(yīng)用程序可請求操 作系統(tǒng)122創(chuàng)建傳輸包,作為計算裝置100與遠程計算裝置(未圖示)之間正在進行的 通信的一部分。僅出于論述的目的,假定操作系統(tǒng)122選擇NIC IIO來將傳輸包發(fā)送到 遠程計算裝置。
在步驟404中,操作系統(tǒng)122將在步驟402中創(chuàng)建的傳輸包發(fā)送到NIC 110。在步 驟406中,LBFO模塊126截取從操作系統(tǒng)122發(fā)送到NIC 110的傳輸包。如本文先前 所論述,LBFO模塊126經(jīng)配置以截取從操作系統(tǒng)122發(fā)送到由計算裝置100中的操作 系統(tǒng)122選擇的NIC的傳輸包,且修改被截取的傳輸包的MAC地址。同樣,修改傳輸 包以反映由散列引擎128選擇的NIC的MAC地址允許LBFO模塊126 (而不是操作系 統(tǒng)122)控制哪一NIC發(fā)送來自遠程計算裝置的傳輸包。因此,由散列引擎128進行的 智能NIC選擇導(dǎo)致在由LBFO模塊126選擇的NIC上而不是在另一較不有利的NIC上 傳輸包。
在步驟408中,LBFO模塊126對來自步驟406的傳輸包進行解碼,以識別傳輸包 的一個或一個以上TCP/IP參數(shù)。在步驟410中,LBFO模塊126確定對應(yīng)于所述傳輸包 的連接是否已經(jīng)卸載到駐存在接收NIC上的硬件卸載引擎。同樣,如果連接已經(jīng)被卸載
到駐存在接收NIC上的硬件卸載引擎,那么用于所述連接的包有利地從駐存在接收NIC 上的硬件卸載引擎而不是從不同NIC上的軟件傳輸。因此,如果對應(yīng)于傳輸包的連接已 經(jīng)被卸載到駐存在接收NIC上的硬件卸載引擎,那么在步驟412屮,散列引擎128選擇 接收NIC的MAC地址作為傳輸MAC地址。
在步驟416中,LBFO模塊126用傳輸MAC地址來代替經(jīng)解碼的源MAC地址,以 形成經(jīng)修改的經(jīng)解碼包。在步驟418中,LBFO模塊126將經(jīng)修改的經(jīng)解碼包編碼成傳 輸包。在步驟420中,LBFO模塊126通過對應(yīng)于傳輸MAC地址的NIC將傳輸包傳送 到遠程計算裝置。
現(xiàn)返回到步驟410,如果對應(yīng)于傳輸包的連接尚未被卸載到駐存在接收NIC上的硬 件卸載引擎,那么方法繼續(xù)到步驟414。在步驟414中,散列引擎128使用在步驟408 中從傳輸包解碼的TCP/IP參數(shù)來從傳輸散列表138中選擇傳輸MAC地址,如上文在圖 2中所述。所述方法接著繼續(xù)進行到步驟416到420,如上文所述。
圖5說明根據(jù)本發(fā)明一個實施例的用于將現(xiàn)存連接卸載到由散列引擎128選擇的 NIC的方法步驟500的流程圖。盡管參考計算裝置100來描述所述方法,但所屬領(lǐng)域的 技術(shù)人員將了解,經(jīng)配置以用任何次序執(zhí)行所述方法步驟的任何系統(tǒng)都在本發(fā)明的范圍 內(nèi)。
如圖所示,所述用于卸載現(xiàn)存連接的方法開始于步驟502,其中軟件驅(qū)動器124啟 動卸載現(xiàn)存連接的操作。軟件驅(qū)動器124可在操作系統(tǒng)122的請求下或基于由軟件驅(qū)動 器124執(zhí)行的某些處理操作而啟動卸載操作。軟件驅(qū)動器124可(例如)確定現(xiàn)存連接 是將由硬件卸載引擎來較好處理的高業(yè)務(wù)量連接。
在步驟504中,LBFO模塊126詢問散列引擎128以選擇新的NIC來接收與所述連 接相關(guān)聯(lián)的網(wǎng)絡(luò)業(yè)務(wù)。在步驟506中,散列引擎128使用接收散列表140來確定應(yīng)選擇 計算裝置100內(nèi)的哪一 NIC和硬件卸載引擎來接收與所述連接相關(guān)聯(lián)的網(wǎng)絡(luò)業(yè)務(wù)。選定 的NIC和硬件卸載引擎可(例如)正運載最小平均負載、具有最小數(shù)目的被卸載連接, 或可連接到最可靠的物理鏈路。在步驟508中,LBFO模塊126將接收NIC卸載到選定 NIC和硬件卸載引擎。
圖6說明根據(jù)本發(fā)明一個實施例的用于使用虛擬返回因特網(wǎng)協(xié)議地址來執(zhí)行地址解 析協(xié)議(ARP)請求的方法步驟600的流程圖。盡管參考計算裝置IOO來描述所述方法, 但所屬領(lǐng)域的技術(shù)人員將了解,經(jīng)配置以用任何次序執(zhí)行所述方法步驟的任何系統(tǒng)都在 本發(fā)明的范圍內(nèi)。
如圖所示,所述用于執(zhí)行地址解析協(xié)議請求的方法開始于步驟602,其中操作系統(tǒng)
122創(chuàng)建ARP請求包,其包含由操作系統(tǒng)122選擇用來接收與所建立連接和計算裝置 100的IP地址相關(guān)聯(lián)的網(wǎng)絡(luò)業(yè)務(wù)的NIC的MAC地址。可手動地或通過自動化技術(shù)(例 如工業(yè)標準動態(tài)主機配置協(xié)議(DHCP))將IP地址指配給計算裝置100。 MAC地址可 對應(yīng)于由操作系統(tǒng)122認出的默認或首要NIC。在步驟604中,操作系統(tǒng)122將ARP 請求包發(fā)送到選定NIC。
在步驟606中,LBFO模塊126在ARP請求包被提供給選定NIC以供傳輸之前截 取所述ARP請求包。在步驟608中,LBFO模塊126用由LBFO模塊126選擇的虛擬IP 地址來代替計算裝置100的IP地址,從而產(chǎn)生經(jīng)修改的ARP請求包。所述虛擬IP地址 應(yīng)為網(wǎng)絡(luò)內(nèi)未經(jīng)映射的IP地址。舉例來說,在具有在從10丄1.0到10丄1.255的范圍內(nèi) 的IP地址的網(wǎng)絡(luò)中, 一個IP地址(例如10丄1.255)可被網(wǎng)絡(luò)管理員保留作為虛擬IP 地址。在此實例中,接收ARP請求包的裝置可用新的MAC地址來更新用于虛擬IP地 址的本地ARP高速緩沖存儲器條目,從而避免破壞用于計算裝置IOO的IP地址的高速 緩沖存儲器條目。可通過任何技術(shù)上可行的構(gòu)件(包含手動配置)來建立虛擬IP地址 以供LBFO模塊126使用。在步驟610中,LBFO模塊126通過選定NIC將經(jīng)修改的 ARP請求包廣播給與計算裝置IOO附接到同一個網(wǎng)絡(luò)的一個或一個以上遠程計算裝置。
圖6的方法允許LBFO模塊126在不涉及操作系統(tǒng)122的情況下管理多個NIC上的 ARP請求過程。另外,所述方法可用于避免破壞由接收經(jīng)修改ARP請求包的遠程計算 裝置維持的ARP高速緩沖存儲器。
所揭示的系統(tǒng)和方法的一個優(yōu)勢是它們允許使用散列引擎來在計算裝置中的多個 NIC上智能地轉(zhuǎn)移網(wǎng)絡(luò)連接??墒褂眠B接轉(zhuǎn)移來執(zhí)行負載平衡、故障轉(zhuǎn)移或故障恢復(fù)功 能。以此方式,可能更容易避免通過過載或不可靠的NIC來運行網(wǎng)絡(luò)連接,從而改進總 體網(wǎng)絡(luò)性能。另一優(yōu)勢是使用散列引擎來管理連接對于相應(yīng)NIC的連接指配允許有效地 確定哪一 NIC正處理每個連接,同時避免管理連接狀態(tài)的復(fù)雜且計算上昂貴的過程。
雖然前述內(nèi)容是針對本發(fā)明的實施例,但可在不脫離本發(fā)明的基本范圍的情況下, 設(shè)計本發(fā)明的其它和進一步實施例。舉例來說,可在硬件或軟件中或在硬件與軟件的組 合中實施本發(fā)明的方面。本發(fā)明的一個實施例可實施為用于與計算機系統(tǒng)一起使用的程 序產(chǎn)品。所述程序產(chǎn)品的程序定義所述實施例(包含本文所述的方法)的功能,且可包 含在多種計算機可讀存儲媒體上。說明性計算機可讀存儲媒體包含(但不限于)(i)上 面可永久存儲有信息的非可寫存儲媒體(例如,計算機內(nèi)的只讀存儲器裝置,例如可由 CD-ROM驅(qū)動器讀取的CD-ROM盤、快閃存儲器、ROM芯片或任何類型的固態(tài)非易失 性半導(dǎo)體存儲器);和(ii)上面存儲有可更改的信息的可寫存儲媒體(例如,磁盤驅(qū)動
器內(nèi)的軟盤,或硬盤驅(qū)動器,或任何類型的固態(tài)隨機存取半導(dǎo)體存儲器)。此類計算機 可讀存儲媒體在運載指導(dǎo)本發(fā)明的功能的計算機可讀指令時是本發(fā)明的實施例。因此, 本發(fā)明的范兩由所附權(quán)利要求書來確定。
權(quán)利要求
1.一種用于將網(wǎng)絡(luò)連接智能地轉(zhuǎn)移到網(wǎng)絡(luò)接口卡(NIC)以用于接收網(wǎng)絡(luò)業(yè)務(wù)的方法,所述方法包括截取操作系統(tǒng)產(chǎn)生的地址解析協(xié)議(ARP)響應(yīng)包,其中所述ARP響應(yīng)包包含與第一NIC相關(guān)聯(lián)的第一媒體接入控制(MAC)地址,所述第一NIC已由所述操作系統(tǒng)選擇用來接收與所述網(wǎng)絡(luò)連接有關(guān)的網(wǎng)絡(luò)業(yè)務(wù);對所述ARP響應(yīng)包進行解碼;通過向散列函數(shù)提供所述經(jīng)解碼的ARP響應(yīng)包中包含的一個或一個以上網(wǎng)絡(luò)參數(shù)來產(chǎn)生與第二NIC相關(guān)聯(lián)的第二MAC地址;以及用所述第二MAC地址代替所述ARP響應(yīng)包中的所述第一MAC地址。
2. 根據(jù)權(quán)利要求1所述的方法,其進一步包括以下步驟對包含所述第二MAC地址 的所述ARP響應(yīng)包進行編碼,以及將所述經(jīng)編碼的ARP響應(yīng)包傳輸?shù)竭h程計算裝 置。
3. 根據(jù)權(quán)利要求2所述的方法,其中所述第二 NIC而不是所述第一 NIC接收與所述 網(wǎng)絡(luò)連接有關(guān)的網(wǎng)絡(luò)業(yè)務(wù)。
4. 一種計算機可讀媒體,其所包含的指令在被執(zhí)行時致使處理器通過執(zhí)行以下步驟而 將網(wǎng)絡(luò)連接智能地轉(zhuǎn)移到網(wǎng)絡(luò)接口卡(NIC)以用于接收網(wǎng)絡(luò)業(yè)務(wù)截取操作系統(tǒng)產(chǎn)生的地址解析協(xié)議(ARP)響應(yīng)包,其中所述ARP響應(yīng)包包含 與第一NIC相關(guān)聯(lián)的第一媒體接入控制(MAC)地址,所述第一NIC已由所述操 作系統(tǒng)選擇用來接收與所述網(wǎng)絡(luò)連接有關(guān)的網(wǎng)絡(luò)業(yè)務(wù);對所述ARP響應(yīng)包進行解碼;通過向散列函數(shù)提供所述經(jīng)解碼的ARP響應(yīng)包中包含的一個或一個以上網(wǎng)絡(luò)參 數(shù)來產(chǎn)生與第二NIC相關(guān)聯(lián)的第二MAC地址;以及用所述第二 MAC地址代替所述ARP響應(yīng)包中的所述第一 MAC地址。
5. 根據(jù)權(quán)利要求4所述的計算機可讀媒體,其進一步包括以下步驟對包含所述第二 MAC地址的所述ARP響應(yīng)包進行編碼,以及將所述經(jīng)編碼的ARP響應(yīng)包傳輸?shù)?遠程計算裝置。
6. —種計算裝置,其經(jīng)配置以將網(wǎng)絡(luò)連接智能地轉(zhuǎn)移到網(wǎng)絡(luò)接口卡(NIC)以用于接 收網(wǎng)絡(luò)業(yè)務(wù),所述計算裝置包括處理器;操作系統(tǒng),其經(jīng)配置以響應(yīng)于接收到ARP請求包而產(chǎn)生地址解析協(xié)議(ARP) 響應(yīng)包,其中所述ARP響應(yīng)包包含與已由所述操作系統(tǒng)選擇用來接收與所述網(wǎng)絡(luò) 連接有關(guān)的網(wǎng)絡(luò)業(yè)務(wù)的第一NIC相關(guān)聯(lián)的第一媒體接入控制(MAC)地址;以及 負載平衡故障轉(zhuǎn)移(LBFO)模塊,其經(jīng)配置以-截取所述操作系統(tǒng)產(chǎn)生的所述ARP響應(yīng)包; 對所述ARP響應(yīng)包進行解碼;通過向散列函數(shù)提供所述經(jīng)解碼的ARP響應(yīng)包中包含的一個或一個以上網(wǎng)絡(luò) 參數(shù)來產(chǎn)生與第二NIC相關(guān)聯(lián)的第二MAC地址;以及用所述第二 MAC地址代替所述ARP響應(yīng)包中的所述第一 MAC地址。
7. 根據(jù)權(quán)利要求6所述的計算裝置,其中所述LBFO模塊進一步經(jīng)配置以對包含所述 第二 MAC地址的所述ARP響應(yīng)包進行編碼,并將所述經(jīng)編碼的ARP響應(yīng)包傳輸 到遠程計算裝置。
8. 根據(jù)權(quán)利要求7所述的計算裝置,其中所述被提供到所述散列函數(shù)的一個或一個以 上網(wǎng)絡(luò)參數(shù)包含所述遠程計算裝置的因特網(wǎng)協(xié)議(IP)地址。
9. 根據(jù)權(quán)利要求6所述的計算裝置,其中所述LBFO模塊包含散列引擎,所述散列引 擎經(jīng)配置以基于由所述LBFO模塊提供的所述一個或一個以上網(wǎng)絡(luò)參數(shù)來確定散 列表索引,并讀取對應(yīng)于所述散列表索引的散列表條目。
10. 根據(jù)權(quán)利要求9所述的計算裝置,其中散列引擎進一步經(jīng)配置以確定所述散列表條 目有效,并從所述有效的散列表條目中選擇所述第二 MAC地址。
全文摘要
一種位于網(wǎng)絡(luò)裝置驅(qū)動器中的散列引擎保存關(guān)于本地計算裝置內(nèi)每個網(wǎng)絡(luò)接口卡(“NIC”)的利用率和出錯率的數(shù)據(jù)。根據(jù)此數(shù)據(jù),所述散列引擎基于從軟件驅(qū)動器程序提供的各種聯(lián)網(wǎng)參數(shù)而智能地選擇傳輸NIC和接收NIC。從本地計算裝置中的操作系統(tǒng)發(fā)送到遠程計算裝置的傳輸包被截取、修改并重新引導(dǎo)到由所述散列引擎選擇的傳輸NIC,以用于傳輸?shù)竭h程計算裝置。類似地,由所述操作系統(tǒng)響應(yīng)于ARP請求包而發(fā)送的地址解析協(xié)議(“ARP”)響應(yīng)包被截取、修改并重新引導(dǎo)到由所述散列引擎選擇的接收NIC,以用于傳輸。通過以此方式選擇接收NIC和傳輸NIC,所述散列引擎能夠智能地對所述本地計算裝置中的傳輸和接收業(yè)務(wù)進行負載平衡,從而相對于現(xiàn)有技術(shù)來改進總體網(wǎng)絡(luò)性能。
文檔編號H04L29/06GK101350817SQ20081009889
公開日2009年1月21日 申請日期2008年5月19日 優(yōu)先權(quán)日2007年5月18日
發(fā)明者薩米爾·南達, 諾曼·K·陳, 赫馬馬利尼·馬尼克瓦薩甘, 阿亞茲·阿卜杜拉, 阿南德·拉賈戈帕蘭, 阿舒托什·K·杰哈 申請人:輝達公司