專利名稱:流相容的動態(tài)負荷平衡的制作方法
流相容的動態(tài)負荷平衡
背景技術:
在日益增長的網絡世界,越來越多的諸如數據、聲音以及視頻的通信量,通過公共
網絡或專用網絡發(fā)送。網絡裝置通常執(zhí)行一些類型的負荷平衡以提高網絡的性能。在路由 器中,例如,轉發(fā)決定可以包括查找轉發(fā)表以識別邏輯電路輸出端口。邏輯輸出端口可以對 應于單一物理輸出端口,或一組物理輸出端口 。邏輯端口與物理端口映射表可以用來將邏 輯輸出端口映射到邏輯輸出端口對應的物理輸出端口 。 用在網絡裝置中的負荷平衡技術包括對所接收的包執(zhí)行散列以識別對應于發(fā)送
所接收包的邏輯輸出端口的物理輸出端口之一。這種靜態(tài)散列所接收的包至物理輸出端口
保證了與同一流相關聯(lián)的包是從相同物理輸出端口發(fā)送的,因此,不會變得混亂。 然而,流的特性可以隨時間變化。因此,輸出端口可能隨著通信量被淹沒,從而使
應實現(xiàn)散列的負荷平衡失敗。
發(fā)明內容
根據一個實施例,一種由裝置執(zhí)行的方法,可以包括提供流表;接收數據單元;確 定與數據單元相關聯(lián)的數據流;確定流表是否包括對應于該數據流的項;確定該裝置的一 組輸出端口的當前使用率;當流表沒有存儲對應于該數據流的項時,基于該組輸出端口的 當前使用率,從該組輸出端口中為該數據流選擇一個輸出端口 ;以及在將所述數據單元存 儲在與所選擇的輸出端口相關聯(lián)的隊列中。 根據另一實施例,一種裝置可以包括一組輸出端口,以及存儲包括多個項的流表 的存儲器,其中每個項都可以對應于數據流集合中不同的一個數據流。該裝置還可以包括 邏輯電路,該邏輯電路用于接收數據單元、確定與數據單元相關聯(lián)的數據流、確定流表是否 包括對應于數據流的項、在流表包括對應于數據流的項時,確定在接收數據單元和接收數 據流中的最后的數據單元之間是否至少已經經過了閾值時間量、當接收數據單元和接收數 據流中的最后的數據單元之間至少已經經過了閾值時間量時,確定該組的輸出端口的當前 使用率、基于該組輸出端口的當前使用率從該組輸出端口中為該數據流選擇一個輸出端 口 、以及使用關于所選輸出端口的信息來更改流表中的項。 根據另一實施例,一種裝置可以包括一組輸出端口和存儲包括多個項的流表的存 儲器,其中,每個項都對應于數據流集合中不同的一個數據流并標識輸出端口之一。該裝 置還可以包括邏輯電路,該邏輯電路用于接收數據單元、確定與該數據單元相關聯(lián)的數據 流、確定該流表是否包括對應于該數據流的項、當流表包括對應于該數據流的項時,從該流 表中識別用于該數據流的輸出端口組中的一個輸出端口、確定所識別的輸出端口不可用、 確定當所識別的輸出端口不可用時輸出端口組的當前使用率、基于輸出端口組的當前使用 率,為該數據流選擇輸出端口組中的一個輸出端口 、以及使用關于所選擇的輸出端口的信 息修改流表中的項。 根據另一實施例,一種裝置可以包括一組輸出端口。該裝置還包括用于將流表存 儲在存儲器中的裝置,該流表包括多個項,每個項都對應于數據流集合中的一個不同數據
5流;用于分析流表中的多個項中的特定項以確定數多個據流中相應的一個數據流中的最后 的數據單元何時被接收的裝置,其中特定項標識該組輸出端口中的特定輸出端口 ;用于自 最后的數據單元被接收之后已經至少經過了閾值時間量時確定該組輸出端口的當前使用 率的裝置;用于基于該組輸出端口的當前使用率,確定該特定輸出端口相對于該組輸出端 口中的其他輸出端口被過度使用的裝置;用于為多個數據流中相應的一個數據流選擇該組 輸出端口中的其他輸出端口的裝置,其中該多個輸出端口中的另一輸出端口相對于該特定 輸出端口較少被使用;以及使用關于該組輸出端口中的所述另一輸出端口的信息修改該特 定項的裝置。
附圖結合在此并構成本說明書的一部分與說明書一起示出了在此描述的一個或 多個實施例,并解釋了這些實施例。在附圖中 圖1是示例性網絡的示意圖,在該網絡中實現(xiàn)了在此描述的系統(tǒng)和方法;
圖2是示出了圖1的網絡裝置的示例性部件的框圖;
圖3是示出了圖2的接口的示例性部件的框圖; 圖4是示出了圖3的流管理和結構隊列邏輯電路的示例性功能部件的框圖;
圖5是圖4的流表的示例性字段的示意圖; 圖6和圖7示出了用于處理數據單元的示例性處理的流程圖;
圖8示出了用于創(chuàng)建或修改流表項的示例性處理的流程圖;以及
圖9是示出了在此描述的原理的實例的框圖。
具體實施例方式
下面的具體描述參考附圖。不同附圖中的相同參考標號表示相同或類似元件。并 且,下面的具體描述不局限于本發(fā)明。相反,本發(fā)明的范圍由所附權利要求和等同物限定。
如在此所述的,網絡裝置可以通過基于輸出端口的當前使用率為數據流的數據單 元動態(tài)分配和/或重新分配輸出端口來執(zhí)行通過其輸出端口的負荷平衡。在此使用的術語 "數據單元"可以表示包、數據包、或單元;包、數據包或單元的片段;或數據的其他類型或排 列。 示例性網絡 圖l是示例性網絡100的示意圖,在該網絡中可以實現(xiàn)在此描述的系統(tǒng)和方法。網 絡100可以包括任何類型的網絡,例如互聯(lián)網、ad hoc網絡、局域網(LAN)、廣域網(WAN)、 城域網(MAN)、電話網絡(例如無線通信網絡或公共交換電話網絡(PSTN))、或多個網絡的組合。 如圖所示,網絡100可以包括N個網絡裝置102-1至102-N(本文中統(tǒng)稱為"網絡 裝置102"或單獨地稱為"網絡裝置102" ) (N > 1)。網絡裝置102-1至102-N中每個網絡 裝置都包括交換機、路由器、服務器或其他類型的裝置。盡管網絡裝置102-1至102-N可以 被實施為不同類型的裝置,在下面的段落中,網絡裝置102-1至102-N以路由器來描述。利 用實例示出了互聯(lián)網絡裝置102-1至102-N的鏈路。網絡裝置102-1至102-N可以通過不 同于圖1中所示的鏈路互連。
圖2是示出了網絡裝置102的示例性部件的框圖。如圖2所示,網絡裝置102可 以包括系統(tǒng)控制模塊210、交換機結構220以及一組接口 230。在另一實施例中,網絡裝置 102可以包括比圖2中所示的部件相比更少、更多、不同或不同安排的部件。
系統(tǒng)控制模塊210可以包括一個或多個處理器、微處理器、特定用途集成電路 (ASIC)、現(xiàn)場可編程門陣列(FPGA)、和/或為連網和通信優(yōu)化的處理邏輯電路。系統(tǒng)控制模 塊210可以執(zhí)行網絡裝置102的高級管理功能。例如,系統(tǒng)控制模塊210可以與連接到網 絡裝置102的其他網絡或系統(tǒng)進行通信以交換關于網絡拓撲的信息。在一些實施例中,系 統(tǒng)控制模塊210可以包括路由引擎,用于基于網絡拓撲信息來創(chuàng)建路由表、基于路由表來 創(chuàng)建轉發(fā)表、以及發(fā)送這些表至接口 230用于數據單元路由。系統(tǒng)控制模塊210還可以包 括靜態(tài)存儲器(例如只讀存儲器(ROM))、動態(tài)存儲器(例如隨機存取存儲器(RAM))、片上 高速緩沖存儲器、和/或用于存儲數據和/或機器可讀指令的閃存。 交換機結構220可以包括一個或多個交換平面以便于接口 230和/或系統(tǒng)控制模 塊210之間的通信。在一個實施例中,每個交換平面都可以包括交叉開關元件的單級或多 級開關。交換機結構220還可以包括、或可替換地包括處理器、存儲器、和/或允許在系統(tǒng) 控制模塊210和接口 230之間進行通信的路徑。 接口 230可以包括裝置或組件,例如線卡,用于接收來自網絡鏈路(或來自其他接 口 230)的輸入數據單元以及用于發(fā)送數據單元至網絡鏈路(或至其他接口 230)。例如,接 口 230可以包括以太網接口、光學載體(OC)接口、和/或異步傳輸模式(ATM)接口。接口 230可以管理能夠接收數據單元的一組輸入端口 ,以及能夠發(fā)送數據單元的一組輸出端口 。
根據該實施例,圖2中示出的部件可以提供或多或少的功能。例如,如果網絡裝置 102執(zhí)行作為部分多協(xié)議標簽交換(MPLS)路由器的互聯(lián)網協(xié)議(IP)數據單元路由功能,則 系統(tǒng)控制模塊210可以執(zhí)行與獲取來自MPLS網絡中的其他路由器的路由信息相關聯(lián)的任 務。在這些情況下,將網絡通信量從一個接口傳送到另一接口包括基于標簽的路由,而不是 基于IP地址的路由。 圖3是示出了接口 230的示例性部件的框圖。如圖3所示,接口 230可以包括一 個或多個分組轉發(fā)引擎(PFE)310-1,. . . ,310-M(本文中統(tǒng)稱為"PFE 310"或單獨稱為"PFE 310") (M > 1)、以及一個或多個流管理和結構隊列(FFQ)邏輯電路320-1, ,320_M(本 文中統(tǒng)稱以及單獨稱為"FFQ邏輯電路320"。在其他實施例中,接口 230可以包括比圖3中 所示更少、附加的、不同、活不同安排的部件。 每個PFE 310都可以包括硬件或硬件和軟件的組合,其可以接收、存儲、處理和/ 或轉發(fā)數據單元。例如,PFE 310可以處理從輸入網絡鏈路接收到的數據單元并準備數據 單元用于在輸出網絡鏈路中發(fā)送。PFE 310可以基于數據單元的頭信息來確定轉發(fā)決定。 每個PFE 310都可以包括存儲器以幫助存儲、處理和/或轉發(fā)所接收的數據單元。PFE 310 可以發(fā)送所接收的數據單元至FFQ邏輯電路320。 為了基于所接收的數據單元來確定轉發(fā)決定,例如,PFE 310可以基于接收的數據 單元的頭中的一些字段來標識用于該接收數據單元的邏輯輸出端口。邏輯輸出端口可以對 應于一個或多個物理輸出端口 (被稱作"端口組")。較高等級的協(xié)議(例如,路由協(xié)議)能 夠確定到達特定目的地的可能的替換方式的路徑集合??梢越ㄟB接至這些路徑的物 理輸出端口的端口組。PFE 310在發(fā)送數據單元至FFQ 320時可以包括關于邏輯輸出端口的信息,例如邏輯端口號。 FFQ邏輯電路320可以包括硬件或硬件和軟件的組合,其可以接收來自PFE 310的 數據單元,以及基于與數據單元相關聯(lián)的數據流和格物理輸出端口的當前使用率來動態(tài)地 將物理輸出端口分配給該數據單元。同樣,F(xiàn)FQ邏輯電路320可以在流表中創(chuàng)建數據流的 表項,并監(jiān)控與該數據流相關的流統(tǒng)計信息。在一個實施例中,F(xiàn)FQ邏輯電路320可以使用 用于每個數據流的定時器,來跟蹤用于該數據流的數據單元的定時,以及使用用于每個數 據流的一組計數器來跟蹤該數據流的數據單元/字節(jié)計數。 圖4是示出了 FFQ邏輯電路320的示例性功能部件的框圖。如圖4所示,F(xiàn)FQ邏 輯電路320可以包括流識別邏輯電路410、流表420、邏輯端口至端口組映射表430、輸出端 口狀態(tài)表440、輸出端口識別邏輯電路450、維護邏輯電路460、以及結構接口 470。在另一 實施例中,F(xiàn)FQ邏輯電路320可以包括與圖4中示出的這些部件相比更少、更多、不同或不 同安排的部件。例如,在一些實施例中,圖4的一個或多個功能部件可以位于FFQ邏輯電路 320之外。同樣,或者可替換地,所描述的由功能部件之一執(zhí)行的多個功能之一可以由功能 部件中的另一部件執(zhí)行。 流識別邏輯電路410可以包括硬件或與軟件結合的硬件,其可以從PFE 310接收 數據單元,確定來自數據單元的流標識符(例如,從數據單元接收流標識符或基于在數據 單元中的信息產生流標識符),以及提供關于數據單元的信息和流標識符以創(chuàng)建和/或更 新關于流表420中的數據流的信息。流識別邏輯電路410可以識別來自數據單元的頭中的 信息的流標識符。例如,流標識符可以由數據單元頭中的信息構成,該信息與源地址、目的 地地址、源端口、目的地端口和/或協(xié)議相關。如上所解釋的,在一個實施例中,流標識符可 以被計算為數據單元頭中的信息的散列值并且可以被用來識別流表420中的項。
流識別邏輯電路410可以基于與數據單元相關的流標識符的識別,確定對應于流 標識符的項之前是否在流表420中已經被創(chuàng)建。例如,流識別邏輯電路410可以將流標識 符與流表420中的信息進行比較以確定是否存在匹配。如果沒有項存在,則在流表420中 建立相應的項。然而,如果之前已經在流表420中創(chuàng)建了相應的項(即,屬于該數據流的至 少一個先前數據單元先前已經被網絡裝置102接收),則流識別邏輯電路410可以更新相應 項中的一個或多個字段以反映最新接收的數據單元。 流表420可以在存儲裝置(例如一個或多個動態(tài)RAM (DRAM))中實現(xiàn)。流表420可 以包括多個對應于由網絡裝置102標識的數據流的項。例如,流表420中的每個項可以包括 用來標識每個數據流的流標識字段,對應于數據單元處理的信息(例如,端口或接口信息, 協(xié)議信息等)的其他相關字段,以及標識所分配的輸出端口的輸出端口字段。流表420可 以包括關于大量數據流(例如一百萬以上數據流)的信息。在一個實施例中,流表420可 以包括多達四百萬或更多不同的流項。 圖5是流表420的示例性字段的示意圖。如圖5所示,流表420可以包括用于從 數據流1至x中的每個數據流的多個流表項。這些示例性流表項可以包括流標識(ID)字 段510、層2(L2,第2層)信息字段515、層3(L3,第3層)信息字段520、層4(L4,第4層) 信息字段525、數據單元計數器字段530、字節(jié)計數器字段535、定時器字段540、以及輸出端 口字段545。 流標識字段510可以包括與特定數據流相關聯(lián)的唯一、或基本唯一的流標識符。例如,流標識符可以包括從對應于數據流的數據單元的頭中的一些信息得到的值。例如, 流標識符可以由數據單元頭中的信息構成,這些信息關于源地址、目的地址、源端口 、目的 端口、和/或協(xié)議。在一個實施例中,流標識符可以作為數據單元頭中的信息的散列值來計 算。流標識符可以提供識別并在流表420中定位數據流的有效方式。 L2信息字段515可以包括L2信息的元素,例如與數據單元相關的源介質存取控 制(MAC)地址、與數據單元相關的目的MAC地址等。L3信息字段520可以包括L3信息的元 素,例如源和目的IP (互聯(lián)網協(xié)議)地址、L3協(xié)議(例如http、 ftp)等。L4信息字段525 可以包括一個或多個L4信息的元素,例如源和目的端口信息(其通常指定與數據單元相關 的應用類型)、L4協(xié)議信息等。 數據單元計數器字段530可以包括累計和/或表示對應于數據流的在特定時間段 中已經經過接口 230的數據單元總數的信息。字節(jié)計數器字段535可以包括用于累計和/ 或表示在上述特定時間段中在數據流中已經傳輸的字節(jié)總數的信息。定時器字段540可以 包括與在數據流中接收到的數據單元有關的定時信息或時間戳。輸出端口字段545可以包 括標識分配給數據流的物理輸出端口的信息。 在一個實施例中,L2字段515可以包括源和目的MAC地址、L3字段520可以包括 源和目的IP地址和L3協(xié)議類型、以及L4字段525可以包括源和目的端口和L4協(xié)議類型。 定時器字段540、數據單元計數器字段530、以及字節(jié)計數器字段535的值可以周期地被復 位或累計以提供與特定數據流相關的總數。 返回圖4,邏輯端口至端口組映射表430可以包括將邏輯輸出端口映射到端口組 的表。例如,在邏輯端口至端口組映射表430中的項可以包括與邏輯輸出端口有關的信息 (例如邏輯輸出端口號)以及與端口組有關的信息(例如,端口組號或分配給端口組的物理 輸出端口號的集合)。 輸出端口狀態(tài)表440可以包括存儲與物理輸出端口的狀態(tài)有關的信息。例如,輸 出端口狀態(tài)表440可以用于每個物理輸出端口的項并標識輸出端口是否可用。如果連接到 輸出端口的網絡鏈接失敗,則輸出端口可以是不可用的。輸出端口狀態(tài)表440中的每個項 還可以包括關于每個物理輸出端口的平均和峰值使用率的帶寬統(tǒng)計信息。在輸出端口狀態(tài) 表440中的每個項還可以包括表示當前有多少有效流被分配給任一物理輸出端口的流統(tǒng) 計信息。當選擇作為用于給定流的邏輯端口的端口組的成員的物理端口之一時,輸出端口 狀態(tài)表440中的帶寬和流統(tǒng)計信息可以被輸出端口識別邏輯電路450查詢。
在一些情況下,輸出端口狀態(tài)表440維護與物理輸出端口的狀態(tài)有關的實時(或 接近實時)信息可能是有利的。在這些情況下,PFE 310和FFQ邏輯電路320可以在他們 之間交換信息(可能通過交換機結構220)以更新輸出端口狀態(tài)。PFE 310可以聚集信息并 將該信息傳遞到相應的FFQ邏輯電路320。在其他情況下,維護關于物理輸出端口的狀態(tài)的 實時信息可能不是必要的。在這些情況下,系統(tǒng)控制模塊210可以周期地輪詢輸出端口以 確定各輸出端口的狀態(tài)。系統(tǒng)控制模塊210然后可以更新FFQ邏輯電路320的輸出端口狀 態(tài)表440中的信息。 輸出端口識別邏輯電路450可以包括可以為對應于所接收的數據單元的數據流 選擇輸出端口的硬件或與軟件結合的硬件。輸出端口識別邏輯電路450例如可以識別分配 給端口組的各物理輸出端口 。在一個實施例中,輸出端口識別邏輯電路450可以從邏輯端
9口至端口組映射表430獲取該信息??商鎿Q地,輸出端口識別邏輯電路450可以使用例如 將端口組映射到分配給端口組的各物理輸出端口的表來獲取該信息本身。
輸出端口識別邏輯電路450可以監(jiān)控物理輸出端口的使用率。例如,輸出端口識 別邏輯電路450可以例如基于來自輸出端口狀態(tài)表440的信息來確定哪個輸出端口可用以 及哪個不可用。輸出端口識別邏輯電路450還可以基于輸出端口狀態(tài)表440中維護的輸出 端口使用率統(tǒng)計信息來確定用于目標邏輯端口的優(yōu)選物理輸出端口 。例如,輸出端口識別 邏輯電路450可以在選擇分配給流的物理端口時從多個可能物理輸出端口中選擇具有最 低使用率的輸出端口。 如果所接收的數據單元與流表420中已經存在用于其的項的數據流相關聯(lián),則輸 出端口識別邏輯電路450可以確定自從接收到用于該數據流的最后的數據單元之后的時 間量是否大于閾值(以下稱作"第一時間量")(例如,30秒)。如果已經在第一時間量中接 收到數據單元,則輸出端口識別邏輯電路450可以從流表420中的輸出端口字段545確定 用于所接收的數據單元的輸出端口。 如果在第一時間量中沒有接收到數據單元,則輸出端口識別邏輯電路450可以最 新地為與所接收的數據單元相關聯(lián)的數據流選擇輸出端口。在該種情況下,輸出端口識別 邏輯電路450可以進行新的輸出端口選擇的原因在于對于所接收的數據單元來說,相對于 在該接收的數據單元之前大于第一時間量所接收的任何數據單元幾乎沒有機會成為無序 的。 為了選擇輸出端口,輸出端口識別邏輯電路450可以考慮在與和數據流相關聯(lián)的 邏輯輸出端口相關的端口組中的物理輸出端口的當前輸出端口的使用率,并基于當前輸出 端口的使用率,例如最小使用率的輸出端口,來選擇這些物理輸出端口之一。輸出端口使用 率可以基于輸出端口的容量。換句話說,輸出端口的容量可以不同(例如,一個輸出端口可 以連接到一千兆比特鏈路,而其他輸出端口可以連接到十千兆鏈路)。因此,輸出端口使用 率可以基于輸出端口的當前使用的容量的比例,而不是僅僅基于被使用的總帶寬??商鎿Q 地,或可選地,輸出端口使用率可以基于與數據流相關的歷史數據。例如,輸出端口使用率 可以不僅考慮數據流所使用的當前帶寬,而且考慮數據流過去所使用的帶寬量。輸出端口 使用率還可以基于分配給輸出端口的有效流的數量。 在替換實施例中,輸出端口識別邏輯電路450還可以在確定當前輸出端口使用率 中考慮流控制信息。例如,以太網協(xié)議允許鏈路等級流控制,其中,輸出鏈路上的下游網絡 裝置可以發(fā)送消息以阻止上游網絡裝置在特定時間段內發(fā)送流。從各個上游網絡裝置看, 當在特定輸出端口上接收到這樣的流控制消息時,可以減少在該輸出端口上發(fā)送出去的帶 寬量。在該實施例中,輸出端口識別邏輯電路450可以在輸出端口選擇處理過程中考慮流
控制信息。 輸出端口識別邏輯電路450可以存儲標識在對應于與接收的數據單元相關聯(lián)的 數據流的流表420中的項的輸出端口字段545中所選擇的輸出端口的信息。在上述情況下, 所選擇的輸出端口與已經分配給數據流的輸出端口匹配是可能的(例如,在已經分配的輸 出端口是最小使用率的輸出端口或不是被過度使用的輸出端口時)。在該種情況下,輸出端 口識別邏輯電路450不需要更新流表420的輸出端口字段545。 如果所接收的數據單元與流表420中已經存在用于其的項的數據流無關,則輸出端口識別邏輯電路450可以為該數據流選擇輸出端口。在一個實施例中,如上所述,輸出端 口識別邏輯電路450可以基于輸出端口的當前使用率,從與數據流有關的端口組中的一組 物理輸出端口選擇輸出端口。輸出端口識別邏輯電路450可以在由用于與所接收的數據單 元有關的數據流的流識別邏輯電路410創(chuàng)建的流表420中的項的輸出端口字段545中存儲 標識所選輸出端口的信息。 維護邏輯電路460可以包括可以執(zhí)行流表420中的一個或多個維護功能的硬件、 或與軟件結合的硬件。 一種維護功能可以包括分析數據流以確定是否應該進行新的輸出 端口選擇。在一個實施例中,維護邏輯電路460可以分析定時器字段540中的信息以確定 自從用于該數據流的最后的數據單元被接收之后的時間量是否大于閾值(以下被稱作"第 二時間量")(其可以等于(或不同于)上面標識的第一時間量)。當自從最后的數據單元 被接收后的時間量大于第二時間量時,維護邏輯電路460可以為該數據流選擇新的輸出端 口。在一個實施例中,如上所述,選擇新的輸出端口可能包括維護邏輯電路460發(fā)送指令連 同任何相關信息至輸出端口識別邏輯電路450以進行輸出端口選擇。當最后的數據單元在 第二時間量中被接收到,則維護邏輯電路460可以分析其他數據流以確定自從用于數據流 的最后的數據單元被接收之后的時間量是否大于第二時間量。 另一維護功能可以涉及確定是否從流表420中去除對應于特定數據流的項。在 一個實施例中,維護邏輯電路460可以分析定時器字段540中的信息以確定自從用于特定 數據流的最后的數據單元被接收之后的時間量是否大于閾值(以下被稱為"第三時間量") (其可以大于第二時間量)。當自從最后的數據單元被接收之后的時間量大于第三時間量 時,維護邏輯電路460可以從流表420中去除該項。在一個實施例中,去除項可以簡單地對 應于使該項可以用來存儲來自新數據流的信息。當最后的數據單元在第三時間量內被接收 到時,維護邏輯電路460可以分析另一數據流以確定自從用于該數據流的最后的數據單元 被接收之后的時間量是否大于第三時間量。 結構接口 470可以包括可以提供至PFE 310和/或交換機結構220的接口的硬件 或硬件和軟件的結合。結構接口 470可以包括一個或多個接口隊列或用于臨時存儲等待從 FFQ邏輯電路320發(fā)送的數據單元的緩沖器(未示出)。在一個實施例中,結構接口 470可 以包括用于每個輸出端口的獨立隊列。此外,或可替換地,結構接口 470可以包括用于可能 分配給各數據單元的不同優(yōu)先等級的多個獨立隊列。因此,結構接口 470可以包括根據端 口和根據優(yōu)先級的多個獨立隊列。在其他實施例中,結構接口 470可以包括一些其他的隊 列安排。 結構接口 470還可以包括從隊列中選擇用于發(fā)送的數據單元的仲裁器。在一個實 施例中,該仲裁器可以使用基于數據單元優(yōu)先級和/或輸出端口可用性的公平選擇技術。 例如,仲裁器可以選擇去往可用于接收數據單元的輸出端口的最高優(yōu)先級數據單元。
示例性處理 圖6和圖7示出了用于處理數據單元的示例性處理的流程圖。圖6和圖7中示出 的處理可以由FFQ邏輯電路320或與FFQ邏輯電路320分開或結合的其他部件執(zhí)行。該處 理可以從被接收的數據單元開始(塊610)(圖6)。例如,F(xiàn)FQ邏輯電路320可以接收來自 PFE 310的數據單元和關于被分配了數據單元的邏輯電路輸出端口的信息。
與數據單元相關聯(lián)的數據流可以被識別(塊620)。例如,流識別邏輯電路410可以根據數據單元確定流標識符(例如,從數據單元讀取流標識符或根據數據單元中的信息 產生流標識符)。如上所述,流識別邏輯電路410可以從數據單元的頭中的信息識別流標識 符,所述信息例如源地址、目的地址、源端口、目的端口、和/或協(xié)議。在一個實施例中,流標 識符可以作為數據單元頭中的信息的散列值被計算。 可以確定在流表420中是否存在對應于數據流的項(塊630)。例如,可以使用流 標識符搜索流表420以確定流表420在例如流標識字段510中是否包括具有匹配流標識符 的項。 如果流表420包括對應于數據流的項(塊630-是),則可以確定自從數據流中的 最后的數據單元被接收之后是否已經大于閾值時間量(例如,第一時間量)(即在接收當前 數據單元和接收最后數據單元之間已經經過了大于第一時間量的時間)(塊640)。當在閾 值(第一)時間量之內接收到最后的數據單元時(塊640-否),則用于該數據流的物理輸 出端口可以從流表項中被識別(塊650)。例如,輸出端口識別邏輯電路450可以從流表420 中的輸出端口字段545確定用于該數據單元的輸出端口。在該情況下,輸出端口可以被識 別而不必執(zhí)行邏輯端口至物理端口映射并且不必確定輸出端口的使用率。
可以確定輸出端口是否可用(塊660)。例如,輸出端口識別邏輯電路450可以檢 查輸出端口狀態(tài)表440以確定在輸出端口字段545中標識的輸出端口是可用還是不可用。 如上所述,當連接到輸出端口的鏈路失敗時,輸出端口可能不可用。 如果標識的輸出端口是可用的(塊660-是),則數據單元可以基于識別的輸出端 口被置于隊列中(塊670)。例如,結構接口 470可以將數據單元置于分配給識別輸出端口 的隊列中。如果數據單元具有相關的優(yōu)先權等級,則結構接口 470將數據單元置于對應于 識別的輸出端口和與該數據單元相關的優(yōu)先等級的隊列中。 該數據單元可以從隊列中輸出(塊680)。例如,數據單元可以保留在該隊列中直 到置于該隊列中的在該數據單元之前的其他數據單元已經從隊列中輸出。當數據單元到達 隊列的前面(或頭)時,數據單元可以基于數據單元的優(yōu)先級(如果存在)在所標識的輸 出端口可以用來接收該數據單元時被選擇以從該隊列中輸出。 如果流表420不包括對應于數據流的項目(塊630-否),如果在閾值(第一)時間 量內沒有接收到最后數據單元(塊640-是),或如果識別的輸出端口不可用(塊660-否), 則輸出端口可以被選擇(塊710)(圖7)。例如,為了選擇輸出端口,輸出端口識別邏輯電路 450可以查閱邏輯端口至端口組映射表430以識別與數據流相關聯(lián)的端口組。輸出端口識 別邏輯電路450也可以識別分配給端口組的物理輸出端口 。輸出端口識別邏輯電路450可 以考慮這些輸出端口的當前輸出端口使用率并基于當前輸出端口的使用率來選擇輸出端 口之一,例如最小使用率的輸出端口。如上所述,在一個實施例中,輸出端口使用率可以基 于輸出端口的容量、輸出端口所使用的總帶寬、和/或與輸出端口相關聯(lián)的流控制信息。同 樣如上所述,輸出端口使用率可以基于分配給輸出端口的數據流所使用的歷史帶寬。
流表項可以被創(chuàng)建或修改以標識所選擇的輸出端口 (塊720)。例如,如果流表420 中不存在用于該數據流的項,則流識別邏輯電路410可以在流表420中創(chuàng)建用于該數據流 的項。在該種情況下,輸出端口識別邏輯電路450可以在流表420中的項的輸出端口字段 545中存儲標識所選擇的輸出端口的信息。如果用于數據流的項已經在流表420中存在,則 輸出端口識別邏輯電路450可以使用標識所選輸出端口的信息來修改在流表420中的項的輸出端口字段545中的信息。 數據單元可以基于所選輸出端口置于隊列中(塊730)。例如,結構接口 470可以 將數據單元置于分配給所選輸出端口的隊列中。如果數據單元具有相關的優(yōu)先級,則結構 接口 470可以將數據單元置于對應于所選輸出端口和與數據單元相關的優(yōu)先級的隊列中。
數據單元可以從該隊列中輸出(塊740)。例如,數據單元可以保留在該隊列中直 到置于該隊列中的該數據單元之前的其他數據單元已經從該隊列中輸出。當數據單元到達 該隊列的前部(或頭部),數據單元可以基于數據單元的優(yōu)先級(如果存在),在所選擇的 輸出端口可以用來接收數據單元時被選擇用來從隊列中輸出。 圖8示出了用于創(chuàng)建或修改流表項的示例性處理的流程圖。圖8中示出的處理可 以由FFQ邏輯電路320、或與FFQ邏輯電路320分開或結合的其他部件執(zhí)行。處理可以通過 將變量j設置為等于1開始(塊810)。流表項目j可以被分析(塊820)。例如,維護邏輯 電路460可以從項j的定時器字段540讀取信息。 可以確定自從接收到數據流中的最后數據單元之后是否已經經過閾值時間量 (例如,第二時間量)(塊830)。例如,維護邏輯電路460可以確定來自定時器字段540的 信息是否大于該閾值。 當最后的數據單元大于閾值(第二)時間量被接收到時(塊830-是),則可以分 析在與數據流相關聯(lián)的端口組中的輸出端口的各輸出端口的使用率(塊840)。例如,輸出 端口識別邏輯電路450可以提供關于各輸出端口的當前使用率的信息。如上所述,輸出端 口的當前使用率可以基于在輸出端口處使用的總帶寬、輸出端口的容量、和/或與該輸出 端口相關聯(lián)的流控制信息。維護邏輯電路460可以基于來自輸出端口識別邏輯電路450的 信息來確定當前輸出端口的使用率。 可以確定項j中的輸出端口是否被過度使用(塊850)。例如,維護邏輯電路460 可以比較各輸出端口的使用率以確定項j中的輸出端口是否相對于其他輸出端口被過度 使用。這可以通過比較輸出端口容量正被使用的部分來確定。 如果項j的輸出端口被過度使用(塊850-是),則可以為對應于項j的數據流選 擇新的輸出端口 (塊860)。例如,維護邏輯電路460可以查詢邏輯端口至端口組映射表430 以識別與該數據流相關聯(lián)的端口組。維護邏輯電路460還可以識別分配給該端口組的物理 輸出端口。維護邏輯電路460可以考慮這些輸出端口的當前輸出端口使用率并基于輸出端 口的當前使用率來選擇這些輸出端口之一。在一個實施例中,維護邏輯電路460可以選擇 最小使用率的輸出端口。 項j可以被修改以標識所選擇的輸出端口 (塊870)。例如,維護邏輯電路460可 以更新流表420中的項j。更具體地,維護邏輯電路460可以使用標識所選輸出端口的信息 來修改流表420中的項j的輸出端口字段545中的信息。 變量j可以被更新(例如,j可以被設置為j加l)(塊880)。同樣,如果在閾值 (第二)時間量內接收到最后的數據單元(塊830-否)或者如果在項j中的輸出端口沒有 被過度使用(塊850-否),則變量j可以被更新(塊880)。然后處理返回到塊820以分析 流表420中的下一項。 在一個替換實施例中,維護邏輯電路460可以確定分配給特定輸出端口的數據流 所使用的平均帶寬。維護邏輯電路460可以基于例如流表420的數據單元計數器字段530和/或字節(jié)計數器字段535中的信息進行確定。維護邏輯電路460可以使用該信息來將數 據流分配給輸出端口 。例如,如果數據流的平均帶寬高于特定閾值以及數據流被分配給低 速輸出端口 ,則維護邏輯電路460可以重新將數據流分配至更高速輸出端口 。
示例 圖9是示出了在此描述的原理的示例的示意圖。如圖9所示,數據單元可以被PFE 接收。PFE可以使用例如包括在數據單元的頭中的目的地址來存取其轉發(fā)表以識別邏輯端 口號。PFE可以發(fā)送數據單元和邏輯端口號至FFQ邏輯電路。 FFQ邏輯電路可以使用邏輯端口號來識別對應于邏輯端口號的物理輸出端口組 (例如端口 p端口 2,...,端口 n)。如上所述,F(xiàn)FQ邏輯電路可以確定物理輸出端口集合中 的每個輸出端口的輸出端口使用率信息。在一個實施例中,該信息可以被輸入到選擇用于 數據流的輸出端口之一的加權隨機函數中。該加權隨機函數可以基于各輸出端口的使用率 信息來為各輸出端口分配加權值,以及基于所分配的加權值選擇輸出端口之一。所選擇的 輸出端口可以對應于分配給該數據流的物理輸出端口。
結論 在此所述的實施方式可以通過基于輸出端口的當前使用率將輸出端口分配和/ 或再分配至數據流的數據單元來執(zhí)行網絡裝置的輸出端口的負荷平衡,同時保持數據單元 的順序。 上述的描述提供了示例和描述,但不旨在窮盡或將本發(fā)明局限于所公開的精確形 式。根據上述的教導,修改和變形都是可能的或在本發(fā)明的實踐過程中得到。
例如,盡管已經參考圖6-8描述了模塊序列,但是在其他實施方式中可以修改塊 的順序。此外,獨立的模塊可以并行地執(zhí)行。 同樣,實施方式的特定部分已經被描述為執(zhí)行一個或多個功能的"邏輯電路"。術 語"邏輯電路"可以包括諸如處理器、ASIC或FPGA、或硬件和軟件(例如,運行在通用處理 器上的軟件)的組合。 應該理解在此描述的各方面可以以在圖中描述的實施例中的許多不同形式的軟 件、固件和硬件實現(xiàn)。用于執(zhí)行各方面的實際軟件代碼或特定控制硬件不用于限制實施例。 因此,描述各方面的操作和行為而不參考特定軟件代碼,應理解為軟件和控制硬件可以被 設計為基于本文中的描述來實現(xiàn)各個方面。 盡管在權利要求中陳述和/或在說明書中公開了特征的特定組合,但這些組合不 旨在限制本發(fā)明的公開。事實上,這些特征中的許多特征可以以沒有在權利要求中具體陳 述和/或沒有在說明書中公開的方式組合。盡管下面列出的每個從屬權利要求可能僅直接 依賴于一個其他權利要求,但是本發(fā)明的公開包括與權利要求組中的每個其他權利要求結 合的每個從屬權利要求。 在本發(fā)明中使用的元件、動作或指令都不應被解釋為本發(fā)明的關鍵或本質,除非 在此明確說明了。同樣,如在此所使用的,冠詞"a"旨在包括一個或多個條目。在僅旨在一 個項目時,使用術語"一"或類似語言。此外,詞組"基于"旨在表示"至少部分地基于",除 非明確說明有其他方式。
1權利要求
一種由裝置執(zhí)行的方法,包括提供流表;接收數據單元;確定與所述數據單元相關聯(lián)的數據流;確定所述流表是否包括對應于所述數據流的項;確定所述裝置的多個輸出端口的當前使用率;在所述流表沒有存儲對應于所述數據流的項時,基于所述多個輸出端口的所述當前使用率,從所述多個輸出端口中選擇用于所述數據流的輸出端口;以及將所述數據單元存儲在與所選擇的輸出端口相關的隊列中。
2. 根據權利要求1所述的方法,進一步包括 在所述流表中創(chuàng)建標識所選擇的輸出端口的項。
3. 根據權利要求1所述的方法,其中,確定與所述數據單元相關聯(lián)的所述數據流包括 對所述數據單元的頭的多個字段中的信息執(zhí)行散列函數以標識所述數據流。
4. 根據權利要求1所述的方法,進一步包括當所述流表存儲有對應于所述數據流的項時,基于所述流表中的信息識別所述多個輸 出端口中用于所述數據流的輸出端口; 確定所識別的輸出端口是否可用;當所識別的輸出端口可用時,將所述數據單元存儲在與所識別的輸出端口相關聯(lián)的隊 列中;以及當所識別的輸出端口不可用時,基于所述多個輸出端口的所述當前使用率,從所述多 個輸出端口中選擇用于所述數據流的輸出端口 。
5. 根據權利要求1所述的方法,進一步包括當所述流表存儲有對應于所述數據流的項時,確定所述數據流中的最后的數據單元何 時被接收到;當所述流表存儲有對應于所述數據流的項并且在接收所述最后的數據單元和接收所 述數據單元之間已經經過了多于閾值時間量的時間時,基于所述多個輸出端口的當前使用 率來從所述多個輸出端口中選擇用于所述數據流的輸出端口 ;以及使用標識所選擇的輸出端口的信息來修改對應于所述數據流的項。
6. 根據權利要求1所述的方法,其中,確定所述多個輸出端口的所述當前使用率包括 基于所述多個輸出端口中的一個輸出端口的容量和被所述多個輸出端口中的所述一個輸出端口使用的總帶寬,確定所述多個輸出端口中的所述一個輸出端口的所述當前使用率。
7. 根據權利要求1所述的方法,其中,確定所述多個輸出端口的所述當前使用率包括 基于由分配給所述多個輸出端口的一個輸出端口的多個數據流使用的歷史帶寬來確定所述多個輸出端口中的所述一個輸出端口的所述當前使用率。
8. 根據權利要求1所述的方法,進一步包括分析所述流表中的特定項以確定何時接收到特定數據流中的最后的數據單元,其中, 所述特定項標識所述多個輸出端口的特定輸出端口;基于所述多個輸出端口的當前使用率,確定所述特定輸出端口相對于所述多個輸出端口的其他輸出端口被過度使用;為所述特定數據流選擇所述多個輸出端口中的另一輸出端口,其中,所述多個輸出端 口中的所述另一輸出端口相對于所述特定輸出端口較少使用;以及修改所述流表中的所述特定項以標識所述多個輸出端口的所述另一輸出端口 。
9. 一種裝置,包括 多個輸出端口;存儲器,用于存儲包括多個項的流表,每個所述項都對應于多個數據流中不同的一個 數據流并標識所述多個輸出端口之一 ; 用于接收數據單元的裝置;用于確定與所述數據單元相關聯(lián)的數據流的裝置; 用于確定所述流表是否包括對應于所述數據流的項的裝置;用于在所述流表包括對應于所述數據流的項時,從所述流表中識別所述多個輸出端口 中用于所述數據流的輸出端口的裝置;用于確定所標識的輸出端口是不可用的裝置;用于在所標識的輸出端口不可用時確定所述多個輸出端口的當前使用率的裝置; 用于基于所述多個輸出端口的當前使用率,從所述多個輸出端口中選擇用于所述數據流的輸出端口的裝置;以及用于使用關于所選擇的輸出端口的信息來修改所述流表中的項的裝置。
10. 根據權利要求9所述的裝置,進一步包括用于將所述數據單元存儲在與所選擇的 輸出端口相關聯(lián)的隊列中的裝置。
11. 根據權利要求9所述的裝置,其中,所述用于確定所述多個輸出端口的當前使用率 的裝置包括基于所述多個輸出端口中的一個輸出端口的容量和被所述多個輸出端口中的 所述一個輸出端口使用的總帶寬確定所述多個輸出端口中的所述一個輸出端口的當前使 用率的裝置。
12. 根據權利要求9所述的裝置,其中,所述用于確定所述多個輸出端口的當前使用率 的裝置包括基于被分配給所述多個輸出端口中一個輸出端口的所述多個數據流的一個或 多個數據流使用的歷史帶寬來確定所述多個輸出端口中的所述一個輸出端口的當前使用率。
13. —種包括多個輸出端口的裝置,包括用于將流表存儲在存儲器中的裝置,所述流表包括多個項,每個所述項都對應于多個 數據流中不同的一個數據流;用于分析所述流表中的所述多個項中的特定項以確定何時接收到所述多個數據流中 的相應數據流中的最后的數據單元的裝置,其中,所述特定項目標識所述多個輸出端口的 特定輸出端口;用于在自從所述最后的數據單元被接收之后已經至少經過閾值時間量時,確定所述多 個輸出端口的當前使用率的裝置;用于基于所述多個輸出端口的當前使用率來確定所述特定輸出端口相對于所述多個 輸出端口的其他輸出端口被過度使用的裝置;用于為所述多個數據流的所述相應數據流選擇所述多個輸出端口中的另一輸出端口的裝置,其中,所述多個輸出端口中的所述另一輸出端口相對于所述特定輸出端口較少被 使用;以及用于使用關于所述多個輸出端口的所述另一輸出端口的信息來修改所述特定項的裝置。
14. 根據權利要求13所述的裝置,進一步包括用于修改所述流表中的所述特定項以標識所述多個輸出端口的所述另一輸出端口的 裝置。
15. 根據權利要求13所述的裝置,其中,所述用于確定所述多個輸出端口的當前使用 率的裝置包括用于基于所述多個輸出端口中的一個輸出端口的容量和由所述多個輸出端 口中的所述一個輸出端口使用的總帶寬來確定所述多個輸出端口的所述一個輸出端口的 當前使用率的裝置。
全文摘要
一種裝置提供流表。該裝置接收數據單元,確定與該數據單元相關聯(lián)的數據流,確定該流表是否包括對應于該數據流的項,確定裝置的輸出端口組的當前使用率,當流表沒有存儲對應于該數據流的項時,基于輸出端口組的當前使用率來選擇輸出端口組中用于該數據流的輸出端口,以及將數據單元存儲在與所選擇的輸出端口相關聯(lián)的隊列中。
文檔編號H04L29/08GK101729402SQ20091017616
公開日2010年6月9日 申請日期2009年9月23日 優(yōu)先權日2008年10月24日
發(fā)明者古奈什·艾巴伊, 阿西·阿揚加爾 申請人:叢林網絡公司