專利名稱:用于通信接口的隊列頭高速緩存的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及數(shù)據(jù)通信系統(tǒng)和方法,尤其涉及其中大量虛擬網(wǎng)絡(luò)接口可以有效地在例如基于以太網(wǎng)的可升級的緊耦合系統(tǒng)中共享硬件資源的數(shù)據(jù)通信系統(tǒng)和方法。
背景技術(shù):
以太網(wǎng)的廣泛使用繼續(xù)刺激了商業(yè)應用中常用組件性能的增長以及成本的降低?,F(xiàn)在大多數(shù)商業(yè)應用忍受著與基于以太網(wǎng)系統(tǒng)有關(guān)的相對高的等待時間,但是新興的商業(yè)應用,例如多線程數(shù)據(jù)庫及文件系統(tǒng),有可能需要減少的等待時間。一些專用的網(wǎng)絡(luò)解決方案提供減少的等待時間,但是比基于以太網(wǎng)的可升級的群集器要昂貴的多。
等待時間性能可以被改進的一種領(lǐng)域是網(wǎng)絡(luò)接口控制器(NIC)。NIC是一種支持與網(wǎng)絡(luò)通信的硬件設(shè)備。聯(lián)系上下文,考慮圖1的例示系統(tǒng)。其中對稱的多處理器(SMP)系統(tǒng)10包括許多經(jīng)由相干結(jié)構(gòu)(coherence fabric)16而共享存儲器單元14的中央處理器(CPU)12。盡管示出的SMP10具有四個處理器內(nèi)核,但本領(lǐng)域技術(shù)人員能理解SMP10可以具有更多或更少CPU。在NIC18的控制下,SMP10經(jīng)由以太網(wǎng)連接以及結(jié)構(gòu)(轉(zhuǎn)換器)22發(fā)送消息到其他SMP20。NIC18典型地具有與此相關(guān)的處理器(未示出),或者作為NIC的整個部分或者以輔助處理器的形式,因此NIC具有足夠的智能來翻譯各種指令。結(jié)構(gòu)21將消息路由到它們預期的接收方,盡管偶爾消息會丟失,這樣圖1所示的系統(tǒng)需要支持丟失消息的重傳。
雖然每個SMP10,20僅有一個硬件NIC18,但許多不同的軟件程序可以在給定的SMP上同時運行,并且經(jīng)由結(jié)構(gòu)22通過系統(tǒng)傳輸消息。因此NIC18需要作為一種共享資源而被實現(xiàn)。共享NIC18的一種途徑是作為消息傳輸過程的一部分,要求各種的軟件程序調(diào)用復雜的操作系統(tǒng)驅(qū)動器來協(xié)調(diào)對NIC18的共享訪問。但是,這種共享訪問的機制會導致昂貴的軟件開銷,因為消耗時間的操作系統(tǒng)調(diào)用需要頻繁地執(zhí)行通信操作。
共享NIC18的另一個途徑是利用虛擬網(wǎng)絡(luò)接口控制器(VNIC)以為共享那個NIC的多種程序中的每一個提供不同的接口。VNIC是一種通過程序用來與NIC直接通信的用戶級軟件接口。VNIC可以在用戶存儲器空間的特定區(qū)域內(nèi)實現(xiàn),該區(qū)域內(nèi)例如數(shù)據(jù)讀和寫的動作被用于指示NIC執(zhí)行通信操作??梢蕴峁┨厥獾耐ㄐ艓煲员銓⒏呒墑e的例如發(fā)送消息的通信操翻譯為用于控制NIC的適合的更低級別的指令。
如圖2所示,因為許多VNIC22操作來共享一個NIC18,因此優(yōu)先級結(jié)構(gòu)24被用來確定在一組競爭服務(wù)請求中,哪個VNIC應該從NIC接收服務(wù)。但是,為了進一步減少等待時間,一旦VNIC22被選擇為由NIC18提供服務(wù),便希望盡可能快地從選中的VNIC中獲取消息。
傳統(tǒng)上,門鈴接口已經(jīng)被用來以發(fā)信號通知獨立的數(shù)據(jù)隊列對服務(wù)的需求。但是,與門鈴接口相關(guān)聯(lián)的信號傳輸功能獨立于數(shù)據(jù)隊列,且因此也不能幫助加快數(shù)據(jù)傳輸。所以,希望提供能夠克服這些缺陷和局限性的方法和系統(tǒng)來通信數(shù)據(jù)。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個典型實施例,一種在生產(chǎn)者和消費者之間傳送數(shù)據(jù)的方法包括以下步驟把要從生產(chǎn)者傳送的數(shù)據(jù)存儲到隊列中,把在所述隊列頭端配置的數(shù)據(jù)的一部分存儲到隊列頭高速緩沖存儲器,以及檢索隊列頭高速緩沖存儲器的數(shù)據(jù)以傳輸給消費者。
根據(jù)本發(fā)明的另一個典型實施例,一種傳送數(shù)據(jù)的系統(tǒng)包括作為數(shù)據(jù)生產(chǎn)者的第一設(shè)備,作為數(shù)據(jù)消費者的第二設(shè)備,用于存儲要從生產(chǎn)者向消費者傳輸?shù)臄?shù)據(jù)的隊列,以及用于緩沖在隊列頭端配置的數(shù)據(jù)的隊列頭高速緩沖存儲器。
結(jié)合說明書并構(gòu)成說明書一部分的附圖示出了發(fā)明的實施例,并結(jié)合說明描述來解釋本發(fā)明。圖中 圖1示出了其中可以實現(xiàn)本發(fā)明典型實施例的典型系統(tǒng); 圖2描述了選擇要由NIC來服務(wù)的VNIC的優(yōu)先級結(jié)構(gòu); 圖3示出了根據(jù)本發(fā)明典型實施例的隊列頭高速緩存結(jié)構(gòu); 圖4示出了根據(jù)本發(fā)明典型實施例的隊列頭高速緩存結(jié)構(gòu)的更詳細的例子; 圖5為描述了根據(jù)本發(fā)明典型實施例的用于傳送數(shù)據(jù)的方法的流程圖。
具體實施例方式本發(fā)明典型實施例的以下描述參考相應附圖。在不同附圖中的相同的參照數(shù)字標識相同或相似的元件。下面詳細的描述不限制本發(fā)明。而是,本發(fā)明的范圍由所附的權(quán)利要求來定義。除了其他附圖,在下面也參考在圖1和圖2以及上面描述的元件。
根據(jù)本發(fā)明的典型實施例,隊列頭高速緩存結(jié)構(gòu)提供一種有效的通信接口,例如在通用處理器(例如,圖1中的CPU12)上運行的通信軟件和關(guān)聯(lián)于NIC18的專用通信處理器之間,或者更一般是在數(shù)據(jù)生產(chǎn)者和數(shù)據(jù)消費者之間。在其他設(shè)備中,根據(jù)本發(fā)明典型實施例的隊列頭高速緩存結(jié)構(gòu)支持多個VNIC,以使每個VNIC可以獨立被單獨的軟件任務(wù)所使用。此外,隊列頭高速緩存結(jié)構(gòu)可以通過加快下一個在隊列中要被系統(tǒng)傳送的消息的識別和移動來允許有效的數(shù)據(jù)傳輸。盡管在網(wǎng)絡(luò)化的系統(tǒng)的環(huán)境中提供了一種詳細的實例,但根據(jù)本發(fā)明的隊列頭高速緩存也可以用于非網(wǎng)絡(luò)化的系統(tǒng)中。
圖2所示的每個VNIC22可以利用具有如圖3所示的首和尾指針的循環(huán)隊列來實現(xiàn)。這里,利用在線性地址空間的有界范圍中沿環(huán)路回繞的地址算法來實現(xiàn)循環(huán)隊列30。對于每個循環(huán)隊列30,數(shù)據(jù)被插入到尾端并在首端移除,以考慮例如填充和消耗(draining)隊列30的可能的比率失配。通過插入數(shù)據(jù)后移動尾指針來發(fā)信號通知消息的添加以及在移除數(shù)據(jù)后移動首指針來發(fā)信號通知消息的刪除,實現(xiàn)了數(shù)據(jù)插入和移除。首和尾指針的檢驗可以用來確定隊列是否為空以及隊列是否具有足夠空余空間來容納給定大小的新消息。循環(huán)隊列30內(nèi)的消息提供了長度的指示,其允許移除可變長度消息,其后是精確定位下一個可變長度消息的開始處的首指針。
為了傳輸消息,軟件存儲消息在VNIC22的隊列30中,其描述在VNIC描述符表中,下面將會詳細說明。NIC傳輸硬件應當可以快速地識別和傳輸位于存于虛擬存儲器的VNIC隊列30之一的首端的消息。根據(jù)本發(fā)明的典型實施例,通過利用硬件來監(jiān)視相干互聯(lián)16和利用從這種監(jiān)視過程中導出的信息而將消息放置在用于快速傳送的隊列頭高速緩存32中,從而加速處理過程。圖4示出了一種典型的隊列頭高速緩存系統(tǒng)32,下面將詳細描述。
其中,一種典型的隊列頭高速緩存存儲器40在圖的中央示出,并且具有多個入口(圖示為行),每個高速緩存40的入口都與不同的VNIC22相關(guān)聯(lián)。在每個高速緩存40中的入口示出了多個字段,從左到右包括有效數(shù)據(jù)字段(V)、奇數(shù)高速緩存行字段、第二有效數(shù)據(jù)字段、偶數(shù)高速緩存行字段以及空/滿標記(E)。可以理解的是,這種高速緩存存儲器結(jié)構(gòu)純粹是實例性的,且其他高速緩存配置可以用來實現(xiàn)根據(jù)本發(fā)明的隊列頭高速緩存結(jié)構(gòu)。在該實例中,高速緩存40可以存儲來自每個VNIC22的隊列30的兩行數(shù)據(jù)(奇數(shù)和偶數(shù))。這樣的數(shù)據(jù)數(shù)量可以例如足以獲取全部短的以太網(wǎng)消息,使其能夠非常迅速地從隊列頭高速緩存40處理一些來自NIC18的請求。但是,可以理解的是在高速緩存40內(nèi)可以提供更多或更少的高速緩存行,來存儲來自每個VNIC22的首端數(shù)據(jù)。有效數(shù)據(jù)標記指示了他們對應的奇數(shù)或偶數(shù)高速緩存行是否包含駐留在存儲器單元14中的對應數(shù)據(jù)的有效表示,同時空/滿標記指示與高速緩存40的那部分相關(guān)聯(lián)的隊列30內(nèi)的尾指針和頭指針當前是否具有相同的值(即,VNIC的隊列30是否為空)。
通過監(jiān)聽接口42來填充和更新隊列頭高速緩存40的行。根據(jù)本發(fā)明的這個典型實施例,隊列頭高速緩存結(jié)構(gòu)32利用相關(guān)的查找來監(jiān)聽相干互聯(lián)16,以確定數(shù)據(jù)何時傳遞經(jīng)過相關(guān)互聯(lián)16,其應該存儲在隊列頭高速緩存40中。該監(jiān)聽接口42通過對照相干互聯(lián)16上出現(xiàn)的地址測試與頭指針(對于每個VNIC22)關(guān)聯(lián)的向量來完成這個操作。當存儲器操作導致數(shù)據(jù)出現(xiàn)在其地址匹配有效VNIC22的物理頭指針的相干互聯(lián)16上的時候,監(jiān)聽接口可以復制該數(shù)據(jù)到該VNIC22的對應的隊列頭高速緩存的入口處。該匹配可以通過監(jiān)聽接口42以這種方式來實現(xiàn),對于給定的隊列頭,偶數(shù)和奇數(shù)高速緩存行都匹配。這樣使得可以獲取隊列30首端上的高速緩存行和隊列30的下一個高速緩存行(如果相同消息的部分不作為隊列頭上的高速緩存行,它將在提供給VNIC22服務(wù)之后立即成為隊列的首端,并可能作為快速檢索的候選)。
為了更好地理解監(jiān)聽接口42可以根據(jù)本發(fā)明來操作的一種方式,考慮了以下的實例。假設(shè)隊列頭高速緩存40存儲了大小LS字節(jié)的行。讓函數(shù)C(x)計算保留任意地址x的高速緩存行的開始地址,在該實例中是通過物理頭指針(PHP)指向的地址。如果高速緩存行由LS=32字節(jié)組成且在32字節(jié)的邊界對準,那么C(x)通過忽略(標記為0)地址x的5低數(shù)位來計算。進一步假設(shè)典型的隊列頭高速緩存40可以在每個VNIC22的首端保持NC物理連續(xù)的高速緩存行(上述實例中的兩條)。該隊列頭高速緩存40,對于第i個VNIC22,可以保持具有開始地址C(PHPi),C(PHPi)+1*LS,C(PHPi)+2*LS,....C(PHPi)+(NC-1)*LS的NC高速緩存行的窗口。
監(jiān)聽接口42使在位于有效VNIC窗口中的地址被寫到存儲器的高速緩存行數(shù)據(jù)被存儲在隊列頭高速緩存40中。在這種純示意性的實例中,地址x位于第i個VNIC22的窗口內(nèi),如果(C(PHPi)<=C(x)<C(PHPi)+NC*LS)的話。當高速緩存行存儲在相干互聯(lián)16上可見,那么該高速緩存行被存放在隊列頭高速緩存40內(nèi)部,如果它在VNIC窗口內(nèi)部的話。這個高速緩存行被存儲在通過(x/LS)MOD(NC)指定的隊列頭高速緩存列中。在這個實例中,如果高速緩存行是從0開始連續(xù)編號,偶數(shù)高速緩存行都被存儲在偶數(shù)列中,同時奇數(shù)高速緩存行被存儲在奇數(shù)列中。當高速緩存行被存儲在隊列頭高速緩存40時,則為那個行設(shè)置有效位。
接著,例如,當數(shù)據(jù)通過NIC18被發(fā)送到網(wǎng)絡(luò)時,NIC18通過讀取在地址x上的數(shù)據(jù)來請求該數(shù)據(jù)。如果存在于高速緩存中,則從隊列頭高速緩存40檢索數(shù)據(jù),否則從存儲器中檢索數(shù)據(jù)。讀數(shù)據(jù)位于VNIC i的隊列頭高速緩存窗口,如果(C(PHPi)<=C(x)C(PHPi)+NC*LS)的話。當讀數(shù)據(jù)位于隊列頭高速緩存窗口內(nèi)時,在列(x/LS)MOD(NC)中的高速緩存行的有效位被測試。如果高速緩存行為有效,從被選的高速緩存列返回數(shù)據(jù),而不是從存儲器返回。
監(jiān)聽接口42具有來自物理頭指針表44的物理頭指針地址,其中包括物理頭指針(PHP)以及關(guān)聯(lián)于每個VNIC22的有效地址標記(V)。該有效地址標記(V)指示對應的VNIC22是否有效以及是否具有正確計算的頭指針地址,或者是否無效且不需要考慮。由于關(guān)聯(lián)于每個VNIC22的物理頭指針隨著時間變化,因此元件46-52操作來保持物理頭指針表44用適當值來更新。
根據(jù)本發(fā)明的典型實施例,每個VNIC22的隊列頭最初表示為整數(shù)頭偏移,放到每個VNIC的隊列30中,該偏移被存儲在表48中。例如,如果隊列30具有1024個消息槽,則該隊列30的頭偏移可以為1000。當消息被添加到那個特定隊列30時,該頭偏移調(diào)整功能46從VNIC描述符表50檢索該隊列的長度,從表48檢索該隊列的當前頭偏移,且利用那些值以及添加到隊列的消息的長度執(zhí)行循環(huán)算法,來確定對應于特定VNIC22在隊列30中的最早的消息的位置的新的頭偏移。該新的頭偏移被存儲在表48中對應的入口內(nèi),且被傳遞到地址轉(zhuǎn)換查找功能52。
地址查找功能52檢索與VNIC22的隊列30關(guān)聯(lián)的虛擬地址范圍,該隊列的頭偏移已經(jīng)從VNIC描述符表50變化,并轉(zhuǎn)換虛擬地址范圍和新的頭偏移的組合為新的物理頭指針地址。新的物理頭指針地址接著被存儲到對應于其頭指針地址已經(jīng)被更新的VNIC22的表44的入口。更具體地,根據(jù)圖4的典型實施例,高速緩存存儲器40保持來自每個VNIC的隊列30的首端的數(shù)據(jù)的兩條高速緩存行,以及對準存儲在表48內(nèi)的VNIC頭偏移以開始偶數(shù)高速緩存行。因此每個VNIC22的這些典型的頭偏移可以被細分為兩種表示VNIC22的虛擬地址范圍內(nèi)的頁偏移以及該頁內(nèi)的高速緩存行偏移。接著,為了轉(zhuǎn)換虛擬地址范圍和新的頭偏移的組合,地址轉(zhuǎn)換查找功能52可以利用頁偏移來選擇該VNIC22的物理頁矢量內(nèi)的正確頁,且高速緩存行偏移被加入到被選頁的地址。
已經(jīng)描述了如何根據(jù)本發(fā)明的典型實施例來組織和更新隊列頭高速緩存40,下面將描述根據(jù)本發(fā)明典型實施例,如何利用它來幫助消息傳輸。當NIC18發(fā)送地址(A)作為數(shù)據(jù)請求的一部分(例如,保留在已經(jīng)被選擇用于服務(wù)的VNIC22的隊列內(nèi)的指令)到隊列頭高速緩存訪問單元54時,該隊列頭高速緩存設(shè)備32首先檢查來查看被請求數(shù)據(jù)的有效版本是否存在于高速緩存存儲器40中。這可以通過以下來完成,例如,隊列頭高速緩存訪問單元54對照存儲在物理頭指針表44內(nèi)的那些地址來檢查接收的地址,并執(zhí)行高速緩存存儲器40的標記查詢。如果請求導致高速緩存命中,那么高速緩存存儲器40傳送被請求的數(shù)據(jù)到隊列頭高速緩存訪問單元54。
可替換地,如果被請求的數(shù)據(jù)超過了兩條存儲在高速緩存存儲器40內(nèi)的高速緩存行(在這個實例中),或者如果存儲的高速緩存數(shù)據(jù)行無效,高速緩存則發(fā)生未命中。那么隊列頭高速緩存訪問單元54信號通知系統(tǒng)存儲器訪問功能56來向主存儲器14請求NIC18的數(shù)據(jù)(“未命中路徑”)。該數(shù)據(jù)被返回到隊列頭高速緩存訪問單元54,并發(fā)送給NIC18。
在來自VNIC22的數(shù)據(jù)被處理之后(例如,傳輸?shù)骄W(wǎng)絡(luò)上),它的物理頭指針移動跨過處理的數(shù)據(jù)。頭指針的移動信號通知有必要在新的隊列頭開始處理數(shù)據(jù)。在第i個VNIC22內(nèi)的數(shù)據(jù)被處理之后,PHPi從它的舊值old_PHPi被調(diào)整為新的值new_PHPi。如果頭指針被移動到一個適中的距離,隊列頭高速緩存40的一些數(shù)據(jù)保持為有效。這可以通過保持在新的和舊的高速緩存窗口中的有效高速緩存行而實現(xiàn)。每次PHP被調(diào)整,任何舊窗口內(nèi)而不是新窗口內(nèi)的高速緩存行就為無效。這種計算可以通過下面描述的偽碼來執(zhí)行phpa=(old_PHPi/LS)phpb=(new_PHPi/LS)diff=phpb-phpa/*移動的行的數(shù)量*/ovf=~(0<=diff<L)/*如果移動的行大于L行,則溢出*/ma=phpa MOD NC/*對應于phpa的高速緩存列*/mb=phpb MOD NC/*對應于phpb的高速緩存列*/s=(mb-ma)>=0)/*如果b>=a,為1*/for(i=0,...,L-1)vai=i>=ma/*在phpa列的右邊,為真值*/for(i=0,...,L-1)vbi=i<mb/*在phpb列的左邊,為真值*/inv=~ovf&(s&(vb&va)|~s&(vb|va))|(ovf&1)/*識別位于舊窗口而不是新窗口內(nèi)的數(shù)據(jù)列*/
v=v&(~inv)/*屏蔽已知為無效的有效位為零*/以上計算的無效矢量識別出當移動頭指針時被無效的隊列頭列。這些列中的每一個都是在前窗口的成員,且可以具有不再是新高速緩存窗口成員的數(shù)據(jù),且因此現(xiàn)在被認為是無效的。更新PHP指針之后,計算新的有效矢量,重新開始如上所述的監(jiān)聽。
根據(jù)本發(fā)明的一個典型實施例,一種預取接口58也可以被包括作為隊列頭高速緩存結(jié)構(gòu)32的一部分。預取接口58從地址轉(zhuǎn)換查找功能52接收被更新的物理頭指針,并操作以搶先預取高速緩存存儲器40的數(shù)據(jù)。例如,NIC18通過系統(tǒng)傳輸隊列頭30的消息之后,NIC18發(fā)送適當?shù)闹甘痉筋^偏移調(diào)整功能46,來更新VNIC22的對應頭偏移以及物理頭指針。當發(fā)生這些,關(guān)聯(lián)于這個特定VNIC22的高速緩存40內(nèi)的數(shù)據(jù)入口是臨時無效的,因為其還沒有被更新來反映關(guān)聯(lián)于新的頭指針的消息。相應地,預取接口58可以利用更新的物理頭指針來請求對位于主存儲器16中的地址(通過系統(tǒng)存儲器訪問單元56)上的數(shù)據(jù)的檢索。這個數(shù)據(jù)可以接著被存儲在高速緩存40的相應入口,使得當NIC18請求時,其是有效且可利用的。
已經(jīng)描述了根據(jù)本發(fā)明的典型實施例的典型的隊列頭高速緩存實現(xiàn),現(xiàn)在將討論這種典型硬件電路的某些應用。例如,本發(fā)明的典型實施例的另一個特征是利用特殊消息(這里被稱為“零點”),其在每個VNIC的隊列30的尾部后由用戶(軟件)增加到隊列30,以便使得能夠確定每個隊列30是空的還是非空的(滿的)。例如,考慮到空的VNIC具有相等的頭和尾偏移,由此表示在循環(huán)隊列30中沒有真正的入口。無論什么時候空VNIC的頭消息裝載在隊列頭高速緩存40中,高速緩存40的滿/空標記E部分都提供了一種指示,即這個VNIC22沒有需要傳送服務(wù)的消息。比較器電路60評估滿/空標記E,來確定每個高速緩存入口是滿的還是空的。比較器電路60可以接著生成識別全部非空VNIC22的服務(wù)請求位向量,其被發(fā)送到優(yōu)先級編碼器(未示出),其中服務(wù)請求位向量可以被用來快速識別下個需要NIC18服務(wù)的VNIC22。
如上所述,通過將新消息在隊列尾部寫入到存儲器,用戶(例如軟件應用)傳送消息到VNIC隊列30中。這些新消息可以跟隨終止零點消息,來標注有效數(shù)據(jù)的結(jié)束。終止零點消息應該被更新,因為新消息以如下方式被加入到隊列中,即它避免了終端端點標志被標記為非零點以及網(wǎng)絡(luò)接口讀取超過在前端點標志的數(shù)據(jù)的情況。假定例如下面的方案。當添加新的消息到VNIC隊列30中時,終止端點標記首先被移除,接著在VNIC尾部添加新的數(shù)據(jù),且接下來在新添加的數(shù)據(jù)之后放置終止端點標記。如果利用這個方法,存在短暫的時間期間,VNIC沒有正確終止,且NIC硬件會讀取錯誤的數(shù)據(jù)。為了確保直到終止端點標記的所有數(shù)據(jù)一直都為有效的,新添加的具有新端點標記的消息以特定的次序被寫入,因此修改的最后字段為在前端點標記。首先在在前端點標記之后寫入數(shù)據(jù),同時保留在前端點標記未被修改。接著在新存入的數(shù)據(jù)之后寫入一個新的端點標記,且最后覆蓋在前端點標記,以允許訪問新的消息。當這個在前端點標記從零到非零改變數(shù)值時,硬件處理向前跨過新近添加的有效消息,直到到達新的端點標記。
無論何時,有效VNIC22的頭位于零消息上時,傳輸NIC18等候新的數(shù)據(jù)。在這種情況下,當軟件在尾部添加新的消息并更新在前終止零消息時,傳輸NIC18可以利用監(jiān)聽接口42來檢測新數(shù)據(jù)的到來。如果軟件確保了VNIC頭上的數(shù)據(jù)的變化被傳輸?shù)较喔苫ヂ?lián)16(例如,通過發(fā)布高速緩存刷新操作),那么傳輸NIC18將觀察這個操作,并在隊列30的頭更新值。這導致空/滿標記E的值的對應變化,并且進而又信號通知現(xiàn)在的非空VNIC22的服務(wù)請求。
基于上述內(nèi)容,圖5流程圖中描述了用于從生產(chǎn)者(例如,VNIC)到消費者(例如,NIC)傳送數(shù)據(jù)的典型方法。其中,數(shù)據(jù)在步驟500被存儲在隊列中,在步驟510至少一些來自隊列首端的數(shù)據(jù)被高速緩存,且該高速緩存的數(shù)據(jù)接著在步驟520從用于向消費者傳輸?shù)母咚倬彺姹粰z索以用于傳輸?shù)?。在包括VNIC和NIC的本發(fā)明的典型實施例中,這個技術(shù)有助于在選擇了用于服務(wù)的VNIC22之后向NIC18給出消息數(shù)據(jù),因此減少了與經(jīng)由網(wǎng)絡(luò)進行數(shù)據(jù)通信有關(guān)的等待時間。
但是,本領(lǐng)域的技術(shù)人員可以理解根據(jù)本發(fā)明典型實施例的隊列頭高速緩存可以用于除網(wǎng)絡(luò)之外的目的。無論什么時候從以硬件或軟件實現(xiàn)的生產(chǎn)過程到以硬件或軟件實現(xiàn)的消費過程在基于存儲器的隊列中交換數(shù)據(jù)時,隊列頭高速緩存都可以被用來流線型訪問那個數(shù)據(jù)。利用隊列頭高速緩存的非網(wǎng)絡(luò)實例是一種圖形顯示列表發(fā)生器和顯示列表再現(xiàn)引擎,其中圖形顯示列表發(fā)生器產(chǎn)生一種顯示列表,以及顯示列表再現(xiàn)引擎在視頻顯示屏上再現(xiàn)顯示列表。發(fā)生器和再現(xiàn)引擎可以以硬件或者軟件來實現(xiàn)。隊列頭高速緩存常用來連接生產(chǎn)者(例如,顯示列表發(fā)生器)到消費者(例如,圖形再現(xiàn)引擎)。
上面描述的本發(fā)明的典型實施例提供了圖釋和說明,但并不意味著它是窮盡的或者限制本發(fā)明到所公開的精確程度。根據(jù)上述教導可以做出修改或變換,或者可以從發(fā)明的實踐中獲得各種修改或變換。以下權(quán)利要求及其等價物定義了本發(fā)明的范圍。
權(quán)利要求
1.一種在生產(chǎn)者和消費者之間傳送數(shù)據(jù)的方法,包括以下步驟在隊列中存儲將從所述生產(chǎn)者傳送的數(shù)據(jù)(500);在隊列頭高速緩沖存儲器中存儲在所述隊列的首端配置的所述數(shù)據(jù)的一部分(510);以及從所述隊列頭高速緩沖存儲器檢索所述數(shù)據(jù),以傳輸(520)給所述消費者。
2.權(quán)利要求1的方法,其中,所述隊列是循環(huán)隊列,具有指向所述隊列中最早的消息的位置的頭指針,以及指向所述隊列中最新的消息的尾指針。
3.權(quán)利要求2的方法,進一步包括步驟維持包括至少一個物理頭指針地址的表格;以及利用所述表格,選擇性地更新所述隊列頭高速緩存中的所述數(shù)據(jù)。
4.權(quán)利要求3的方法,其中,所述選擇性地更新所述數(shù)據(jù)的步驟進一步包括步驟在將所述生產(chǎn)者連接到所述消費者的相干互聯(lián)上監(jiān)聽,以便識別在所述相干互聯(lián)上的,具有對應于所述至少一個物理頭指針地址的地址的數(shù)據(jù)傳輸;以及當發(fā)生匹配時,在所述隊列頭高速緩存更新對應的入口。
5.權(quán)利要求1的方法,其中,所述生產(chǎn)者和所述消費者是虛擬網(wǎng)絡(luò)接口電路(VNIC)和網(wǎng)絡(luò)接口控制器(NIC)中的一個。
6.權(quán)利要求5的方法,其中,所述隊列頭高速緩存具有用于多個VNIC中每一個的入口。
7.權(quán)利要求1的方法,其中,在隊列頭高速緩沖存儲器中存儲在所述隊列的首端配置的所述數(shù)據(jù)的一部分(510)的所述步驟進一步包括步驟基于更新的頭指針,預取所述數(shù)據(jù)的所述部分。
8.權(quán)利要求1的方法,其中所述從所述隊列頭高速緩存存儲器檢索所述數(shù)據(jù)以傳輸給所述消費者的步驟進一步包括步驟確定生產(chǎn)者請求用于傳輸?shù)南⑹欠褡鳛樗龈咚倬彺娴臄?shù)據(jù)的一部分存在;如果是,提供所述高速緩存的數(shù)據(jù)給與所述生產(chǎn)者相關(guān)聯(lián)的發(fā)送器;否則,從主存儲器請求所述消息。
9.一種用于傳送數(shù)據(jù)的系統(tǒng),包括作為數(shù)據(jù)生產(chǎn)者的第一設(shè)備(VNIC22);作為所述數(shù)據(jù)的消費者的第二設(shè)備(NIC18);隊列(30),用于存儲要從所述生產(chǎn)者傳輸?shù)剿鱿M者的所述數(shù)據(jù);以及隊列頭高速緩存存儲器(32),用于高速緩存在所述隊列的首端配置的數(shù)據(jù)。
10.權(quán)利要求9的系統(tǒng),其中,所述隊列是循環(huán)隊列,具有指向所述隊列中最早的消息的位置的頭指針,以及指向所述隊列中最新的消息的尾指針。
11.權(quán)利要求10的系統(tǒng),進一步包括表格,包括至少一個對應于所述頭指針的物理頭指針地址;子系統(tǒng),用于利用所述至少一個物理頭指針地址來更新所述隊列頭高速緩存中的所述數(shù)據(jù)。
12.權(quán)利要求11的系統(tǒng),進一步包括所述數(shù)據(jù)可以通過其來傳送的相干互聯(lián);以及監(jiān)聽接口,用于監(jiān)視所述相干互聯(lián),來識別在所述相干互聯(lián)上的,具有對應于所述至少一個物理頭指針地址的地址的數(shù)據(jù)傳輸,以及用于當發(fā)生匹配時來更新所述隊列頭高速緩存內(nèi)的對應入口。
13.權(quán)利要求9的系統(tǒng),其中,所述生產(chǎn)者是向高速緩存接口單元給出消息地址的網(wǎng)絡(luò)接口控制器(NIC),其從所述隊列頭高速緩存檢索與所述消息地址相關(guān)聯(lián)的數(shù)據(jù),或者經(jīng)由所述相干互聯(lián)從主存儲器單元檢索所述數(shù)據(jù)。
14.權(quán)利要求11的系統(tǒng),進一步包括頭偏移表,用于跟蹤當消息被添加到所述隊列或者從所述隊列移除時頭指針位置的變化;以及地址轉(zhuǎn)換查找功能,用于將所述變化轉(zhuǎn)換為新的物理頭指針地址,并更新所述物理頭指針表。
15.權(quán)利要求9的系統(tǒng),其中,所述生產(chǎn)者設(shè)備是生成顯示列表的圖形顯示列表發(fā)生器,以及所述消費者設(shè)備是顯示列表再現(xiàn)引擎。
16.權(quán)利要求9的系統(tǒng),其中,存儲在所述隊列中的所述數(shù)據(jù)包括在所述隊列尾端的終止消息。
全文摘要
描述了一種用于從隊列的頭(圖2)高速緩存數(shù)據(jù)的方法和系統(tǒng)。該高速緩存的數(shù)據(jù)可以接著基于請求從數(shù)據(jù)生產(chǎn)者(例如,VNIC22)被選擇性地轉(zhuǎn)發(fā)到數(shù)據(jù)消費者(例如,NIC18)。
文檔編號H04L29/06GK1996930SQ20071008411
公開日2007年7月11日 申請日期2007年1月5日 優(yōu)先權(quán)日2006年1月6日
發(fā)明者M·S·施蘭斯克, E·厄爾特利, J·-F·科拉爾 申請人:惠普開發(fā)有限公司