本申請是2014年6月2日提交的美國專利申請第14/293,438號的繼續(xù)申請,美國專利申請第14/293,438號要求了于2014年5月8日提交的美國臨時專利申請第61/990,378號的提交日的優(yōu)先權(quán),在此通過引用將該申請的公開內(nèi)容并入。
背景技術:
計算機網(wǎng)絡化和電信中,計算設備彼此發(fā)送消息并且經(jīng)常在繼續(xù)之前必須等待響應。為避免無限期地等待,該計算設備可以包括超時機制,當其被觸發(fā)時,警告計算設備執(zhí)行一些動作。例如,如果在超時期間未收到響應,則計算設備可以重發(fā)消息或關閉連接。超時的持續(xù)時間通?;陬A計應有響應的時間量。
隨著計算設備和網(wǎng)絡化基礎設施迅速增加,它們能夠更高速地處理更多消息。因此,超時所需的持續(xù)時間已減少。這對于實現(xiàn)能有效、準確且可靠地設置和處理具有短持續(xù)時間的超時的網(wǎng)絡超時機制產(chǎn)生了挑戰(zhàn)。
傳統(tǒng)的超時機制是基于實現(xiàn)于軟件中的網(wǎng)絡超時。一個示例是在數(shù)據(jù)結(jié)構(gòu)中調(diào)度超時請求,每當發(fā)生內(nèi)核時鐘中斷就檢查超時請求。問題是內(nèi)核時鐘中斷成本高并且可能不能足夠頻繁地發(fā)生以可靠地觸發(fā)具有短持續(xù)時間的超時。其它超時機制利用軟件中實現(xiàn)的忙循環(huán)。忙循環(huán)可以容納具有較短時間持續(xù)的超時,但是它可能在所述延遲的持續(xù)時間內(nèi)占用CPU線程,因而計算效率較差。
技術實現(xiàn)要素:
本公開涉及設置細粒度超時。例如,具有發(fā)送(TX)隊列和接收(RX)隊列的大集合的網(wǎng)絡控制器可以被單獨地指定給用戶模式進程(例如,使用現(xiàn)有SR-IOV硬件)。用戶模式或內(nèi)核模式軟件可以高效地輪詢所述接收隊列以檢查傳入的分組,并且可以以相對低的成本直接地將分組緩沖入隊到任一種類型的隊列。網(wǎng)絡控制器還可以將分組從其TX隊列中的一個高效地轉(zhuǎn)移到其RX隊列中的一個,而不浪費實際網(wǎng)絡帶寬(如,支持“環(huán)回”)。網(wǎng)絡控制器可以將當前在TX隊列頭部的分組的發(fā)送延遲在該TX分組描述符中指定的間隔。例如,網(wǎng)絡控制器可以具有能夠提供微秒或更小量級的精度的內(nèi)部時鐘,因而可以將兩個分組從TX隊列中移出,并且以不短于第二個分組的分組描述符中指定的延遲來發(fā)送第二個分組。第一主機上的線程可以以零發(fā)送延遲向第二遠程主機發(fā)送遠程過程調(diào)用(RPC)消息,之后以例如137usec延遲向其自身發(fā)送短超時消息。如果第一主機首先接收到RPC響應,則該RPC被視為成功。然而,如果第一主機首先接收到其自身的超時消息,則它可以將該RPC視為已超時。
本公開的一方面提供了一種方法,包含由一個或多個處理器在網(wǎng)絡上向外部發(fā)送數(shù)據(jù)消息,該數(shù)據(jù)消息激發(fā)響應消息,并且由一個或多個處理器在內(nèi)部發(fā)送超時消息,該超時消息與數(shù)據(jù)消息對應并且故意地被延遲預定的持續(xù)時間。該方法進一步包含由一個或多個處理器接收響應消息和超時消息中的至少一個,并且由一個或多個處理器確定響應消息或超時消息中至少一個的哪個被最先接收。如果所述超時消息被最先接收,則該方法進一步包含將與數(shù)據(jù)消息關聯(lián)的請求識別為已超時。
本公開的另一方面提供了一種系統(tǒng),包含一個或多個處理器和與一個或多個處理器耦接的存儲器。該存儲器包括可由一個或多個處理器運行的指令,用以在網(wǎng)絡上向外部發(fā)送數(shù)據(jù)消息,該數(shù)據(jù)消息激發(fā)響應消息,在內(nèi)部發(fā)送超時消息,該超時消息與數(shù)據(jù)消息對應并且故意地延遲預定的持續(xù)時間,接收響應消息和超時消息的至少一者,確定響應消息或超時消息的至少一者的哪個被最先接收,并且如果超時消息被最先接收,則將與數(shù)據(jù)消息關聯(lián)的請求識別為已超時。
本公開的又一方面提供了一種記錄指令的非暫態(tài)計算機可讀介質(zhì),當指令被一個或多個處理器運行時導致該一個或多個處理器執(zhí)行方法。這種方法包含在網(wǎng)絡上向外部發(fā)送數(shù)據(jù)消息,該數(shù)據(jù)消息激發(fā)響應消息,在內(nèi)部發(fā)送超時消息,該超時消息與數(shù)據(jù)消息對應并且故意地延遲了預定的持續(xù)時間,接收響應消息和超時消息中的至少一個,確定響應消息或超時消息的至少一者中哪個被最先接收,并且如果超時消息本最先接收,則將與數(shù)據(jù)消息關聯(lián)的請求識別為已超時。
附圖說明
圖1是根據(jù)本公開的方面的示例計算機系統(tǒng)的示意圖。
圖2是根據(jù)本公開的方面的示例系統(tǒng)的圖。
圖3A-D示出了根據(jù)本公開的方面的網(wǎng)絡消息的示例流。
圖4A-D示出了根據(jù)本公開的方面的網(wǎng)絡消息的另一示例流。
圖5是根據(jù)本公開的方面的實現(xiàn)網(wǎng)絡超時的示例方法的框圖。
具體實施方式
本技術一般地涉及用于網(wǎng)絡通信的超時機制。該機制可以通過利用在內(nèi)部向網(wǎng)絡接口控制器(NIC)發(fā)送的故意延遲的超時消息傳輸來觸發(fā)超時。這可以允許,例如,計算設備利用底層網(wǎng)絡硬件來監(jiān)視流量消息并且在適當時生成超時。
該超時機制可以包括定制的超時分組(custom timeout packets),其每一個與一個或多個傳統(tǒng)數(shù)據(jù)分組(如,RPC、HTTP)對應。超時分組和數(shù)據(jù)分組一起在一個或多個發(fā)送隊列上。每個超時分組可以與數(shù)據(jù)字段關聯(lián),該數(shù)據(jù)字段允許該機制將該分組的發(fā)送故意延遲預定的持續(xù)時間。一示例中,所述數(shù)據(jù)字段可以存儲與延遲的持續(xù)時間關聯(lián)的時間值。所述數(shù)據(jù)字段可以被包含在超時分組內(nèi)(如,頭部字段或主體內(nèi))或者可以與該分組分離,例如在該機制可訪問的單獨的數(shù)據(jù)結(jié)構(gòu)中(如,傳輸分組描述符)。時間值可以具有次微秒分辨率并且是使用該機制生成的時基的絕對時間或相對時間(如,相對于其入隊的時間)。
延遲的持續(xù)時間可以是可定制的并且可以非常接近于網(wǎng)絡往返時間的長度或略微長于用于運行諸如RPC的遠程交互的典型時間。當經(jīng)過了延遲,NIC經(jīng)其硬件環(huán)回功能向主機發(fā)送超時分組。如果超時分組先于對于相應的數(shù)據(jù)分組的響應到達,則與該數(shù)據(jù)分組關聯(lián)的過程、任務、請求等被視為已超時。例如,主機可以停止等待對于該數(shù)據(jù)分組的響應,和/或可以重新發(fā)送新的數(shù)據(jù)分組。另一方面,如果該響應在超時分組到達前到來,則沒有超時,并且NIC可以在超時分組被發(fā)送之前中止它或者簡單地當接收到超時分組時忽略它。
NIC可以確定它是否應當以多種方式中的任意一種中止超時分組。例如,一個途徑是將第二“門鈴”與每個發(fā)送隊列關聯(lián)。門鈴是I/O地址空間的小區(qū)域,主機軟件在其中寫入值以告知NIC它已將N個條目添加到發(fā)送隊列。一示例中,第二門鈴將允許主機軟件指令NIC從發(fā)送隊列中移除最開始的N個條目,并且丟棄它們。這將允許主機中止一個或多個超時分組。根據(jù)另一示例,只有當最開始的N個條目攜帶延遲值,例如N=1時,第二門鈴才將允許主機軟件指令NIC移除它們。這將只從發(fā)送隊列中刪除超時分組而非常規(guī)分組。
一示例中,該技術可以包括具有用于處理網(wǎng)絡分組(如,RPC、HTTP)的多個發(fā)送隊列和接收隊列的網(wǎng)絡控制器。每個隊列可以被單獨地指定給內(nèi)核模式或用戶模式軟件,其可以高效地輪詢所述接收隊列以檢查傳入的分組并且能夠以相對低的計算和/或時間成本將分組直接地入隊到任意類型的隊列。NIC可以將分組從其自身發(fā)送隊列中的一個傳輸?shù)狡渥陨斫邮贞犃兄械囊粋€,而不使用實際網(wǎng)絡帶寬。NIC可以將當前在發(fā)送隊列頭部的超時分組的發(fā)送故意延遲在傳輸分組描述符(如,延遲字段)中指定的間隔。所述間隔定時可以利用NIC內(nèi)部的時鐘,該時鐘與主機時鐘同步并且提供微秒或更小量級的時間精度。當超時分組先于對應數(shù)據(jù)分組的響應被接收到時,NIC可以觸發(fā)系統(tǒng)中斷或設置標志以警告內(nèi)核模式或用戶模式軟件已發(fā)生超時,以便主機可以相應地做出反應。
另一示例中,計算設備上的線程可能想要向遠程計算設備發(fā)送RPC消息。該線程可以選擇——RPC消息應當在預定延遲值(例如,137微秒)后超時。該線程之后可以發(fā)送兩個分組,第一分組可以是采用去往遠程計算設備的TCP/IP分組的形式的實際RPC消息并且零發(fā)送延遲。第二分組可以包括指示“你已超時”的短網(wǎng)絡消息,并且可以根據(jù)用戶數(shù)據(jù)報協(xié)議(UDP)而被格式化并且具有137微秒的發(fā)送延遲。
圖1示出了一個可能的系統(tǒng)100,其中這里所公開的方面可以被實現(xiàn)。系統(tǒng)100可以是包含通常存在于通用計算設備中的一個或多個處理器120、存儲器130和其它組件的計算設備。盡管圖1在功能上將處理器120和存儲器130表示為系統(tǒng)100內(nèi)的單一塊(系統(tǒng)100也被表示為單一塊),但該系統(tǒng)可以包括并且這里所描述的方法可以涉及可以或不可以存放在同一物理外殼內(nèi)的多個處理器、存儲器和設備。
系統(tǒng)100的存儲器130可以存儲處理器120可訪問的信息,包括可由處理器120運行的指令131。存儲器130還可以包括數(shù)據(jù)135,其可由處理器120取回、操作或存儲。存儲器130和這里所描述的其它存儲器可以是能夠存儲可被相關處理器訪問的信息的任意類型的存儲裝置,諸如硬盤驅(qū)動器、固態(tài)驅(qū)動器、存儲卡、RAM、DVD、可寫存儲器或只讀存儲器。此外,存儲器可以包括分布式存儲系統(tǒng),其中諸如數(shù)據(jù)135的數(shù)據(jù)被存儲在多個不同存儲設備上,所述存儲設備可以物理地位于相同或不同的地理位置。
指令131可以是由處理器120或其它計算設備運行的指令的任意集合。指令可被存儲在用于立即由處理器處理的目標代碼格式中,或者存儲在包括腳本或獨立源代碼模塊的集合的另一計算設備語言中,其按需解釋或預先被編譯。以下更具體地解釋指令的功能、方法和例程。處理器120可以是任意傳統(tǒng)的處理器,諸如市售CPU。替換地,處理器可以是諸如ASIC或其它基于硬件的處理器的專用組件。
計算設備100可以根據(jù)指令131取回、存儲或修改數(shù)據(jù)135。數(shù)據(jù)可以包含足夠識別相關信息的任意信息,諸如數(shù)字、描述性文本、專有代碼、指針、對存儲在諸如其它網(wǎng)絡位置的其它存儲器中的數(shù)據(jù)的引用,或由函數(shù)使用以計算相關數(shù)據(jù)的信息。
計算設備100可以是服務器計算設備106、客戶端計算設備107、移動計算設備108或路由計算設備109。每個計算設備可以包括可用于通過網(wǎng)絡125與其它計算設備通信的一個或多個控制器140。網(wǎng)絡控制器140可以是與計算設備100耦接的單獨的計算設備,諸如所圖示的具有其自身的處理器160和存儲器150的單獨的計算模塊(如,PCIe卡、USB設備或子卡)。替換地,網(wǎng)絡控制器140可被集成到計算設備并且與諸如處理器120和存儲器130的計算設備共享資源。
網(wǎng)絡控制器140可以包括用于向網(wǎng)絡通信信道提供物理接入的硬件和軟件(如,固件)的組合。網(wǎng)絡通信信道可以基于有線或無線連接。每個網(wǎng)絡控制器可以包括一個或多個處理器160,其可包含專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)、通用處理器或任何其它類型的處理器。處理器160可與存儲器130耦接,存儲器130能夠存儲計算機可讀指令151和數(shù)據(jù)155。數(shù)據(jù)155可以包括用于存儲網(wǎng)絡數(shù)據(jù)(如,網(wǎng)絡消息)的發(fā)送緩沖157和接收緩沖159。一示例中,網(wǎng)絡控制器140可以是網(wǎng)絡接口控制器(NIC)(如,以太網(wǎng)、異步傳輸模式(ATM)、令牌環(huán))、光適配器(如,光纖通道)或無線網(wǎng)絡適配器(如,WiFi、藍牙、LTE、GSM、CDMA或TDMA)。
如圖2所示,計算設備200可以包括具有用于與網(wǎng)絡控制器140的硬件交互的設備驅(qū)動器210的操作系統(tǒng)或管理程序205。網(wǎng)絡控制器140可以包括一個或多個發(fā)送緩沖157和一個或多個接收緩沖159。這些緩沖能夠存儲多個網(wǎng)絡消息,諸如數(shù)據(jù)網(wǎng)絡消息220、響應網(wǎng)絡消息225和超時網(wǎng)絡消息230。
緩沖157和159可以是數(shù)據(jù)結(jié)構(gòu),諸如隊列、循環(huán)隊列、鏈表、數(shù)組、堆和其它相似的存儲網(wǎng)絡消息同時保持順序并且允許添加和移除條目的數(shù)據(jù)結(jié)構(gòu)。每個緩沖(如,隊列)可以包括多個槽(slot)240-242,每一槽能夠存儲一個或多個網(wǎng)絡消息。一示例中,發(fā)送緩沖可以包括8個單獨的優(yōu)先隊列,每一隊列具有1,000或更多槽以存儲網(wǎng)絡消息。
網(wǎng)絡消息(如,220、225、230)可以是能夠或被配置為在網(wǎng)絡通信信道上發(fā)送的任意消息。例如,網(wǎng)絡消息可以是分組(packet)、幀、單元(cell)、數(shù)據(jù)段(data segment)或數(shù)據(jù)報,并且可以準備在物理介質(zhì)上發(fā)送或可以需要額外的預處理(如,仍然需要目的MAC地址)。網(wǎng)絡消息可以被格式化以支持專有通信協(xié)議或工業(yè)標準協(xié)議(如,IP、TCP、UDP)。
數(shù)據(jù)網(wǎng)絡消息220可以是一種類型的網(wǎng)絡消息并且可以包括對于數(shù)據(jù)的請求。對于數(shù)據(jù)的請求當被遠程計算設備接收到時可以激發(fā)響應網(wǎng)絡消息225。響應網(wǎng)絡消息225可以是包含與該原始數(shù)據(jù)網(wǎng)絡消息中含有的所述請求對應的數(shù)據(jù)的一種類型的網(wǎng)絡消息。一示例中,數(shù)據(jù)網(wǎng)絡消息220可以是用作系統(tǒng)或進程之間的進程間通信的形式的網(wǎng)際協(xié)議(IP)分組(如,遠程過程調(diào)用(RPC)分組)。這可由計算設備使用以與遠程計算設備遠程地交互。遠程交互可以包括提供用于在遠程計算設備上運行的指令和/或參數(shù),諸如遠程方法調(diào)用(如,Java RMI、SOAP、ONC-RPC、XML-RPC)。一旦指令(如,數(shù)據(jù)請求)已運行,結(jié)果數(shù)據(jù)就可以被包括在一個或多個響應網(wǎng)絡消息中并且被發(fā)送回該原始計算設備。
超時消息230也可以是一種類型的網(wǎng)絡消息,并且可以被用來指示所請求的過程、任務等已超時。一些示例中,超時消息230可被用來調(diào)度和觸發(fā)網(wǎng)絡超時。每個超時消息230可以與一個或多個數(shù)據(jù)網(wǎng)絡分組220對應或者關聯(lián)。每個超時消息230可以或者被配置為在網(wǎng)絡125上被發(fā)送,但也可以保留在計算設備200內(nèi)。例如,計算設備200可以經(jīng)環(huán)回功能向其自身發(fā)送此超時消息230。
每個超時消息230還可以與預定的持續(xù)時間(如,延遲值)關聯(lián),該持續(xù)時間可由計算設備200使用以故意延遲超時消息230的發(fā)送。延遲值可以是大量時鐘周期或按秒、毫秒、微秒、納秒或更高分辨率量級的時間量。延遲值可以是相對值(如,5微秒或50納秒)或者它可以是基于絕對起始點的絕對值(如,未來時間)。
延遲值(如,預定的持續(xù)時間)可以被定制并且可以非常近似于期望的網(wǎng)絡超時的長度。一示例中,延遲值可以近似網(wǎng)絡往返時間的長度。另一示例中,延遲值可以比運行諸如RPC的遠程交互的典型持續(xù)時間略大。這可以考慮往返時間以及遠程機器運行、分組打包和發(fā)送結(jié)果數(shù)據(jù)所需的持續(xù)時間。延遲值還可以根據(jù)通信協(xié)議動態(tài)地確定,例如超時時段可以基于RPC標準。
延遲值可被存儲在系統(tǒng)(如,網(wǎng)絡控制器)可訪問的任意位置。一示例中,延遲值可被存儲在超時消息230內(nèi),諸如存儲在超時網(wǎng)絡消息230的頭部內(nèi)或該網(wǎng)絡消息的正文內(nèi)的數(shù)據(jù)字段中。替換地,延遲值可被存儲在與超時網(wǎng)絡消息230對應或關聯(lián)的網(wǎng)絡消息外部的數(shù)據(jù)結(jié)構(gòu)中。當外部數(shù)據(jù)結(jié)構(gòu)被存儲在任意緩沖(如,發(fā)送緩沖157或接收緩沖159)時,它可與超時網(wǎng)絡消息230關聯(lián),或者,當外部數(shù)據(jù)結(jié)構(gòu)在發(fā)送緩沖中時它可以只與該超時網(wǎng)絡消息230關聯(lián)并且可以在該超時消息被發(fā)送后被移除。一示例中,延遲值可以指示以微秒或納秒測量的持續(xù)時間,并且可以被包括在消息描述符(如,外部分組描述符)中,當在發(fā)送隊列中時,該消息描述符與超時網(wǎng)絡消息230關聯(lián)。
網(wǎng)絡控制器140和設備驅(qū)動器210可以被配置為提供到緩沖157和159的內(nèi)核模式軟件和用戶模式軟件訪問。這一訪問包括輪詢發(fā)送和接收緩沖以檢查消息條目的狀態(tài)、內(nèi)容或關聯(lián)的數(shù)據(jù)(如,延遲值)的能力,以及添加、移除或修改緩沖(如,入隊或出隊)中的條目的能力。例如,這可以通過使設備驅(qū)動器210暴露用于直接地操作緩沖的較低層的功能(如,經(jīng)API)來進行。這還可以包括對在管理程序穿越(hypervisor pass-through)或管理程序繞過(hypervisor by-pass)的支持,如果可用的話。一示例中,這可以允許每個緩沖(如,隊列)被獨立地指定給用戶模式或內(nèi)核模式進程并且可被用戶模式或內(nèi)核模式進程訪問。
圖3A-D示出了可以導致產(chǎn)生網(wǎng)絡超時的發(fā)送緩沖157和接收緩沖159之間的網(wǎng)絡消息的示例流。如圖3A所示,設備驅(qū)動器210可以指示網(wǎng)絡控制器140將數(shù)據(jù)網(wǎng)絡消息320和對應的超時網(wǎng)絡消息330入隊。如所示,在該隊列的頭部有單一的數(shù)據(jù)網(wǎng)絡消息320,其后跟著單一的超時網(wǎng)絡消息330。當網(wǎng)絡消息在該隊列的頭部時,它可以準備好被處理并且隨后被發(fā)送。
發(fā)送可以在計算設備的外部,或者在計算設備的內(nèi)部(如,NIC 140可以向其自身發(fā)送消息)。圖3A中,數(shù)據(jù)消息320在該隊列的頭部。如箭頭370所示,數(shù)據(jù)消息320可在物理網(wǎng)絡上向外發(fā)送。例如,消息可被從本地計算設備發(fā)送到遠程計算設備。根據(jù)一示例,數(shù)據(jù)網(wǎng)絡消息可被編碼為電信號并且在有線連接(如,經(jīng)以太網(wǎng)線纜發(fā)送的以太幀)上被發(fā)送。
如圖3B所示,在數(shù)據(jù)消息320被發(fā)送后,它從發(fā)送緩沖157上被移除并且超時消息330被移到緩沖157的頭部。超時消息330由網(wǎng)絡控制器140發(fā)送到網(wǎng)絡控制器140(如,在內(nèi)部發(fā)送)。超時網(wǎng)絡消息330被故意延遲地發(fā)送,例如,網(wǎng)絡控制器140可以等待或推遲網(wǎng)絡消息的發(fā)送直到在發(fā)送消息前已經(jīng)過延遲時段。
網(wǎng)絡控制器140可以通過將延遲值和與網(wǎng)絡消息關聯(lián)的時間戳比較來確定已經(jīng)過延遲時段。時間戳可以具有微秒或更小時間量的分辨率,并且可以指示網(wǎng)絡消息被添加到緩沖(如,被入隊或被重新入隊)的瞬時時刻。時間戳可被網(wǎng)絡控制器的處理器讀取并且被與相關的延遲值比較以確定是否已經(jīng)過該故意延遲。當經(jīng)過該延遲時,網(wǎng)絡控制器可以立即在內(nèi)部發(fā)送消息或者可以將其標記為可用于隨后當下層硬件有能力時在內(nèi)部被發(fā)送。
如圖3C所示,在內(nèi)部發(fā)送延遲后,超時消息330在網(wǎng)絡控制器140的接收緩沖159中被接收。在內(nèi)部發(fā)送消息可以包括在不通過網(wǎng)絡,或不向計算設備200和/或網(wǎng)絡控制器140外部發(fā)送的情況下發(fā)送消息。一示例中,網(wǎng)絡控制器可被配置為具有純硬件環(huán)回(hardware-only loopback path)路徑,諸如箭頭372所示。例如,純硬件環(huán)回可以包括網(wǎng)絡控制器處理器將網(wǎng)絡消息330從發(fā)送緩沖157傳輸?shù)浇邮站彌_159,其中這兩個緩沖都被存儲在網(wǎng)絡控制器140的存儲器150中。如果緩沖是隊列,則這可以包括將網(wǎng)絡消息從發(fā)送隊列中移出并且將其入隊到接收隊列,而不向外部發(fā)送該消息。純硬件環(huán)回可以不同于傳統(tǒng)環(huán)回,因為傳統(tǒng)環(huán)回只被實現(xiàn)于軟件中,諸如操作系統(tǒng)的設備驅(qū)動器或網(wǎng)絡堆棧,并且被設計為完全地繞過網(wǎng)絡接口控制器。
如圖3D所示,超時網(wǎng)絡消息330先于響應網(wǎng)絡消息325被接收。這一情況下,接收到的超時消息330指示請求或任務已超時。例如,計算設備200的軟件可以將延遲的分組解釋為超時。因而,計算設備200可以決定取消或停止等待對于請求或任務的響應。
一些示例中,網(wǎng)絡控制器140可被設計為解釋超時網(wǎng)絡消息330的接收以生成或觸發(fā)超時。超時可以表示已經(jīng)過了預定的時間段而沒有發(fā)生預期事件(如,響應的接收)。超時可以是超時信號或超時標志,其用來通知更高層軟件——網(wǎng)絡超時已發(fā)生,從而,例如,更高層軟件(如,操作系統(tǒng)或管理程序)可以采取行動以解決該問題(如,重發(fā)網(wǎng)絡消息)。超時信號可以包括,例如,基于硬件的中斷,其可以被設備驅(qū)動器檢測或與設備驅(qū)動器接口以通知更高層軟件發(fā)生了超時。超時還可以包括設置超時標志(如,數(shù)據(jù)結(jié)構(gòu)成員或字段),其可在輪詢時被更高層軟件檢測到。圖4A-D示出了發(fā)送緩沖157和接收緩沖159之間的網(wǎng)絡消息流的另一示例。這一示例中,基于消息流,網(wǎng)絡控制器140未將延遲的消息傳遞到計算設備200,因而計算設備200未判定所請求的過程已超時。還是這一示例所示,NIC發(fā)送多個數(shù)據(jù)消息和一個超時消息,其中一個超時消息與多個數(shù)據(jù)消息的每個對應。
如圖4A所示,設備驅(qū)動器210可以指示網(wǎng)絡控制器140將數(shù)據(jù)消息220和420加上超時消息430入隊。超時消息與數(shù)據(jù)消息420和440兩者對應,并且可以與諸如1秒的絕對延遲值關聯(lián)。這一示例中,數(shù)據(jù)網(wǎng)絡消息420在發(fā)送緩沖157的頭部,其后跟著數(shù)據(jù)消息440和與數(shù)據(jù)消息420和440兩者對應的超時消息430。數(shù)據(jù)消息420可以被發(fā)送到外部,如箭頭470所示和以上關于圖3A所討論的。
移到圖4B,數(shù)據(jù)消息440類似地被發(fā)送到外部,如箭頭471所示。超時消息430可被故意延遲地發(fā)送,比如,故意延遲1秒。例如,超時消息將留在發(fā)送緩沖157中直到故意延遲時段已期滿。如圖4C所示,響應網(wǎng)絡消息425和445可以在故意延遲的期滿之前——如,當超時網(wǎng)絡消息430仍在發(fā)送緩沖157中時——在接收緩沖159中被接收。如果對于與超時消息430關聯(lián)的數(shù)據(jù)消息420、440的響應425、445已到達,那么超時消息430可以不再是必要的。相應地,例如,計算設備200軟件當接收到響應425、445時,意識到超時消息430不再是必要的。如此,當超時消息430到達時,該軟件可以忽略它。替換地,該軟件可以在發(fā)送之前中止超時消息430,如,使用第二門鈴。中止超時消息430可以是有益的,因為其避免在等待將要發(fā)送的超時消息430時延遲后續(xù)的發(fā)送。
一些示例中,網(wǎng)絡控制器140可被設計為識別何時超時消息430是不必要的。例如,網(wǎng)絡控制器140可以在內(nèi)部發(fā)送超時消息,但可以在接收緩沖159中接收到它時忽略它。另一示例中,網(wǎng)絡控制器140可以在發(fā)送超時網(wǎng)絡消息前將其移除,如480所示。這可以允許網(wǎng)絡控制器避免浪費緩沖空間和計算容量(computing power)。
如圖4D所示,超時網(wǎng)絡消息430可被從發(fā)送緩沖157中移除。該移除可以以多種方式實現(xiàn),例如網(wǎng)絡控制器140可以從發(fā)送緩沖刪除該消息(如,出隊),或用緩沖中的另一消息蓋寫。另一示例中,可以將消息留在緩沖中,但可以修改消息描述符(如,分組描述符),從而超時網(wǎng)絡消息430被發(fā)送到空的目的地。
盡管以上示例描述了超時消息僅與兩個數(shù)據(jù)消息關聯(lián),但任意數(shù)目的數(shù)據(jù)消息都可以與一個超時消息一起發(fā)送。例如,一個超時消息可被用來對100,1000或更多數(shù)據(jù)消息設置細粒度超時。
除了圖2-4所示的操作,現(xiàn)在還將描述根據(jù)本發(fā)明的多個方面的各種操作。應當理解,以下操作不必按下述準確的順序執(zhí)行。而是,各種步驟可以按相反的順序或同時地被處理。
圖5提供了示出方法500的示例流圖。例如,方法500可由主機設備的軟件、網(wǎng)絡控制器140或其一些組合來運行。以下參考圖1-4的系統(tǒng)描述方法500。然而,應當理解,方法500可以實現(xiàn)在具有不同配置的多個系統(tǒng)中任意一個。還應當理解,以上方法中涉及的操作不需要按所述準確的順序執(zhí)行。而是,各種操作可按不同順序或同時地處理,并且操作可以被添加或省略。
塊510中,網(wǎng)絡控制器140可以在網(wǎng)絡通信信道上向外部發(fā)送一個或多個數(shù)據(jù)網(wǎng)絡消息220。例如,計算設備200可以將一個或多個數(shù)據(jù)網(wǎng)絡消息220和一個或多個對應的超時網(wǎng)絡消息230添加到發(fā)送緩沖157。發(fā)送緩沖可被存儲在網(wǎng)絡控制器140的存儲器150中,盡管其可被操作系統(tǒng)或管理程序訪問,但只可以被網(wǎng)絡控制器140的處理器160修改而不能被計算設備200的處理器120修改。替換地,發(fā)送緩沖157可以存儲在存儲器130(如,主存儲器)中,并且可被處理器120和160訪問。數(shù)據(jù)消息220的發(fā)送可以通過網(wǎng)絡控制器140外部的有線或無線連接來進行。數(shù)據(jù)網(wǎng)絡消息220可以包括對于數(shù)據(jù)的請求,其可以引發(fā)響應網(wǎng)絡消息。
塊520中,網(wǎng)絡控制器140可以在故意延遲后在內(nèi)部發(fā)送與一個或多個數(shù)據(jù)消息220對應的超時消息230。例如,網(wǎng)絡控制器140可以經(jīng)環(huán)回功能將超時消息230發(fā)送到計算設備200。一些示例中,網(wǎng)絡控制器140可以檢查與超時消息230關聯(lián)的延遲值并且故意延遲發(fā)送直到已經(jīng)過適當?shù)某掷m(xù)時間。延遲期間,網(wǎng)絡控制器可以執(zhí)行其它功能,諸如發(fā)送其它網(wǎng)絡消息。一旦已經(jīng)過延遲,網(wǎng)絡控制器140就可以在內(nèi)部發(fā)送超時網(wǎng)絡消息。
如塊530所示,響應于數(shù)據(jù)消息220,確定是否已接收到響應網(wǎng)絡消息225。例如,數(shù)據(jù)消息220在RPC中時,可以確定是否已接收到一個或多個響應分組。例如,響應分組可被接收在計算設備200的接收緩沖159中。
如果接收到對于一個或多個數(shù)據(jù)消息220的響應,塊535中忽略或中止相應的超時消息230。例如,網(wǎng)絡控制器140可以從計算設備200軟件接收第二門鈴,其指示超時消息230應當被從發(fā)送緩沖157中移除。這可以減少緩沖上的數(shù)據(jù)量,并且減少與發(fā)送和分析關聯(lián)的計算周期。作為另一示例,如果在對于一個或多個數(shù)據(jù)消息220的所有響應都被接收后才接收到對應的超時消息230,則計算設備200可被編程為忽略對應的超時消息230。
如果未接收到對于一個或多個數(shù)據(jù)消息220的響應,則塊540中確定在經(jīng)過了故意延遲后是否在內(nèi)部接收到對應的超時網(wǎng)絡消息230。如果超時消息230仍未被接收,則計算設備200可以等待(塊545)并且繼續(xù)尋找對于所發(fā)送的一個或多個數(shù)據(jù)消息220的響應。
塊550中,如果確定已接收到超時消息230,則與一個或多個數(shù)據(jù)消息220關聯(lián)的操作被視為已超時。例如,數(shù)據(jù)消息在RPC中并且超時消息先于對于RPC的響應被接收時,NIC將該RPC視為已超時。其它示例中,超時可以采用由網(wǎng)絡控制器140發(fā)送給設備驅(qū)動器210的警報或中斷的形式,其可以隨后被發(fā)送到操作系統(tǒng)或管理程序205。
上述系統(tǒng)、方法和示例是有益的,因為它們提供了設置細粒度超時以及精確地且以高效計算方式處理超時。如此,它們比現(xiàn)有網(wǎng)絡超時機制更好地適應延時敏感的應用。這些系統(tǒng)和方法還可以通過檢測更快地檢測網(wǎng)絡超時并且避免浪費時間來允許未來和現(xiàn)有的應用更快且更可靠地運行。
由于以上討論的這些和特性的其它變化及組合可在不脫離權(quán)利要求所限定的主題的情況下被使用,所以實施例前面的描述應當作為闡述而非作為限制權(quán)利要求所限定的主題。作為示例,前面的操作不必要按上述準確的順序執(zhí)行。而是,各種步驟可以不同順序或同時地處理。除非另有所聲明,步驟才可以被省略。并且,這里所述的示例的提供,以及用“諸如”、“包括”等措辭的從句,不應當被解釋為將權(quán)利要求的主題限制在特定示例;而是,示例意圖只闡述許多可能的實施例的一個。進一步,不同圖中相同的附圖標記可以示出相同或相似的元件。