背景技術:
業(yè)務整形是通過放慢被確定為比優(yōu)先的業(yè)務流更不重要或比優(yōu)先的業(yè)務流更不期望的業(yè)務流來調控網(wǎng)絡數(shù)據(jù)業(yè)務的技術。存在兩種放慢流的通用機制:第一種,放棄或丟棄某些分組,以及第二種,將分組延遲。分組放棄機制被廣泛使用并且在眾多情況下被當作唯一可行的方案。例如,如果由計算機連接到的單獨的設備來執(zhí)行,業(yè)務整形能夠通過選擇性地放棄分組來執(zhí)行。
替選地,分組延遲機制能夠免除分組放棄或者減少所放棄分組的數(shù)目。例如,當分組被延遲時,反饋機制能夠發(fā)揮“反壓力”,即,發(fā)送反饋到發(fā)送模塊(例如,設備或軟件組件)以使得發(fā)送模塊降低其發(fā)送分組的速率。在沒有這樣的“反壓力”的情況下,業(yè)務整形模塊將需要以更快的速率保持接收分組,并且需要緩沖他們,直到其能夠以正確的速率來發(fā)送他們。缺少這樣的“反壓力”將不僅防止應用立即知曉業(yè)務擁塞,而且還使得分組傳輸系統(tǒng)的整體吞吐量和性能降級。
技術實現(xiàn)要素:
在一個方面中,給出了一種包括網(wǎng)絡設備的系統(tǒng)。網(wǎng)絡設備包括:網(wǎng)絡接口驅動器、數(shù)據(jù)業(yè)務整形模塊以及網(wǎng)卡。網(wǎng)絡接口驅動器被配置為發(fā)送由軟件應用所生成并且轉發(fā)的第一數(shù)據(jù)分組集合以由網(wǎng)卡傳輸,按照第一順序在主傳輸隊列中存儲與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符,以及將與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符傳遞到在網(wǎng)卡和至少一個處理器中的一者上執(zhí)行的數(shù)據(jù)業(yè)務整形模塊。響應于確定網(wǎng)卡已經(jīng)成功傳送所接收的第一分組集合中的分組,網(wǎng)絡接口驅動器被配置為在將附加數(shù)據(jù)分組轉發(fā)到網(wǎng)絡接口驅動器之前,將分組傳輸完成消息通信到等待接收來自網(wǎng)絡接口驅動器的分組傳輸完成消息的軟件應用。數(shù)據(jù)業(yè)務整形模塊被配置為維持多個業(yè)務整形隊列,每個業(yè)務整形隊列具有至少一個相關聯(lián)的傳輸速率規(guī)則。數(shù)據(jù)業(yè)務整形模塊進一步被配置為接收來自主傳輸隊列的由網(wǎng)絡接口驅動器所傳遞的數(shù)據(jù)分組的描述符,確定網(wǎng)卡的傳輸將被延遲,以及響應于這樣的確定,從主傳輸隊列中移除描述符并且基于分類的結果將其存儲在對應的業(yè)務整形隊列中。數(shù)據(jù)業(yè)務整形模塊進一步被配置為使得網(wǎng)卡根據(jù)與相應的業(yè)務整形隊列相關聯(lián)的傳輸速率規(guī)則來傳送與存儲在輔助業(yè)務整形隊列中的描述符相關聯(lián)的數(shù)據(jù)分組,以及向網(wǎng)絡接口驅動器通知以不同于第一順序的第二順序對數(shù)據(jù)分組的成功傳輸。
在一個方面中,給出了一種方法,包括由在至少一個處理器上執(zhí)行的網(wǎng)絡接口驅動器接收由軟件應用所生成并且轉發(fā)的第一數(shù)據(jù)分組集合,以由網(wǎng)卡傳輸。所述方法進一步包括:由網(wǎng)絡接口驅動器按照第一順序在主傳輸隊列中存儲與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符;以及由網(wǎng)絡接口驅動器將與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符傳遞到在網(wǎng)卡和所述至少一個處理器中的一者上執(zhí)行的數(shù)據(jù)業(yè)務整形模塊。所述方法進一步包括響應于確定網(wǎng)卡已經(jīng)成功傳送所接收的第一數(shù)據(jù)分組集合中的分組,在將附加數(shù)據(jù)分組轉發(fā)到網(wǎng)絡接口驅動器之前,由網(wǎng)絡接口驅動器將分組傳輸完成消息通信到等待接收來自網(wǎng)絡接口驅動器的分組傳輸完成消息的軟件應用。所述方法進一步包括由數(shù)據(jù)業(yè)務整形模塊維持多個業(yè)務整形隊列,其中每個業(yè)務整形隊列具有至少一個相關聯(lián)的傳輸速率規(guī)則;以及由數(shù)據(jù)業(yè)務整形模塊接收來自主傳輸隊列的由網(wǎng)絡接口驅動器所傳遞的數(shù)據(jù)分組的描述符。所述方法進一步包括由數(shù)據(jù)業(yè)務整形模塊對與所接收的描述符相關聯(lián)的數(shù)據(jù)分組進行分類;由數(shù)據(jù)業(yè)務整形模塊確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸將被延遲,以及響應于這樣的確定,從主傳輸隊列中移除與第一數(shù)據(jù)分組相關聯(lián)的第一描述符并且基于分類的結果將所述第一描述符存儲在對應的業(yè)務整形隊列中。所述方法進一步包括由數(shù)據(jù)業(yè)務整形模塊使得網(wǎng)卡根據(jù)與相應的業(yè)務整形隊列相關聯(lián)的傳輸速率規(guī)則來傳送與存儲在業(yè)務整形隊列中的描述符相關聯(lián)的數(shù)據(jù)分組;以及由數(shù)據(jù)業(yè)務整形模塊向網(wǎng)絡接口驅動器通知以不同于第一順序的第二順序對所述數(shù)據(jù)分組的成功傳輸。
在一個方面中,一種計算機可讀介質,存儲當由計算處理器運行時使得計算處理器執(zhí)行如下操作的指令:經(jīng)由在計算處理器上中的的網(wǎng)絡接口驅動器接收由軟件應用所生成并且轉發(fā)的第一數(shù)據(jù)分組集合,以由網(wǎng)卡傳輸。進一步使得所述計算處理器經(jīng)由網(wǎng)絡接口驅動器在主傳輸隊列中存儲與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符。進一步使得所述計算處理器經(jīng)由網(wǎng)絡接口驅動器將與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符傳遞到在網(wǎng)卡和所述計算處理器中的一者上執(zhí)行的數(shù)據(jù)業(yè)務整形模塊。響應于確定網(wǎng)卡已經(jīng)成功傳送所接收的第一分組集合中的分組,進一步使得所述計算處理器在將附加數(shù)據(jù)分組轉發(fā)到網(wǎng)絡接口驅動器之前,經(jīng)由網(wǎng)絡接口驅動器將分組傳輸完成消息通信到等待接收來自網(wǎng)絡接口驅動器的分組傳輸完成消息的軟件應用。進一步使得所述計算處理器經(jīng)由數(shù)據(jù)業(yè)務整形模塊維持多個業(yè)務整形隊列,其中每個業(yè)務整形隊列具有至少一個相關聯(lián)的傳輸速率規(guī)則。進一步使得所述計算處理器經(jīng)由數(shù)據(jù)業(yè)務整形模塊接收來自主傳輸隊列的由網(wǎng)絡接口驅動器所傳遞的數(shù)據(jù)分組的描述符;以及經(jīng)由數(shù)據(jù)業(yè)務整形模塊對與所接收的描述符相關聯(lián)的數(shù)據(jù)分組進行分類。進一步使得所述計算處理器經(jīng)由數(shù)據(jù)業(yè)務整形模塊確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸將被延遲,以及響應于這樣的確定,從主傳輸隊列中移除與第一數(shù)據(jù)分組相關聯(lián)的第一描述符并且基于分類的結果在對應的業(yè)務整形隊列中存儲第一描述符。所述計算處理器進一步經(jīng)由數(shù)據(jù)業(yè)務整形模塊使得網(wǎng)卡根據(jù)與相應的業(yè)務整形隊列相關聯(lián)的傳輸速率規(guī)則來傳送與存儲在業(yè)務整形隊列中的描述符相關聯(lián)的數(shù)據(jù)分組。進一步使得所述計算處理器:經(jīng)由數(shù)據(jù)業(yè)務整形模塊向網(wǎng)絡接口驅動器通知對所述數(shù)據(jù)分組的成功傳輸。
附圖說明
當結合以下附圖時,通過參考以下具體實施方式部分,將更全面地理解本公開的以上和相關的對象、特征、以及優(yōu)點,其中:
圖1為根據(jù)某些實施方式的具有數(shù)據(jù)業(yè)務整形系統(tǒng)的網(wǎng)絡環(huán)境的框圖;
圖2為示例虛擬機環(huán)境的框圖;
圖3為根據(jù)某些實施方式的示出網(wǎng)絡接口驅動器的操作的流程圖;
圖4為根據(jù)某些實施方式的示出數(shù)據(jù)整形模塊的操作的流程圖;
圖5為根據(jù)某些實施方式的示出網(wǎng)絡接口驅動器的操作的流程圖;
圖6a-6d為根據(jù)某些實施方式的表示數(shù)據(jù)業(yè)務整形系統(tǒng)的操作示例的框圖;
圖7a-7d為根據(jù)某些實施方式的表示數(shù)據(jù)業(yè)務整形系統(tǒng)的操作示例的框圖;
圖8a-8c為根據(jù)某些實施方式的表示數(shù)據(jù)業(yè)務整形系統(tǒng)的操作示例的框圖;以及
圖9為示例計算系統(tǒng)的框圖。
具體實施方式
給出了涉及網(wǎng)絡設備中的業(yè)務整形的系統(tǒng)和方法。在某些實施方式中,所述系統(tǒng)和方法包括網(wǎng)絡設備的網(wǎng)絡接口驅動器,其被配置為存儲與傳輸隊列中所接收的分組相關聯(lián)的描述符并且將所述描述符傳遞到業(yè)務整形模塊。所接收的分組源自在計算設備上運行的應用,例如計算設備所托管的一個或多個虛擬機上。虛擬機的訪客操作系統(tǒng)防止應用轉發(fā)附加分組到網(wǎng)絡接口驅動器,直到接收到確認已經(jīng)成功傳送之前所轉發(fā)分組的消息。如本文中所述,在某些實施方式中,響應于確定網(wǎng)卡成功傳送所接收的分組中的第一分組,在轉發(fā)附加數(shù)據(jù)分組到網(wǎng)絡接口驅動器之前,網(wǎng)絡接口驅動器將分組傳輸完成消息通信到等待接收分組傳輸完成消息的軟件應用或訪客操作系統(tǒng)。在某些實施方式中,響應于確定網(wǎng)卡傳輸所接收的分組中的一個分組將被延遲,業(yè)務整形模塊從傳輸隊列中移除與分組相關聯(lián)的描述符并且將所述描述符存儲在對應的業(yè)務整形隊列中。該配置能夠利用網(wǎng)絡接口驅動器中的單個主傳輸隊列以及采用不同的業(yè)務整形規(guī)則的多個業(yè)務整形隊列(例如,在網(wǎng)絡接口卡中)來實現(xiàn),因而允許按照每個流的業(yè)務整形,而不需要網(wǎng)絡接口驅動器中的多個傳輸隊列。進而,利用這一配置,分組源(諸如運行在網(wǎng)絡設備的真實os上(與虛擬機的訪客os上相反)的軟件應用、或由管理程序管理的訪客os中的軟件應用或tcp棧的上層)不需要知曉在網(wǎng)絡接口驅動器中或在網(wǎng)卡上實現(xiàn)的業(yè)務整形算法。因此,能夠降低在虛擬機環(huán)境中實現(xiàn)網(wǎng)絡接口驅動器和訪客操作系統(tǒng)的成本。此外,利用這一配置,分組源不需要知曉的不僅是業(yè)務整形算法,還有其他配置,例如,分組分類規(guī)則和其他業(yè)務管理策略。因此,整體業(yè)務整形系統(tǒng)能夠比其中應用或用戶能夠配置這樣的具體規(guī)則和策略(例如,隊列的數(shù)目)的系統(tǒng)更可靠。
在傳統(tǒng)的系統(tǒng)中,按照傳輸隊列的順序來處理分組,所述傳輸隊列例如為先入先出(fifo)隊列,并且完成結果按順序返回。在本公開的某些實施方式中,業(yè)務整形模塊能夠通過從傳輸隊列中移除某些數(shù)據(jù)分組用于已延遲的傳輸(在不放棄的情況下)來使得完成消息無序返回。利用“無序完成”這一配置,因為應用在接收到已經(jīng)轉發(fā)到網(wǎng)絡接口驅動器的數(shù)據(jù)分組的完成消息之前將不再發(fā)送更多數(shù)據(jù)分組,這能夠使得應用更快或更慢地傳送數(shù)據(jù)分組,同時仍然擁有單個傳輸隊列。也就是,這一配置能夠通過防止將延遲的數(shù)據(jù)分組仍然保持在隊列中來避免隊頭阻塞。此外,在某些實施方式中,這一“無序”完成配置能夠應用于應用內(nèi)的數(shù)據(jù)分組的單獨的流(flow)(或流(stream)),使得能夠選擇性地放慢每個流,其中所述應用例如為具有為對應的流(flow)或流(stream)而打開的成千的連接的應用。
進而,在某些實施方式中,在沒有隊頭阻塞的情況下,“無序”完成配置能夠發(fā)揮“反壓力”到發(fā)送模塊,這與有多少主傳輸隊列或每個隊列中放了多少分組無關,只要完成消息能夠無序返回。在某些實施方式中,具有無序完成配置的業(yè)務整形機制能夠利用特定的網(wǎng)絡/硬件配置(例如,特定數(shù)目的主傳輸隊列和特定的隊列指派規(guī)則)來實現(xiàn)。例如,為了對業(yè)務的一千個流(flow)/流(stream)進行整形,業(yè)務整形機制能夠利用僅單個隊列或者利用少量的隊列(例如,16-32個隊列)來實現(xiàn)。當在具有少量的隊列的系統(tǒng)中實現(xiàn)時,業(yè)務整形機制能夠返回“無序”完成消息,指示每個分組是基于預定的隊列指派規(guī)則而放在正確的隊列中還是分組業(yè)務“隨機地”散布在隊列上。例如,在不修改網(wǎng)絡/硬件配置(例如,linux系統(tǒng)的隊列指派規(guī)則或硬件隊列的數(shù)目)的情況下,用于對來自linux系統(tǒng)的散布在多個硬件隊列上的分組業(yè)務進行整形的“無序”完成業(yè)務整形系統(tǒng)能夠在虛擬機中實現(xiàn)。在某些實施方式中,業(yè)務整形系統(tǒng)能夠通過向應用或用戶隱藏業(yè)務整形層、流分類規(guī)則和策略來提供這樣的網(wǎng)絡/硬件兼容性。
圖1為具有數(shù)據(jù)業(yè)務整形系統(tǒng)160的示例網(wǎng)絡環(huán)境1000的框圖。按照概述,圖示的網(wǎng)絡環(huán)境包括互連的網(wǎng)絡節(jié)點750的網(wǎng)絡700。網(wǎng)絡節(jié)點750以數(shù)據(jù)源、數(shù)據(jù)目的地(或數(shù)據(jù)宿)、以及通過網(wǎng)絡700從源朝目的地傳播數(shù)據(jù)的中間節(jié)點來參與到網(wǎng)絡700中。網(wǎng)絡700包括具有到各種其他參與的網(wǎng)絡節(jié)點750的鏈路600的網(wǎng)絡設備110的數(shù)據(jù)業(yè)務整形系統(tǒng)160。詳見圖1,網(wǎng)絡700為促進參與設備間的交互的網(wǎng)絡。說明性的示例網(wǎng)絡700為互聯(lián)網(wǎng);然而,在其他實施方式中,網(wǎng)絡700可以為另一網(wǎng)絡,諸如數(shù)據(jù)中心內(nèi)的本地網(wǎng)絡、網(wǎng)絡結構、或任意其他局域或廣域網(wǎng)。網(wǎng)絡700可以由多個連接的子網(wǎng)或自治網(wǎng)絡組成。網(wǎng)絡700能夠為局域網(wǎng)(lan),諸如企業(yè)內(nèi)聯(lián)網(wǎng)、城域網(wǎng)(man)、廣域網(wǎng)(wan)、諸如互聯(lián)網(wǎng)的互連網(wǎng)絡、或者例如為自組織wifi對等點對點網(wǎng)絡的對等網(wǎng)絡。任意類型和/或形式的數(shù)據(jù)網(wǎng)絡和/或通信網(wǎng)絡都能夠用于網(wǎng)絡700。其能夠為公共的、私有的、或公共網(wǎng)絡和私有網(wǎng)絡的組合。一般地,網(wǎng)絡700用于在計算設備之間傳遞信息,例如,在網(wǎng)絡節(jié)點750之間,并且數(shù)據(jù)業(yè)務整形系統(tǒng)的網(wǎng)絡設備110根據(jù)其配置促進該通信。
參見圖1,網(wǎng)絡設備110為托管一個或多個虛擬機的服務器。網(wǎng)絡設備110包括數(shù)據(jù)業(yè)務整形系統(tǒng)160。在某些實施方式中,網(wǎng)絡設備110包括存儲器112、以及網(wǎng)卡168。網(wǎng)絡設備110能夠包括用于存儲數(shù)據(jù)分組的分組緩沖器169。在某些實施方式中,網(wǎng)絡設備110具有與如圖9中所示的計算系統(tǒng)140的配置類似的配置。例如,存儲器112能夠具有與如圖9中所示的存儲器144的配置類似的配置,以及網(wǎng)卡168能夠具有與如圖9中所示的網(wǎng)絡接口146或網(wǎng)絡接口控制器143的配置類似的配置。以下參照圖9更詳細地描述計算系統(tǒng)140。圖9中圖示的計算系統(tǒng)140中示出的元件不都需要在圖1中圖示的網(wǎng)絡設備110的某些實施方式中給出。在某些實施方式中,網(wǎng)絡設備110可以為軟件隊列或仿真的網(wǎng)絡設備、或充當網(wǎng)絡接口的軟件。
再次參見圖1,在某些實施方式中,數(shù)據(jù)業(yè)務整形系統(tǒng)160與一個或多個應用150(例如,應用150a、150b以及150c)通信。應用150a-150c中的一個或多個應用能夠為運行在網(wǎng)絡設備110的真實操作系統(tǒng)上的軟件應用。除此之外,軟件應用150a-150c中的一個或多個軟件應用能夠為運行在由虛擬機環(huán)境中的管理程序管理的訪客os上的軟件應用、或虛擬機環(huán)境的訪客os的協(xié)議棧(例如,tcp棧)的上層。例如,參見圖2,應用150a-150c能夠各自為運行在真實os220上的軟件應用230、運行在由管理程序250管理的訪客os260上的軟件應用265、或圖2中的訪客os260的協(xié)議棧261的上層。管理程序250和與其相關的虛擬機環(huán)境將在以下參照圖2詳細描述。
仍舊參見圖1,在某些實施方式中,網(wǎng)絡設備110包括網(wǎng)絡接口驅動器164和數(shù)據(jù)業(yè)務整形模塊166。網(wǎng)絡接口驅動器164能夠為運行在真實os上的網(wǎng)絡接口驅動模塊。網(wǎng)絡接口驅動器164能夠直接地(如果運行在網(wǎng)絡設備110的真實os上)、經(jīng)由虛擬機的訪客os(如果運行在虛擬機環(huán)境中)、或在某些實施方式中通過管理程序和訪客os來與軟件應用150a-150c(例如,圖2中的應用265)中的一個軟件應用通信。在某些實施方式中,網(wǎng)絡接口驅動器164包括在網(wǎng)絡設備110的真實os的傳輸控制協(xié)議(tcp)棧的第一層內(nèi)并且與包括在tcp棧的上層中的軟件模塊或應用通信。在一個示例中,網(wǎng)絡接口驅動器164包括在tcp棧的傳輸層內(nèi)并且與包括在tcp棧的應用層中的軟件模塊或應用通信。在另一示例中,網(wǎng)絡接口驅動器164包括在tcp棧的鏈路層內(nèi)并且與包括在tcp棧的互聯(lián)網(wǎng)/傳輸層中的tcp/ip模塊通信。
再次參見圖1,在某些實施方式中,數(shù)據(jù)業(yè)務整形模塊166能夠被實現(xiàn)為運行在真實os上的網(wǎng)絡接口驅動模塊的一部分。在某些實施方式中,數(shù)據(jù)業(yè)務整形模塊166能夠作為網(wǎng)卡168的一部分而被包括。
參見圖1,在某些實施方式中,能夠將分組緩沖器169定位在網(wǎng)絡設備110的共享存儲器中,使得應用150、網(wǎng)卡168、網(wǎng)絡接口驅動器164以及數(shù)據(jù)業(yè)務整形模塊166中的某些或全部能夠直接或間接地訪問分組緩沖器169。例如,能夠將分組緩沖器169定位在訪客os、真實os、網(wǎng)絡接口驅動器164、以及網(wǎng)卡168可訪問的共享存儲器中。為了通過網(wǎng)絡發(fā)送分組,在傳輸?shù)骄W(wǎng)卡168之前,能夠將數(shù)據(jù)分組存儲在分組緩沖器169中,其中分組緩沖器169能夠由網(wǎng)絡接口驅動器164和網(wǎng)卡168訪問。
圖2示出了實現(xiàn)虛擬機環(huán)境的示例服務器200的框圖。在某些實施方式中,服務器200包括硬件210、運行在硬件210上的真實操作系統(tǒng)(os)220、管理程序250、具有訪客操作系統(tǒng)(訪客os)260和270的兩個虛擬機。硬件210能夠包括網(wǎng)絡接口卡(nic)215、以及其他組件。硬件210能夠具有與如圖9中所示的計算系統(tǒng)140的配置類似的配置。硬件210的nic215能夠具有與如圖9中所示的網(wǎng)絡接口控制器143或網(wǎng)絡接口164的配置類似的配置。在某些實施方式中,真實os220具有協(xié)議棧225(例如,tcp棧)并且具有運行在真實os220上的軟件應用。在某些實施方式中,訪客os260和270分別具有協(xié)議棧261和271。訪客os260和270中的每個能夠托管大量的應用,例如,軟件應用265、266、275以及276。服務器200可以為文件服務器、應用服務器、web服務器、代理服務器、電器、網(wǎng)絡電器、網(wǎng)關、網(wǎng)關服務器、虛擬服務器、部署服務器、sslvpn服務器、或防火墻。
再次參見圖2,服務器200執(zhí)行管理程序220,所述管理程序220實例化并且管理第一訪客os260和第二訪客os270。第一訪客os260托管第一軟件應用265和第二軟件應用266。第二訪客os260托管第三軟件應用275和第四軟件應用276。例如,應用能夠包括數(shù)據(jù)庫服務器、數(shù)據(jù)倉庫程序、股市交易軟件、網(wǎng)上銀行應用、內(nèi)容發(fā)布和管理系統(tǒng)、被托管的視頻游戲、被托管的桌面、電子郵件服務器、旅行預定系統(tǒng)、客戶關系管理應用、存貨控制管理數(shù)據(jù)庫、以及企業(yè)資源管理系統(tǒng)。在某些實施方式中,訪客os托管其他種類的應用。進一步在以下關于圖3-6描述服務器200的組件之間的交互。
圖3為使用網(wǎng)絡接口驅動器所執(zhí)行的示例方法300來對網(wǎng)絡業(yè)務進行整形的流程圖,所述網(wǎng)絡接口驅動器諸如圖1中所示的網(wǎng)絡接口驅動器164。按照概述,方法300開始于階段310,其中網(wǎng)絡接口驅動器能夠接收由應用生成并且轉發(fā)的第一數(shù)據(jù)分組集合,以由網(wǎng)卡傳輸,所述網(wǎng)卡諸如圖1中所示的網(wǎng)卡168。在階段320,網(wǎng)絡接口驅動器能夠在主傳輸隊列中存儲與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符。在階段330,網(wǎng)絡接口驅動器能夠傳遞與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符到數(shù)據(jù)業(yè)務整形模塊,諸如圖1中所示的數(shù)據(jù)業(yè)務整形模塊166。
現(xiàn)在,將參照圖6a和6b來更詳細地描述圖3中的流程圖,圖6a和6b為根據(jù)某些實施方式的表示數(shù)據(jù)業(yè)務整形系統(tǒng)的操作示例的框圖。
在階段310,網(wǎng)絡接口驅動器能夠接收由應用生成并且轉發(fā)的第一數(shù)據(jù)分組集合,以由網(wǎng)卡傳輸。例如,參見圖6a,網(wǎng)絡接口驅動器164接收由應用150a-150c的集合中的一個應用生成并且轉發(fā)的一個數(shù)據(jù)分組集合,以由網(wǎng)卡168傳輸。在某些實施方式中,響應于接收到該數(shù)據(jù)分組集合,網(wǎng)絡接口驅動器164在分組緩沖器(例如,圖1和6a-6d中的分組緩沖器169)中存儲所接收的該數(shù)據(jù)分組集合。例如,作為共享的資源,能夠將分組緩沖器169定位在訪客os與網(wǎng)絡接口驅動器164之間的共享存儲器中,使得能夠將從運行在訪客os上的應用150發(fā)送的分組存儲在分組緩沖器169中并且與分組相關聯(lián)的描述符指向共享資源內(nèi)的位置。在某些實施方式中,包含指向分組緩沖器中特定分組的指針(例如,存儲器地址)的描述符與特定分組相關聯(lián)。在某些實施方式中,描述符通常很小(例如,32個字節(jié)或者包括少數(shù)64比特的整數(shù))并且易于處理,而分組通常為最小幾百字節(jié),并且經(jīng)常為1500個字節(jié)。
在某些實施方式中,數(shù)據(jù)分組能夠為流的一部分。應用150能夠按照特定的順序來發(fā)送每個流中的數(shù)據(jù)分組。每個流能夠來自不同的應用(例如,在不同的訪客os上執(zhí)行的應用)。在圖6a中所示的示例中,應用150a按連續(xù)順序來發(fā)送與描述符s1、s2以及s3相對應的第一流的三個分組。應用150b按照連續(xù)順序來發(fā)送與描述符t1、t2以及t3相對應的第二流的三個分組。應用150c發(fā)送與描述符u1和u3相對應的第三流的兩個分組。
在階段320,網(wǎng)絡接口驅動器能夠在主傳輸隊列161中存儲與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符。參見圖6a-6d,網(wǎng)絡設備110包括主傳輸隊列161,用于包含與從應用150所接收的數(shù)據(jù)分組相關聯(lián)的描述符。在某些實施方式中,主傳輸隊列161為單個隊列。在某些實施方式中,主傳輸隊列161能夠為硬件隊列(例如,在專用硬件中實現(xiàn)的隊列)或軟件隊列。在某些實施方式中,主傳輸隊列161為一個主傳輸隊列集合。例如,主傳輸隊列161為在多隊列nic中實現(xiàn)的多個隊列。在某些實施方式中,該主傳輸隊列集合的數(shù)目小于速率限制器(例如,業(yè)務整形隊列)的數(shù)目。例如,為了對成千上萬的流(flow)或流(stream)進行整形,網(wǎng)絡設備110能夠具有約10-約32個硬件隊列,同時具有安裝于其中以對成千上萬的流進行整形的眾多更多的業(yè)務整形隊列。響應于接收來自應用150的數(shù)據(jù)分組,網(wǎng)絡接口驅動器164將與數(shù)據(jù)分組相關聯(lián)的描述符寫入單個隊列,例如,主傳輸隊列161。在某些實施方式中,網(wǎng)絡接口驅動器164按照應用150發(fā)送分組的順序將與每個流中的數(shù)據(jù)分組相關聯(lián)的描述符寫入主傳輸隊列161中。例如,如在圖6a中所示,網(wǎng)絡接口驅動器164接收來自應用150的八個數(shù)據(jù)分組并且將與分組相關聯(lián)的描述符(例如,描述符t1、u1、t2、s1、u2、s2、s3、t3)寫入主傳輸隊列161,以用于經(jīng)由網(wǎng)卡168的分組傳輸。在某些實施方式中,響應于接收來自應用150的數(shù)據(jù)分組,網(wǎng)絡接口驅動器164能夠將所接收的分組寫入單個傳輸隊列(而非存儲與他們相關聯(lián)的描述符)。
網(wǎng)絡接口驅動器164接收來自應用150a的第一流的分組并且按照他們被傳送的順序來將描述符s1、s2以及s3寫入主傳輸隊列161,即,s1,接著s2,接著s3。類似地,網(wǎng)絡接口驅動器164從應用150b接收第二流的分組并且按照他們被接收的順序來將描述符t1、t2以及t3寫入主傳輸隊列161,以及網(wǎng)絡接口驅動器164接收來自應用150c的第三流的分組并且將描述符u1和u2寫入主傳輸隊列161。在某些實施方式中,在主傳輸隊列中,不同的流的分組能夠被交織,同時維持每個流中的分組的接收順序。例如,在圖6a中所示的示例中,在主傳輸隊列中,不同的流的分組被交織(即,按照t1、u1、t2、s1、u2、s2、s3以及t3的順序),同時維持每個流的分組的接收順序(例如,對于第一流,維持s1->s2->s3的順序;對于第二流,維持t1->t2->t3的順序;以及對于第三流,維持u1->u2的順序)。
在階段330,網(wǎng)絡接口驅動器能夠將與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符傳遞到數(shù)據(jù)業(yè)務整形模塊。例如,參見圖6b,在某些實施方式中,網(wǎng)絡接口驅動器164將與所接收的數(shù)據(jù)分組相關聯(lián)的描述符(例如,t1、u1、t2、s1、u2、s2、s3、以及t3)傳遞到數(shù)據(jù)業(yè)務整形模塊166。
圖4為使用由數(shù)據(jù)業(yè)務整形模塊執(zhí)行的示例方法400來對網(wǎng)絡業(yè)務進行整形的流程圖,所述數(shù)據(jù)業(yè)務整形模塊諸如圖1和圖6a-6d中所示的數(shù)據(jù)整形模塊166。按照概述,所述方法400開始于階段410,其中數(shù)據(jù)業(yè)務整形模塊維持多個業(yè)務整形隊列并且接收來自主傳輸隊列的由網(wǎng)絡接口驅動器所傳遞的數(shù)據(jù)分組的描述符,所述網(wǎng)絡接口驅動器諸如圖1和圖6a-6d中所示的網(wǎng)絡接口驅動器164。在階段420,數(shù)據(jù)業(yè)務整形模塊對與所接收的描述符相關聯(lián)的數(shù)據(jù)分組進行分類。在階段430,數(shù)據(jù)業(yè)務整形模塊確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸是否將被延遲,其中,所述網(wǎng)卡諸如圖1和圖6a-6d中所示的網(wǎng)卡168。在階段440,如果數(shù)據(jù)業(yè)務整形模塊確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸將被延遲,數(shù)據(jù)業(yè)務整形模塊從主傳輸隊列中移除與第一數(shù)據(jù)分組相關聯(lián)的第一描述符并且基于分類的結果來將第一描述符存儲在對應的業(yè)務整形隊列中。接著,在階段450,數(shù)據(jù)業(yè)務整形模塊使得網(wǎng)卡根據(jù)與相應的業(yè)務整形隊列相關聯(lián)的傳輸速率規(guī)則來傳送與存儲在業(yè)務整形隊列中的描述符相關聯(lián)的數(shù)據(jù)分組。在階段460,如果數(shù)據(jù)業(yè)務整形模塊確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸不會被延遲,數(shù)據(jù)業(yè)務整形模塊使得網(wǎng)卡立即傳送第一數(shù)據(jù)分組。在階段470,數(shù)據(jù)業(yè)務整形模塊向網(wǎng)絡接口驅動器通知對數(shù)據(jù)分組的成功傳輸。注意,如本文中使用的,對數(shù)據(jù)分組的成功傳輸不一定要求接收方對數(shù)據(jù)分組的成功接收。也就是,對分組接收的確認的接收(例如,tcpack消息)不是網(wǎng)絡接口卡確定已經(jīng)成功傳送分組的先決條件。
現(xiàn)在,將參照6a-6d來詳細描述圖4中的流程圖,圖6a-6d為根據(jù)某些實現(xiàn)的表示數(shù)據(jù)業(yè)務整形系統(tǒng)的示例操作的框圖。
如以上給出的,在階段410,數(shù)據(jù)業(yè)務整形模塊維持多個業(yè)務整形隊列并且接收來自主傳輸隊列的由網(wǎng)絡接口驅動器所傳遞的數(shù)據(jù)分組的描述符。例如,參見圖6a-6d,數(shù)據(jù)業(yè)務整形模塊166維持多個業(yè)務整形隊列(例如,業(yè)務整形隊列162、163以及165)。在某些實施方式中,每個業(yè)務整形隊列能夠維持對應的分組緩沖器(未示出),以用于存儲由業(yè)務整形隊列管理的分組。在某些實施方式中,業(yè)務整形隊列中的至少某些共享對分組緩沖器169的訪問并且因而不需要擁有他們自身的單獨的分組緩沖器。參見圖6a和6b,響應于網(wǎng)絡接口驅動器164將與所接收的數(shù)據(jù)分組相關聯(lián)的描述符傳遞到數(shù)據(jù)業(yè)務整形模塊166(例如,t1、u1、t2、s1、u2、s2、s3、以及t3),數(shù)據(jù)業(yè)務整形模塊166從主傳輸隊列161接收所傳遞的數(shù)據(jù)分組描述符。
在階段420,數(shù)據(jù)業(yè)務整形模塊對與所接收的描述符相關聯(lián)的數(shù)據(jù)分組進行分類。在某些實施方式中,例如在圖6b中所示,數(shù)據(jù)業(yè)務整形模塊166基于用于將每個流的特性映射到對應的業(yè)務整形隊列的分類規(guī)則集合來對與所接收的描述符相關聯(lián)的數(shù)據(jù)分組進行分類。例如,業(yè)務整形模塊能夠基于分組報頭中的數(shù)據(jù)的四元組或五元組來對分組進行分類,包括源和目標ip地址、源和目標端口號、以及服務指示符類型中的四個或五個。在某些實施方式中,能夠更廣泛地使用報頭更少的數(shù)據(jù)字段來對分組進行分類。例如,在某些實施方式中,可以基于單個數(shù)據(jù)字段來對分組進行分類,諸如服務類型(tos)或服務質量(qos)字段(取決于使用的協(xié)議和協(xié)議版本)、文件類型字段、或端口號,這些字段中的每一個通常能夠與優(yōu)先級相關。在識別分組的相關特性之后,數(shù)據(jù)業(yè)務整形模塊166將所識別的特性與分類規(guī)則進行比較并且將分組指派給滿足分類規(guī)則的業(yè)務整形隊列。在某些實施方式中,業(yè)務整形模塊166維持“兜底”業(yè)務整形隊列,以用于處理基于他們的特定特性未指派給其他業(yè)務整形隊列的所有分組。
在某些實施方式中,每個業(yè)務整形隊列具有至少一個相關聯(lián)的傳輸速率規(guī)則。用于特定業(yè)務隊列的傳輸速率規(guī)則能夠指定網(wǎng)卡傳送存儲在特定業(yè)務隊列中的分組的流速率限制。參見圖6a-6d,數(shù)據(jù)業(yè)務整形模塊166能夠使得網(wǎng)卡168根據(jù)隊列的傳輸速率規(guī)則來傳送存儲在特定業(yè)務整形隊列中的分組。在某些實施方式中,傳輸速率規(guī)則能夠為絕對的或有條件的。類似地,傳輸速率規(guī)則能夠基于分組的數(shù)目或數(shù)據(jù)量。某些示例絕對傳輸速率規(guī)則包括1)無限制的傳輸;2)每秒傳送的最大分組數(shù)目;3)每秒傳送的平均分組數(shù)目;4)每秒傳送的最大比特;或5)每秒傳送的平均比特。在某些實施方式中,傳輸速率規(guī)則能夠包括以上類型的規(guī)則中的任意組合。例如,傳輸速率規(guī)則可以指定每秒的平均可允許比特或分組、以及每秒的最大比特或分組數(shù)目,以允許和/或容納業(yè)務的突發(fā)性。有條件的傳輸速率規(guī)則允許不同情形下的不同的絕對傳輸速率規(guī)則。例如,一個有條件的傳輸速率規(guī)則可以許可在與不同的業(yè)務整形隊列為空相對的該不同的業(yè)務整形隊列為滿的情形下的一個傳輸速率。另一有條件的傳輸規(guī)則可以許可取決于隊列中的分組的數(shù)目的不同的傳輸速率,例如,以允許在該隊列變得非所期望地滿的情形下更快地處理分組。以上規(guī)則為可以針對相應的業(yè)務整形隊列中的每個業(yè)務整形隊列而實現(xiàn)的廣泛的規(guī)則的示例。具體規(guī)則能夠例如由系統(tǒng)管理員來設置。
在階段430,數(shù)據(jù)業(yè)務整形模塊能夠確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸是否將被延遲。如果分組的分類導致其被指派給已經(jīng)存儲未發(fā)送分組(或其描述符)的業(yè)務整形隊列,則延遲分組的傳輸。
在階段440,如果數(shù)據(jù)業(yè)務整形模塊確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸將被延遲,數(shù)據(jù)業(yè)務整形模塊從主傳輸隊列中移除與第一數(shù)據(jù)分組相關聯(lián)的第一描述符并且基于分類的結果在對應的業(yè)務整形隊列中存儲第一描述符。例如,參見圖6a和6b,響應于確定網(wǎng)卡168對與第二流的描述符t1相關聯(lián)的數(shù)據(jù)分組的傳輸將被延遲,數(shù)據(jù)業(yè)務整形模塊166從主傳輸隊列161中移除描述符t1并且將描述符t1存儲在業(yè)務整形隊列165中。類似地,數(shù)據(jù)業(yè)務整形模塊166從主傳輸隊列161中移除第二流的描述符t2和t3并且將描述符t2和t3存儲在業(yè)務整形隊列165中。響應于確定網(wǎng)卡168對與第一流的描述符s1相關聯(lián)的數(shù)據(jù)分組的傳輸將被延遲,數(shù)據(jù)業(yè)務整形模塊166從主傳輸隊列161中移除描述符s1并且將描述符s1存儲在業(yè)務整形隊列163中。類似地,數(shù)據(jù)業(yè)務整形模塊166從主傳輸隊列161中移除第一流的描述符s2和s3并且將描述符s2和s3存儲在業(yè)務整形隊列163中。
從單個傳輸隊列中移除與被確定為將被延遲的業(yè)務流相關聯(lián)的描述符能夠解決稱作“隊頭阻塞”的排隊問題。如果先入先出(fifo)隊列的頭處的分組的傳輸被延遲、但是仍然保持在傳輸隊列中,該分組將阻塞與隊列中它之后所存儲的描述符相關聯(lián)的所有其他分組的處理(包括基于業(yè)務整形模塊所實現(xiàn)的業(yè)務整形規(guī)則將不被延遲的分組),引起“隊頭阻塞”問題。相反,對于基于業(yè)務整形規(guī)則被確定為將被延遲傳輸?shù)臄?shù)據(jù)分組,數(shù)據(jù)業(yè)務整形模塊166能夠傳遞與來自傳輸隊列的頭的分組相關聯(lián)的描述符。這一移除能夠允許繼續(xù)處理在隊列中存儲的描述符相關聯(lián)的其他分組,由此解決“隊頭阻塞”問題。進而,響應于從傳輸隊列中移除描述符,數(shù)據(jù)業(yè)務整形模塊166能夠將描述符轉移到對應的業(yè)務整形隊列,由此允許延遲的分組傳輸,而不丟棄描述符或其對應的分組。
再次參見圖6b,在某些實施方式中,如果數(shù)據(jù)業(yè)務整形模塊166確定網(wǎng)卡168對第一流中的數(shù)據(jù)分組(例如,與描述符s1相對應的數(shù)據(jù)分組)的傳輸將被延遲,數(shù)據(jù)業(yè)務整形模塊166將與第一流中的數(shù)據(jù)分組相關聯(lián)的描述符存儲在第一業(yè)務整形隊列(即,業(yè)務整形隊列163)中。如果數(shù)據(jù)業(yè)務整形模塊166確定網(wǎng)卡對不同于第一流的第二流中的數(shù)據(jù)分組(例如,與描述符t1相對應的數(shù)據(jù)分組)的傳輸將被延遲,數(shù)據(jù)業(yè)務整形模塊166將與第二流中的數(shù)據(jù)分組相關聯(lián)的描述符存儲在第二業(yè)務整形隊列(例如,業(yè)務整形隊列165)中。在某些實施方式中,能夠將與不同的流相關聯(lián)的分組傳遞到相同的業(yè)務整形隊列。也就是,業(yè)務整形模塊166能夠維持比業(yè)務整形模塊166所處理的流的數(shù)目更少的業(yè)務整形隊列,并且在眾多情況下,比其少得多的業(yè)務整形隊列。
在階段450,數(shù)據(jù)業(yè)務整形模塊使得網(wǎng)卡根據(jù)與相應的業(yè)務整形隊列相關聯(lián)的傳輸速率規(guī)則來傳送與存儲在業(yè)務整形隊列中的描述符相關聯(lián)的數(shù)據(jù)分組。例如,參見圖6b-6d,數(shù)據(jù)業(yè)務整形模塊166使得網(wǎng)卡168根據(jù)與業(yè)務整形隊列163相關聯(lián)的傳輸速率規(guī)則來以延遲方式傳送與存儲在業(yè)務整形隊列163中的描述符s1、s2以及s3相關聯(lián)的數(shù)據(jù)分組。數(shù)據(jù)業(yè)務整形模塊166還能夠使得網(wǎng)卡168根據(jù)與業(yè)務整形隊列165相關聯(lián)的傳輸速率規(guī)則來以延遲方式傳送與存儲在業(yè)務整形隊列165中的描述符t1、t2以及t3相關聯(lián)的數(shù)據(jù)分組。
在階段460,如果數(shù)據(jù)業(yè)務整形模塊確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸不會被延遲,數(shù)據(jù)業(yè)務整形模塊能夠使得網(wǎng)卡立即傳送與存儲在業(yè)務整形隊列中的描述符相關聯(lián)的數(shù)據(jù)分組。例如,如果對數(shù)據(jù)分組進行分類使得將其指派給具有允許無限制的傳輸速率的傳輸速率規(guī)則的業(yè)務整形隊列并且隊列為空,可以無延遲地立即傳送數(shù)據(jù)分組。按照圖6a-6d中所示的示例中地處理與描述符u1和u2相關聯(lián)的分組。類似地,如果將分組分類到為空并且沒有超過在其對應的傳輸速率規(guī)則中所識別的傳輸速率的業(yè)務整形隊列,可以立即傳送分組。
在某些實施方式中,網(wǎng)卡168通過使用資源來傳送數(shù)據(jù)分組。在某些實施方式中,資源為應用150、網(wǎng)絡接口驅動器164以及網(wǎng)卡168中的某些或全部所共享的存儲器緩沖器(例如,圖1和6a-6d中的分組緩沖器169)。例如,網(wǎng)卡168使用與數(shù)據(jù)分組相關聯(lián)的描述符來識別(共享存儲器中的)分組緩沖器169中的數(shù)據(jù)分組的地址,并且接著從分組緩沖器169傳送數(shù)據(jù)分組。在某些實施方式中,響應于使用分組緩沖器169來傳送數(shù)據(jù)分組,網(wǎng)卡168能夠使得分組緩沖器釋放用于存儲所傳送的分組的存儲器空間,使得該空間能夠用于存儲新的分組。
在階段470,數(shù)據(jù)業(yè)務整形模塊能夠向網(wǎng)絡接口驅動器通知對數(shù)據(jù)分組的成功傳輸。例如,參見圖6c,響應于經(jīng)由網(wǎng)卡168成功完成與描述符u1和u2相關聯(lián)的數(shù)據(jù)分組的(立即)傳輸,數(shù)據(jù)業(yè)務整形模塊166向網(wǎng)絡接口驅動器164通知對數(shù)據(jù)分組的成功傳輸。在某些實施方式中,數(shù)據(jù)業(yè)務整形模塊166能夠通過向網(wǎng)絡接口驅動器164轉發(fā)網(wǎng)卡168所生成的單個消息來向網(wǎng)絡接口驅動器164通知對數(shù)據(jù)分組的成功傳輸,其中,所述單個消息指示對與描述符u1和u2相關聯(lián)的數(shù)據(jù)分組的成功傳輸。在某些實施方式中,通過針對每個分組來將單獨的傳輸完成消息轉發(fā)到網(wǎng)絡接口驅動器164,數(shù)據(jù)業(yè)務整形模塊166能夠單獨地向網(wǎng)絡接口驅動器164通知與描述符u1和u2相關聯(lián)的數(shù)據(jù)分組中的每個數(shù)據(jù)分組的成功傳輸。
針對延遲的傳輸,能夠生成并且轉發(fā)類似的通信。例如,參見圖6d,響應于經(jīng)由網(wǎng)卡168成功完成與描述符t1、s1、t2、s2、t3以及s3相關聯(lián)的數(shù)據(jù)分組的(延遲)傳輸,數(shù)據(jù)業(yè)務整形模塊166向網(wǎng)絡接口驅動器164通知對數(shù)據(jù)分組的成功傳輸。在某些實施方式中,通過向網(wǎng)絡接口驅動器164轉發(fā)網(wǎng)卡168所生成的單個消息,數(shù)據(jù)業(yè)務整形模塊166能夠向網(wǎng)絡接口驅動器164通知對數(shù)據(jù)分組的成功傳輸,其中,所述單個消息指示對多個數(shù)據(jù)分組成功傳輸。在某些實施方式中,數(shù)據(jù)業(yè)務整形模塊166能夠單獨地向網(wǎng)絡接口驅動器164通知每個單獨的數(shù)據(jù)分組的成功傳輸。
圖5為使用網(wǎng)絡接口驅動器執(zhí)行的示例方法500來對網(wǎng)絡業(yè)務進行整形的流程圖。按照概述,所述方法500開始于階段510,其中網(wǎng)絡接口驅動器(諸如圖1和6a-6d中所示的網(wǎng)絡接口驅動器164)確定諸如網(wǎng)卡168的網(wǎng)卡是否成功傳送所接收的第一分組集合中的分組。在階段520,如果網(wǎng)絡接口驅動器確定成功傳送所接收的分組的第一集合中的分組,在將附加數(shù)據(jù)分組轉發(fā)到網(wǎng)絡接口驅動器之前,網(wǎng)絡接口驅動器將分組傳輸完成消息傳送到等待接收來自網(wǎng)絡接口驅動器的分組傳輸完成消息的應用。
以下參照圖6a-6d詳細描述圖5的流程圖中所示的方法。
詳細參見圖5,在階段510,網(wǎng)絡接口驅動器確定網(wǎng)卡是否成功傳送所接收的第一分組集合中的分組。例如,參見圖6c,響應于網(wǎng)卡168成功完成與描述符u1和u2相關聯(lián)的數(shù)據(jù)分組的傳輸,數(shù)據(jù)業(yè)務整形模塊166通過通信單個消息或多個消息向網(wǎng)絡接口驅動器164通知對數(shù)據(jù)分組的成功傳輸?;趤碜詳?shù)據(jù)業(yè)務整形模塊166的對數(shù)據(jù)分組的成功傳輸?shù)耐ㄖ?,網(wǎng)絡接口驅動器164確定網(wǎng)卡168成功傳送所接收的分組中的每個分組。
在階段520,響應于網(wǎng)絡接口驅動器確定成功傳送所接收的第一分組集合中的分組,在轉發(fā)附加數(shù)據(jù)分組到網(wǎng)絡接口驅動器之前,網(wǎng)絡接口驅動器將分組傳輸完成消息傳送到等待接收來自網(wǎng)絡接口驅動器的分組傳輸完成消息的應用。例如,參見圖6c,響應于確定網(wǎng)卡168已經(jīng)成功傳送來源于應用150c所發(fā)送的第三流的描述符u1相關聯(lián)的分組,網(wǎng)絡接口驅動器164將與描述符u1相對應的分組傳輸完成消息167(例如,圖6c中的m-u1)通信到應用150c。類似地,響應于確定網(wǎng)卡168成功傳送來源于應用150c發(fā)射的描述符u2相關聯(lián)的分組,網(wǎng)絡接口驅動器164將與描述符u2相對應的分組傳輸完成消息167(例如,圖6c中的m-u2)通信到應用150c。在某些實施方式中,傳輸完成消息167能夠較小(例如,32個字節(jié)或包括少數(shù)64比特的整數(shù))。在某些實施方式中,響應于從數(shù)據(jù)業(yè)務整形模塊166接收指示成功傳輸與描述符u1和u2相關聯(lián)的數(shù)據(jù)分組的單個消息(未示出),網(wǎng)絡接口驅動器164生成兩個單獨的傳輸完成消息(例如,圖6c中的m-u1和m-u2)并且按照成功傳輸數(shù)據(jù)分組的順序來將每個消息通信到對應的分組源,例如,應用150c。在某些實施方式中,響應于從數(shù)據(jù)業(yè)務整形模塊166接收指示成功傳輸與描述符u1和u2相關聯(lián)的數(shù)據(jù)分組中的每個數(shù)據(jù)分組的消息(未示出),網(wǎng)絡接口驅動器164能夠向對應的分組源(例如,應用150c)轉發(fā)所接收的消息作為傳輸完成消息。
參見圖6d,響應于確定網(wǎng)卡168已經(jīng)成功傳送起源于應用150b所發(fā)送的第二流的描述符t1相關聯(lián)的分組,網(wǎng)絡接口驅動器164將與描述符t1相對應的分組傳輸完成消息167(例如,圖6d中的m-t1)通信到應用150b。類似地,響應于確定網(wǎng)卡168已經(jīng)成功傳送起源于應用150a所發(fā)送的第一流的描述符s1相關聯(lián)的分組,網(wǎng)絡接口驅動器164將與描述符s1相對應的分組傳輸完成消息167(例如,圖6d中的m-s1)通信到應用150b。在某些實施方式中,響應于從數(shù)據(jù)業(yè)務整形模塊166接收指示成功傳輸與描述符t1、s1、t2、s2、t3以及s3相關聯(lián)的數(shù)據(jù)分組的單個消息(未示出),網(wǎng)絡接口驅動器164能夠生成六個單獨的傳輸完成消息(例如,圖6c中的m-t1、m-s1、m-t2、m-s2、m-t3以及m-s3)并且按照成功傳輸數(shù)據(jù)分組的順序(例如,按照t1、s1、t2、s2、t3以及s3的順序)來將每個消息通信到對應的分組源(例如,對于第一流的描述符t1、t2、t3,應用150a;以及,對于第二流的描述符s1、s2、s3,應用150b)。或者,隨著從數(shù)據(jù)業(yè)務整形模塊166接收每個消息,能夠僅發(fā)送一個消息到每個源(例如,一個消息到應用150a以及一個消息到應用150b),其中每個消息識別多個成功傳送的分組。
在某些實施方式中,應用150中的每個應用能夠被配置為在轉發(fā)附加數(shù)據(jù)分組到網(wǎng)絡接口驅動器164之前等待接收來自網(wǎng)絡接口驅動器164的分組傳輸完成消息。在某些實施方式中,應用150中的每個應用能夠被配置為在轉發(fā)相同的流中的附加數(shù)據(jù)分組到網(wǎng)絡接口驅動器164之前等待接收來自網(wǎng)絡接口驅動器164的針對特定流的數(shù)據(jù)分組的傳輸完成消息。例如,如在圖6c中所示,應用150c等待接收第三流中與來自網(wǎng)絡接口驅動器164的描述符u1相對應的數(shù)據(jù)分組的傳輸完成消息。參見圖6d,響應于應用150c接收與描述符u1相對應的傳輸完成消息,應用150c轉發(fā)相同的第三流的附加數(shù)據(jù)分組(例如,與如圖6d中所示的描述符u3和u4相對應的數(shù)據(jù)分組)到網(wǎng)絡接口驅動器164。按照這一方式,通過僅在應用150c接收到指示網(wǎng)卡168傳送的相同流的分組的分組傳輸完成消息時發(fā)送附加分組到網(wǎng)絡接口驅動器164,應用150c能夠在主傳輸隊列中維持針對每個流的少量的分組(例如,1或2或3個分組)。在某些實施方式中,響應于接收與特定流的描述符相對應的傳輸完成消息,應用能夠轉發(fā)與該特定流不同的流的附加數(shù)據(jù)分組到網(wǎng)絡接口驅動器164。
以下還參照圖7a-7d來描述圖3-5的流程圖中所示的方法,圖7a-7d為根據(jù)某些實施方式的表示數(shù)據(jù)業(yè)務整形系統(tǒng)的操作示例的框圖。在圖7a-7d中,使用與圖6a-6d的附圖標記相同的附圖標記,并且省略相同的描述。圖7a-7d示出了當應用150d發(fā)送不同的流(stream)或流(flow)的分組(例如,第四流中與描述符v1、v2、v3相對應的分組,以及第五流中與描述符w1、w2、w3相對應的分組)到網(wǎng)絡接口驅動器164時數(shù)據(jù)業(yè)務整形系統(tǒng)的操作。
在圖3中的階段310,網(wǎng)絡接口驅動器能夠接收由應用所生成并且轉發(fā)的第一數(shù)據(jù)分組集合,以由網(wǎng)卡傳輸。例如,參見圖7a,網(wǎng)絡接口驅動器164接收由應用150d所生成并且轉發(fā)的一個數(shù)據(jù)分組集合,以用于網(wǎng)卡168的傳輸。在圖7a中所示的示例中,應用150d按照連續(xù)順序來發(fā)送第四流中與描述符v1、v2以及v3相對應的三個分組。相同的應用150d按照連續(xù)順序來發(fā)送第五流中與描述符w1、w2以及w3相對應的三個分組。
在圖3中的階段320,網(wǎng)絡接口驅動器能夠將與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符存儲在主傳輸隊列161中。在某些實施方式中,網(wǎng)絡接口驅動器164按照應用150d發(fā)送分組的順序將與來自每個流的數(shù)據(jù)分組相關聯(lián)的描述符寫入主傳輸隊列161。例如,如在圖7a中所示,網(wǎng)絡接口驅動器164接收來自應用150d的六個數(shù)據(jù)分組并且將與分組相關聯(lián)的描述符(例如,描述符w1、w2、v1、v2、v3、w3)寫入主傳輸隊列161,以用于經(jīng)由網(wǎng)卡168來傳輸分組。網(wǎng)絡接口驅動器164從應用150d接收第四和第五流的分組,并且按照傳送他們的順序(例如,w1,接著w2,接著v1,接著v2,接著v3,接著w3)將對應的描述符(例如,對于第四流,v1、v2、v3;以及對于第五流,w1、w2、w3)寫入主傳輸隊列161。在某些實施方式中,在主傳輸隊列中,不同流的分組能夠被交織,同時維持每個流中的分組的接收順序。例如,在圖7a中所示的示例中,在主傳輸隊列中,不同流的分組被交織(即,按照w1、w2、v1、v2、v3、w3的順序),同時維持每個流中的分組的接收順序(例如,對于第四流,維持v1->v2-v3的順序;以及,對于第五流,維持w1->w2->w3的順序)。
在圖3中的階段330,網(wǎng)絡接口驅動器能夠將與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符(例如,w1、w2、v1、v2、v3、w3)傳遞到數(shù)據(jù)業(yè)務整形模塊166。
參見圖4,在階段410,數(shù)據(jù)業(yè)務整形模塊維持多個業(yè)務整形隊列并且從主傳輸隊列接收由網(wǎng)絡接口驅動器傳遞的數(shù)據(jù)分組的描述符。參見圖7a和7b,響應于網(wǎng)絡接口驅動器164將與所接收的數(shù)據(jù)分組相關聯(lián)的描述符傳遞到數(shù)據(jù)業(yè)務整形模塊166(例如,w1、w2、v1、v2、v3、以及w3),數(shù)據(jù)業(yè)務整形模塊166從主傳輸隊列161接收所傳遞的數(shù)據(jù)分組的描述符。
在圖4中的階段420,數(shù)據(jù)業(yè)務整形模塊對與所接收的描述符相關聯(lián)的數(shù)據(jù)分組進行分類。在某些實施方式中,例如如在圖7b中所示,數(shù)據(jù)業(yè)務整形模塊166基于用于將每個流的特性映射到對應的業(yè)務整形隊列的分類規(guī)則集合來對與所接收的描述符相關聯(lián)的數(shù)據(jù)分組進行分類。
在圖4中的階段430,數(shù)據(jù)業(yè)務整形模塊能夠確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸是否將被延遲。如果分組的傳輸導致將其指派給已經(jīng)存儲有未發(fā)送分組(或其描述符)的業(yè)務整形隊列,則延遲分組的傳輸。
在圖4中的階段440,如果數(shù)據(jù)業(yè)務整形模塊確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸將被延遲,數(shù)據(jù)業(yè)務整形模塊從主傳輸隊列中移除與第一數(shù)據(jù)分組相關聯(lián)的第一描述符,并且基于分類的結果在對應的業(yè)務整形隊列中存儲第一描述符。例如,參見圖7a和7c,響應于確定網(wǎng)卡168對與第五流的描述符w1和w2相關聯(lián)的數(shù)據(jù)分組的傳輸將被延遲,數(shù)據(jù)業(yè)務整形模塊166從主傳輸隊列161中移除描述符w1和w2,并且將描述符w1和w2存儲在業(yè)務整形隊列163中。
在圖4中的階段450,數(shù)據(jù)業(yè)務整形模塊使得網(wǎng)卡根據(jù)與相應的業(yè)務整形隊列相關聯(lián)的傳輸速率規(guī)則來傳送與存儲在業(yè)務整形隊列中的描述符相關聯(lián)的數(shù)據(jù)分組。例如,參見圖7b-7d,數(shù)據(jù)業(yè)務整形模塊166使得網(wǎng)卡168根據(jù)與業(yè)務整形隊列163相關聯(lián)的傳輸速率規(guī)則來按照延遲方式傳送與存儲在業(yè)務整形隊列163中的描述符w1、w2以及w3相關聯(lián)的數(shù)據(jù)分組。
在圖4中的階段460,如果數(shù)據(jù)業(yè)務整形模塊確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸不會被延遲,數(shù)據(jù)業(yè)務整形模塊能夠使得網(wǎng)卡立即傳送與存儲在業(yè)務整形隊列中的描述符相關聯(lián)的數(shù)據(jù)分組。例如,如果對數(shù)據(jù)分組進行分類以使得將其指派給具有允許無限制的傳輸速率的傳輸速率規(guī)則的業(yè)務整形隊列并且隊列為空,則可以立即在沒有延遲的情況下傳送數(shù)據(jù)分組。與描述符v1、v2和v3相關聯(lián)的分組如附圖7a-7d中所示示例那樣處理。
在圖4中的階段470,數(shù)據(jù)業(yè)務整形模塊能夠向網(wǎng)絡接口驅動器通知對數(shù)據(jù)分組的成功傳輸。例如,參見圖7c,響應于經(jīng)由網(wǎng)卡168(立即)成功完成與描述符v1、v2以及v3相關聯(lián)的數(shù)據(jù)分組的傳輸,數(shù)據(jù)業(yè)務整形模塊166向網(wǎng)絡接口驅動器164通知對數(shù)據(jù)分組的成功傳輸。在某些實施方式中,如在圖7c中所示,通過針對每個分組來轉發(fā)單獨的傳輸完成消息到網(wǎng)絡接口驅動器164,數(shù)據(jù)業(yè)務整形模塊166能夠單獨地向網(wǎng)絡接口驅動器164通知與描述符v1、v2以及v3相關聯(lián)的數(shù)據(jù)分組中的每個數(shù)據(jù)分組的成功傳輸。
對于延遲的傳輸,能夠生成并且轉發(fā)類似的通信。例如,參見圖7d,響應于經(jīng)由網(wǎng)卡168(延遲)成功完成與描述符w1、w2以及w3相關聯(lián)的數(shù)據(jù)分組的傳輸,數(shù)據(jù)業(yè)務整形模塊166向網(wǎng)絡接口驅動器164通知對數(shù)據(jù)分組的成功傳輸。
在圖5中的階段510,網(wǎng)絡接口驅動器確定網(wǎng)卡是否成功傳送所接收的第一分組集合中的分組。例如,參見圖7c,響應于網(wǎng)卡168成功完成與描述符v1、v2以及v3相關聯(lián)的數(shù)據(jù)分組的傳輸,數(shù)據(jù)業(yè)務整形模塊166通過通信單個消息或多個消息向網(wǎng)絡接口驅動器164通知對數(shù)據(jù)分組的成功傳輸?;趤碜詳?shù)據(jù)業(yè)務整形模塊166的對數(shù)據(jù)分組的成功傳輸?shù)耐ㄖ?,網(wǎng)絡接口驅動器164確定網(wǎng)卡168成功傳送所接收的分組中的每個分組。
在圖5中的階段520,響應于網(wǎng)絡接口驅動器確定成功傳送所接收的第一分組集合中的分組,在轉發(fā)附加數(shù)據(jù)分組到網(wǎng)絡接口驅動器之前,網(wǎng)絡接口驅動器將分組傳輸完成消息通信到等待接收來自網(wǎng)絡接口驅動器的分組傳輸完成消息的應用。例如,參見圖7c,響應于確定網(wǎng)卡168成功傳送來源于應用150d發(fā)送的第四流中與描述符v1相關聯(lián)的分組,網(wǎng)絡接口驅動器164將與描述符v1相對應的分組傳輸完成消息167(例如,圖7c中的m-v1)通信到應用150d。類似地,響應于確定網(wǎng)卡168成功傳送來源于應用150d發(fā)送的第四流中與描述符v2和v3相關聯(lián)的分組,網(wǎng)絡接口驅動器164將與描述符v2和v3相對應的兩個分組傳輸完成消息167(例如,圖7c中的m-v2和m-v3)通信到應用150d。在某些實施方式中,應用150d能夠被配置為在轉發(fā)附加數(shù)據(jù)分組到網(wǎng)絡接口驅動器164之前等待接收來自網(wǎng)絡接口驅動器164的分組傳輸完成消息。在某些實施方式中,應用150d中的每一個應用能夠被配置為在轉發(fā)相同流中的附加數(shù)據(jù)分組到網(wǎng)絡接口驅動器164之前等待接收來自網(wǎng)絡接口驅動器164的針對特定流中的數(shù)據(jù)分組的傳輸完成消息。例如,如在圖7c中所示,應用150d等待接收來自網(wǎng)絡接口驅動器164的第三流中與描述符v1相對應的數(shù)據(jù)分組的傳輸完成消息。參見圖7d,響應于應用150d接收與描述符v1相對應的傳輸完成消息,應用150d將相同的第四流中的附加數(shù)據(jù)分組(例如,如圖7d中所示的與描述符v4和v5相對應的數(shù)據(jù)分組)轉發(fā)到網(wǎng)絡接口驅動器164。按照這一方式,通過僅在其接收指示網(wǎng)卡168傳送相同流中的分組的分組傳輸完成消息時才發(fā)送附加分組到網(wǎng)絡接口驅動器164,應用150d能夠在主傳輸隊列中針對每個流維持少量的分組(例如,1或2或3個分組)。
參見圖7a-7d,通常,網(wǎng)絡業(yè)務屬于多個流(flow)或流(stream)(例如,第四流中與描述符v1、v2、v3相對應的分組,以及第五流中與w1、w2、w3相對應的分組)。每個流(flow)/流(stream)可以屬于特定的應用(例如,應用150d)或者去往特定的遠程位置。例如,多個流(flow)/流(stream)屬于相同的應用(例如,圖7a-7d中的應用150d)或者屬于不同的應用(例如,圖6a-6d中的應用150a-150c)。在任意給定時間,網(wǎng)絡設備可以處理成百或成千或成億的不同的流(flow)/流(stream),并且有時,可能需要放慢針對特定目標的業(yè)務或針對特定應用的業(yè)務。參見圖7a-7d,在某些實施方式中,通過附加與流(flow)/流(stream)相對應的隊列(例如,業(yè)務整形隊列162和163)并且放慢通過相同的隊列發(fā)送的所有的業(yè)務(例如,放慢通過業(yè)務整形隊列163發(fā)送的與描述符w1、w2、w3相關聯(lián)的所有的分組),數(shù)據(jù)業(yè)務整形模塊166能夠在沒有隊頭阻塞的情況下獨立地對從相同的應用150d發(fā)送的不同的流(flow)/流(stream)進行速率限制或業(yè)務整形。使用這一配置,無論應用如何將流放到那些隊列上(例如,從對應的不同的應用接收多個流,如在圖6a-6d中所示,或者,從相同的應用接收多個流,如在圖7a-7d中所示),都能夠在不產(chǎn)生隊頭阻塞或放棄任何分組的情況下選擇性地放慢流,并且不需要每個應用知曉從每個應用發(fā)送的業(yè)務如何能夠被分類以及業(yè)務整形。
以下還參照圖8a-8c來描述圖3-5中的流程圖中所示的方法,圖8a-8c為表示根據(jù)某些實施方式的數(shù)據(jù)業(yè)務整形系統(tǒng)的操作示例的框圖。在圖8a-8c中,使用與圖6a-6d相同的附圖標記,并且省略相同的描述。圖8a-8c示出了當主傳輸隊列161為主傳輸隊列161a-161c的集合時數(shù)據(jù)業(yè)務整形系統(tǒng)的操作。例如,主傳輸隊列161能夠為在多隊列nic中實現(xiàn)的多個隊列。在某些實施方式中,主傳輸隊列161a-161c的集合的數(shù)目小于速率限制器或業(yè)務整形隊列162a-162d的數(shù)目。例如,為了對成千上萬的流(flow)或流(stream)進行整形,網(wǎng)絡設備110能夠具有10~32個硬件隊列,同時具有安裝在其中的眾多更多的業(yè)務整形隊列以對成千上萬的流進行整形。
在圖3中的階段310,網(wǎng)絡接口驅動器能夠接收由應用150所生成并且轉發(fā)的一個數(shù)據(jù)分組集合,以由網(wǎng)卡傳輸。例如,參見圖8a,網(wǎng)絡接口驅動器164接收由應用150a-150c所生成并且轉發(fā)的一個數(shù)據(jù)分組集合,以由網(wǎng)卡168傳輸。在圖8a中所示的示例中,應用150a按照連續(xù)的順序來發(fā)送第一流中的與描述符s1、s2以及s3相對應的三個分組。應用150b按照連續(xù)的順序來發(fā)送第二流中的與描述符t1、t2以及t3相對應的三個分組。應用150c發(fā)送第三流中的與描述符u1和u3相對應的兩個分組。在某些實施方式中,網(wǎng)絡接口驅動器164按照應用150發(fā)送分組的順序來接收數(shù)據(jù)分組(例如,t1,接著u1,接著t2,接著s1,接著u2,接著s2,接著s3,接著t3)。
在圖3中的階段320,網(wǎng)絡接口驅動器能夠將與所接收的第一數(shù)據(jù)分組集合相關聯(lián)的描述符存儲在主傳輸隊列161a-161c的集合中。在某些實施方式中,網(wǎng)絡接口驅動器164為每個所接收的數(shù)據(jù)分組隨機選擇主傳輸隊列161a-161c中的一個,并且將對應的描述符寫入主傳輸隊列161中的所選擇的傳輸隊列中。例如,參見圖8a,網(wǎng)絡接口驅動器164將描述符t1、s1以及s3(按照t1、s1以及s3的順序)寫入主傳輸隊列161a,將描述符u1、t2以及u2(按照u1、t2以及u2的順序)寫入主傳輸隊列161b,以及將描述符t2、s2以及t3(按照s2和t3的順序)寫入主傳輸隊列161c。在某些實施方式中,在每個主傳輸隊列中,不同的流的分組能夠被交織,同時維持每個流中的分組的接收順序。例如,在圖8a中所示的示例中,在主傳輸隊列161a中,不同的流的分組被交織(即,按照t1、s1、s3的順序),同時維持每個流中的分組的接收順序(例如,對于第三流,維持s1->s3的順序)。
在圖3中的階段330,網(wǎng)絡接口驅動器164能夠將與所接收的第一數(shù)據(jù)分組集合相關聯(lián)并且存儲在每個主傳輸隊列中的描述符(例如,主傳輸隊列161a中存儲的t1、s1、s3)傳遞到數(shù)據(jù)業(yè)務整形模塊166。
參見圖4,在階段410,數(shù)據(jù)業(yè)務整形模塊維持多個業(yè)務整形隊列并且從主傳輸隊列161a-161c中的每個接收由網(wǎng)絡接口驅動器所傳遞的數(shù)據(jù)分組的描述符。參見圖8a和8b,響應于網(wǎng)絡接口驅動器164將與所接收的數(shù)據(jù)分組相關聯(lián)的描述符傳遞到數(shù)據(jù)業(yè)務整形模塊166,數(shù)據(jù)業(yè)務整形模塊166從主傳輸隊列161a接收數(shù)據(jù)分組的描述符(例如,描述符t1、s1、s3),從主傳輸隊列161b接收數(shù)據(jù)分組的描述符(例如,描述符u1、t2、u2),以及從主傳輸隊列161c接收數(shù)據(jù)分組的描述符(例如,描述符s2、t3)。在某些實施方式中,數(shù)據(jù)業(yè)務整形模塊維持多個業(yè)務整形隊列并且從每個主傳輸隊列接收網(wǎng)絡接口驅動器所傳遞的數(shù)據(jù)分組的描述符。例如,參見圖8a-8c,數(shù)據(jù)業(yè)務整形模塊166維持多個業(yè)務整形隊列(例如,業(yè)務整形隊列162a-162d)。
在圖4中的階段420,數(shù)據(jù)業(yè)務整形模塊166對與來自每個主傳輸隊列的所接收的描述符相關聯(lián)的數(shù)據(jù)分組進行分類。在階段430,數(shù)據(jù)業(yè)務整形模塊166能夠確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸是否將被延遲。如果其分類導致其被指派給已經(jīng)存儲有未發(fā)送的分組(或其描述符),分組的傳輸被延遲。
在圖4中的階段440,如果數(shù)據(jù)業(yè)務整形模塊確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸將被延遲,數(shù)據(jù)業(yè)務整形模塊從每個主傳輸隊列中移除與第一數(shù)據(jù)分組相關聯(lián)的第一描述符,并且基于分類的結果將第一描述符存儲在對應的業(yè)務整形隊列中。例如,參見圖8a和8b,對于主傳輸隊列161a,數(shù)據(jù)業(yè)務整形模塊確定網(wǎng)卡168對與存儲在主傳輸隊列161a中的描述符t1、s1、s3相關聯(lián)的數(shù)據(jù)分組的傳輸將被延遲。響應于確定網(wǎng)卡168對與第二流的描述符t1相關聯(lián)的數(shù)據(jù)分組的傳輸將被延遲,數(shù)據(jù)業(yè)務整形模塊166從主傳輸隊列161a中移除描述符t1,并且將描述符t1存儲在業(yè)務整形隊列162c中。類似地,數(shù)據(jù)業(yè)務整形模塊166從主傳輸隊列161a中移除第一流的描述符s1并且將描述符s1存儲在業(yè)務整形隊列162b中。數(shù)據(jù)業(yè)務整形模塊166還從主傳輸隊列161a中移除描述符s3并且將描述符s3存儲在業(yè)務整形隊列162b中。按照類似的方式,如在圖8a和8b中所示,對于主傳輸隊列161b,數(shù)據(jù)業(yè)務整形模塊166從主傳輸隊列161b中移除第三流的描述符u1并且將描述符u1存儲在業(yè)務整形隊列162a中,從主傳輸隊列161b中移除第二流的描述符t2并且將描述符t2存儲在業(yè)務整形隊列162c中,以及從主傳輸隊列161b中移除第三流的描述符u2并且將描述符u2存儲在業(yè)務整形隊列162a中。按照類似的方式,如在圖8a和8b中所示,對于主傳輸隊列161c,數(shù)據(jù)業(yè)務整形模塊166從主傳輸隊列161c中移除第一流的描述符s2并且將描述符s2存儲在業(yè)務整形隊列162b中,以及從主傳輸隊列161c中移除第二流的描述符t3并且將描述符t3存儲在業(yè)務整形隊列162c中。
在圖4中的階段450,數(shù)據(jù)業(yè)務整形模塊使得網(wǎng)卡根據(jù)與相應的業(yè)務整形隊列相關聯(lián)的傳輸速率規(guī)則來傳送與存儲在業(yè)務整形隊列中的描述符相關聯(lián)的數(shù)據(jù)分組。例如,參見圖8b-8c,數(shù)據(jù)業(yè)務整形模塊166使得網(wǎng)卡168根據(jù)與業(yè)務整形隊列162b相關聯(lián)的傳輸速率規(guī)則來按照延遲方式傳送與存儲在業(yè)務整形隊列162b中的描述符s1、s2以及s3相關聯(lián)的數(shù)據(jù)分組。數(shù)據(jù)業(yè)務整形模塊166還能夠使得網(wǎng)卡168根據(jù)與業(yè)務整形隊列162c相關聯(lián)的傳輸速率規(guī)則來按照延遲方式傳送與存儲在業(yè)務整形隊列162c中的描述符t1、t2以及t3相關聯(lián)的數(shù)據(jù)分組。
在圖4中的階段460,如果數(shù)據(jù)業(yè)務整形模塊確定網(wǎng)卡對與所接收的第一描述符相關聯(lián)的第一數(shù)據(jù)分組的傳輸不會被延遲,數(shù)據(jù)業(yè)務整形模塊能夠使得網(wǎng)卡立即傳送與存儲在業(yè)務整形隊列中的描述符相關聯(lián)的數(shù)據(jù)分組。例如,如果對數(shù)據(jù)分組進行分類以使得將其指派給具有允許無限制的傳輸速率的傳輸速率規(guī)則的業(yè)務整形隊列并且隊列為空,則可以在沒有延遲的情況下立即傳送數(shù)據(jù)分組。按照圖8a-8c中所示的示例來處理與描述符u1和u2相關聯(lián)的分組。
在圖4中的階段470,數(shù)據(jù)業(yè)務整形模塊能夠向網(wǎng)絡接口驅動器通知對數(shù)據(jù)分組的成功傳輸。例如,參見圖8b和8c,響應于經(jīng)由網(wǎng)卡168(立即)成功完成與描述符u1和u2相關聯(lián)的數(shù)據(jù)分組的傳輸,數(shù)據(jù)業(yè)務整形模塊166向網(wǎng)絡接口驅動器164通知對數(shù)據(jù)分組的成功傳輸。例如,參見圖8b和8c,響應于經(jīng)由網(wǎng)卡168來(延遲)成功完成與描述符t1、s1、t2、t3以及s3相關聯(lián)的數(shù)據(jù)分組的傳輸,數(shù)據(jù)業(yè)務整形模塊166向網(wǎng)絡接口驅動器164通知對數(shù)據(jù)分組的成功傳輸。
參見圖5,在階段510,網(wǎng)絡接口驅動器確定網(wǎng)卡是否成功傳送所接收的第一分組集合中的分組。
在階段520,響應于網(wǎng)絡接口驅動器確定成功傳送所接收的第一分組集合中的分組,在轉發(fā)附加數(shù)據(jù)分組到網(wǎng)絡接口驅動器之前,網(wǎng)絡接口驅動器將分組傳輸完成消息通信到等待接收來自網(wǎng)絡接口驅動器的分組傳輸完成消息的應用。例如,參見圖8c,響應于確定網(wǎng)卡168成功傳送來源于應用150c發(fā)送的第三流中與描述符u1相關聯(lián)的分組,網(wǎng)絡接口驅動器164將與描述符u1相對應的分組傳輸完成消息167(例如,圖8c中的m-u1)通信到應用150c。類似地,響應于確定網(wǎng)卡168成功傳送來源于應用150c發(fā)送的第三流中與描述符u2相關聯(lián)的分組,網(wǎng)絡接口驅動器164將與描述符u2相對應的分組傳輸完成消息167(例如,圖8c中的m-u2)通信到應用150c。類似地,在某些實施方式中,響應于從數(shù)據(jù)業(yè)務整形模塊166接收指示成功傳輸與描述符t1、s1、t2、s2、t3以及s3相關聯(lián)的數(shù)據(jù)分組的消息(未示出),網(wǎng)絡接口驅動器164能夠生成六個單獨的傳輸完成消息(例如,圖8c中的m-t1、m-s1、m-t2、m-s2、m-t3以及m-s3),并且按照成功傳輸數(shù)據(jù)分組的順序(例如,按照t1、s1、t2、s2、t3以及s3的順序)來將每個消息通信到對應的分組源。
參見圖8c,在某些實施方式中,應用150中的每個應用能夠被配置為在將附加數(shù)據(jù)分組轉發(fā)到網(wǎng)絡接口驅動器164之前等待接收來自網(wǎng)絡接口驅動器164的分組傳輸完成消息。在某些實施方式中,應用150中的每個應用能夠被配置為在將相同的流中的附加數(shù)據(jù)分組轉發(fā)到網(wǎng)絡接口驅動器164之前等待接收來自網(wǎng)絡接口驅動器164的針對特定流中的數(shù)據(jù)分組的傳輸完成消息。
參見圖8a-8c,在某些實施方式中,應用150或網(wǎng)絡接口驅動器164可以按照配置他們的任意方式在主傳輸隊列161a-161c的集合上散布流(flow)/流(stream)以及他們對應的分組(例如,在隊列上隨機散布,或者,在隊列上循環(huán)散布)。在某些實施方式中,應用150或網(wǎng)絡接口驅動器164可以按照相同的方式在該主傳輸隊列的集合上散布流(flow)/流(stream)以及他們的對應的分組,而不論主傳輸隊列的數(shù)目。在某些實施方式中,應用150或網(wǎng)絡接口驅動器164被配置成不知曉數(shù)據(jù)業(yè)務整形模塊166、業(yè)務整形隊列162a-162d、以及在那些隊列中如何對業(yè)務進行分類的實施方式細節(jié)。例如,來自在虛擬機中執(zhí)行的應用的業(yè)務能夠被整形或限制速率,而沒有隊頭阻塞并且不用向虛擬機的管理員通知業(yè)務整形隊列以及每個隊列上的分類規(guī)則的細節(jié)。利用圖8a-8c中圖示的配置,分組能夠盡快離開主傳輸隊列并且在分組離開主傳輸隊列之后能夠被分類在業(yè)務整形隊列中,而不返回完成消息。在某些實施方式中,如在圖8a-8c中所示,不返回完成消息,直到分組離開業(yè)務整形隊列,使得完成消息被無序返回,即,按照與將分組保存在主傳輸隊列中的順序不同的順序,并且不在fifo中,由此允許發(fā)送更快的流的應用發(fā)送比發(fā)送更慢的流的另一應用更多的附加分組。參見圖8a-8c,其中數(shù)據(jù)業(yè)務整形模塊166在具有多個主傳輸隊列161a-161c的系統(tǒng)中實現(xiàn),網(wǎng)絡接口驅動器164能夠返回“無序”的完成消息(例如,完成消息m-u1、m-u2、m-t2的順序不同于將對應的分組保存在主傳輸隊列161b中的順序,即,u1、t2、u2;參見圖8a和8c),指示每個分組是基于預定的隊列指派規(guī)則而放在正確的隊列中,還是分組業(yè)務“隨機”散布在隊列上。
圖9為示例計算系統(tǒng)140的框圖。按照說明性的實施方式,示例計算系統(tǒng)140適于實現(xiàn)本文中所描述的計算機化的組件中使用。按照概述,計算系統(tǒng)140包括用于根據(jù)指令來執(zhí)行動作的至少一個處理器148,以及用于存儲指令和數(shù)據(jù)的一個或多個存儲器設備144或149。圖示的示例計算系統(tǒng)140包括經(jīng)由總線142來與存儲器144通信的一個或多個處理器148,具有用于連接到網(wǎng)絡(未示出)的網(wǎng)絡接口端口146的至少一個網(wǎng)絡接口控制器143,以及其他組件145(例如,輸入/輸出(“i/o”)組件147)。通常,處理器148將執(zhí)行從存儲器所接收的指令。所圖示的處理器148并入或直接連接到高速緩存存儲器149。在某些實例中,從存儲器144讀取指令到高速緩存存儲器149中并且由處理器148通過高速緩存存儲器149執(zhí)行。
更詳細地,處理器148可以為處理指令的任意邏輯電路,例如,從存儲器144或高速緩存149中提取的指令。在眾多實施方式中,處理器148為微處理器單元或專用處理器。計算設備140可以基于任意處理器、或處理器集合,其能夠如本文中所述的操作。處理器148可以為單核或多核處理器。處理器148可以為多個不同的處理器。
存儲器144可以為適于存儲計算機可讀數(shù)據(jù)的任意設備。存儲器144可以為具有固定儲存器的設備或者用于讀取可移動存儲介質的設備。示例包括以下中的所有形式,非易失性存儲器、介質和存儲器設備、半導體存儲器設備(例如,eprom、eeprom、sdram、以及閃存設備)、磁盤、磁光盤、以及光盤(例如,cdrom、dvd-rom、或藍光
高速緩存存儲器149通常是為了快速讀取時間而放置在非常接近處理器148的計算機存儲器的形式。在某些實施方式中,高速緩存存儲器149為處理器148的一部分或者與其在相同的芯片上。在某些實施方式中,存在多級高速緩存存儲器149,例如,l2和l3高速緩存層。
網(wǎng)絡接口控制器143經(jīng)由網(wǎng)絡接口146(有時稱作網(wǎng)絡接口端口)來管理數(shù)據(jù)交換。網(wǎng)絡接口控制器143為網(wǎng)絡通信而處理osi模型的物理層和數(shù)據(jù)鏈路層。在某些實施方式中,網(wǎng)絡接口控制器的任務中的某些任務由處理器148中的一個或多個來處理。在某些實施方式中,網(wǎng)絡接口控制器143為處理器148的一部分。在某些實施方式中,計算系統(tǒng)140具有由單個控制器143控制的多個網(wǎng)絡接口146。在某些實施方式中,計算系統(tǒng)140具有多個網(wǎng)絡接口控制器143。在某些實施方式中,每個網(wǎng)絡接口146為物理網(wǎng)絡鏈路(例如,5類以太網(wǎng)鏈路)的連接點。在某些實施方式中,網(wǎng)絡接口控制器143支持無線網(wǎng)絡連接并且接口端口146為無線(例如,無線電)接收機/傳送機(例如,用于ieee802.11協(xié)議、近場通信“nfc”、藍牙、ant、或任意其他無線協(xié)議中的任意者)。在某些實施方式中,網(wǎng)絡接口控制器143實現(xiàn)諸如以太網(wǎng)的一個或多個網(wǎng)絡協(xié)議。通常,計算設備140通過網(wǎng)絡接口146經(jīng)由物理或無線鏈路來與其他計算設備交換數(shù)據(jù)。網(wǎng)絡接口146可以直接鏈接到另一設備,或者經(jīng)由例如為網(wǎng)絡設備(諸如集線器、網(wǎng)橋、交換機、或路由器)的中間設備來鏈接到另一設備,將計算設備140連接到諸如互聯(lián)網(wǎng)的數(shù)據(jù)網(wǎng)絡。
計算系統(tǒng)140可以包括或者提供用于一個或多個輸入或輸出(“i/o”)設備的接口。輸入設備包括但不限于鍵盤、麥克風、觸摸屏、腳踏開關、傳感器、midi設備、以及諸如鼠標或軌跡球的指針設備。輸出設備包括但不限于視頻顯示器、揚聲器、點字終端、燈、midi設備、以及2維或3維打印機。
其他組件145可以包括i/o接口、外部串行設備端口、以及任意附加的協(xié)同處理器。例如,計算系統(tǒng)140可以包括接口(例如,通用串行總線(usb)接口),以用于連接輸入設備、輸出設備、或附加的存儲器設備(例如,便攜式閃驅或外部介質驅動)。在某些實施方式中,計算設備140包括諸如協(xié)同處理器的附加設備145,例如,數(shù)學協(xié)同處理器能夠輔助處理器148進行高準確性或復雜的計算。
本說明書中描述的主題以及操作的實施方式能夠在數(shù)字電子電路中、或者嵌入為有形介質、固件、或硬件的計算機軟件中實現(xiàn),包括本說明書中公開的結構及其結構上的等價物、或者他們中的一個或多個的組合。本說明書中描述的主題的實施方式能夠被實現(xiàn)為嵌入在有形介質上的一個或多個計算機程序,即,編碼在一個或多個計算機存儲介質上以由數(shù)據(jù)處理裝置執(zhí)行或者用于控制數(shù)據(jù)處理裝置的操作的計算機程序指令的一個或多個模塊。計算機存儲介質能夠為計算機可讀存儲設備、計算機可讀存儲基底、隨機或順序存取存儲器陣列或設備、或他們中的一個或多個的組合,或者包括在其中。計算機存儲介質還能夠為一個或多個單獨的組件或介質(例如,多cd、盤、或其他存儲設備),或者包括在其中。計算機存儲介質還可以為有形的以及非暫時性的。
本說明書中描述的操作能夠被實現(xiàn)為數(shù)據(jù)處理裝置對存儲在一個或多個計算機可讀存儲設備上的數(shù)據(jù)或者從其他源接收的數(shù)據(jù)執(zhí)行的操作。
計算機程序(還被稱為程序、軟件、軟件應用、腳本、或代碼)能夠以任意形式的編程語言來編寫,包括經(jīng)編譯或解釋型的語言、聲明或過程語言,并且其能夠以任意形式來部署,包括獨立程序或者包括模塊、組件、子例程、對象、或適于在計算環(huán)境中使用的其他單元。計算機程序可以但不需要與文件系統(tǒng)中的文件相對應。程序能夠被存儲在托管其他程序或數(shù)據(jù)的文件的一部分中(例如,存儲在標記語言文檔中的一個或多個腳本),能夠存儲在專用于所討論的程序的單個文件中,或者能夠存儲在多個協(xié)同文件中(例如,存儲一個或多個模塊、子程序、或部分代碼的文件)。能夠部署計算機程序以在一個計算機上或多個計算機上執(zhí)行,所述一個計算機或多個計算機位于一個地點或者分布在多個地點并且由通信網(wǎng)絡互連。通信網(wǎng)絡的示例包括局域網(wǎng)(“l(fā)an”)和廣域網(wǎng)(“wan”)、互連網(wǎng)絡(例如,互聯(lián)網(wǎng))、以及對等網(wǎng)絡(例如,對等點對點網(wǎng)絡)。
本說明書中描述的過程和邏輯流程能夠由一個或多個可編程處理器執(zhí)行,所述一個或多個可編程處理器執(zhí)行一個或多個計算機程序以通過操作輸入數(shù)據(jù)并且生成輸出來執(zhí)行動作。過程和邏輯流程還能夠由同樣能夠實現(xiàn)為專用邏輯電路的裝置來執(zhí)行,例如,fpga(現(xiàn)場可編程門陣列)或asic(專用集成電路)。這樣的特殊用途電路可以稱作計算機處理器,即使其不是通用處理器。
雖然本說明書包含眾多特定的實施方式細節(jié),但是,不應該將這些解釋為限制可以要求保護的任意發(fā)明的范圍,而是應該解釋為對特定于特定發(fā)明的特定實施方式的特征的描述。在單獨的實施方式的場境中在本說明書中描述的某些特征在單個實施方式中還能夠以組合的方式來實現(xiàn)。相反地,在單個實施方式的場境中描述的各種特征還能夠分別在多個實施方式中實現(xiàn)或者在任意合適的子組合中實現(xiàn)。此外,盡管可以如上地將特征描述為以某些組合來起作用并且甚至初始地這樣要求,來自要求保護的組合的一個或多個特征能夠在某些情況下從組合中刪除,并且要求保護的組合可以指向子組合或子組合的變型。
類似地,雖然按照特定順序在附圖中描繪了各操作,不應該將這理解為要求這樣的操作按照所示的特定順序或連續(xù)順序來執(zhí)行,或者理解為要求執(zhí)行所有圖示的操作,以達到期望的結果。在某些情形下,多任務以及并行處理可以是有利的。此外,以上描述的實施方式中的各種系統(tǒng)組件的分離不應該被理解為在所有的實施方式中要求這樣的分離,并且應該理解,所描述的程序組件和系統(tǒng)通常能夠一起集成在單個軟件產(chǎn)品中或者封裝成多個軟件產(chǎn)品。
對“或”的引用可以解釋為包括性的,使得使用“或”描述的任意術語可以指示所描述的術語中的單個、多個、以及全部中的任意者。標記“第一”、“第二”、“第三”等等不一定意指指示排序并且通常僅用于在相同或類似的項或元素之間進行區(qū)分。
因而,已經(jīng)描述了主題的特定實施方式。其他實施方式在以下權利要求的范圍內(nèi)。在某些情況下,在權利要求中記載的動作能夠按照不同的順序來執(zhí)行并且仍然達到期望的結果。除此之外,在所附附圖中描繪的過程不一定要求所示的特定順序、或者按照連續(xù)的順序,以達到期望的結果。在某些實施方式中,可以利用多任務或并行處理。