專利名稱:內核間報文描述消息的傳遞方法
技術領域:
本發明涉及多內核處理器中內核間的通信方法,更具體的說,本發明涉及一種多內核處理器中內核間報文描述消息的傳遞方法。
背景技術:
隨著信息技術的發展,處理器處理的數據流量越來越大。傳統單個處理內核的處理器已無法滿足處理性能的要求。因此出現了多個處理內核的處理器,在這種多內核的處理器中,習慣上把一個特定的功能模塊在一個處理內核中實現,這一類處理器的內核使用公共的動態隨機存取存儲器(DRAM,Dynamic Random-Access Memory)、靜態隨機存取存儲器(SRAM,SynchronousRandom-Access Memory)等資源存儲處理的數據報文,這樣不同的處理內核之間數據報文的傳遞,并不需要進行數據報文的完整傳遞,參考圖1所示,只需要把數據報文的屬性(如數據的存放索引等)等報文描述消息傳送給下一個內核的相應模塊即可。
良好的消息傳送機制是發揮多內核處理器性能的重要因素,由于各個內核模塊間的消息傳遞量很大,因此需要使用高效的消息傳遞方法,保證內核模塊之間消息的高速和可靠傳遞。
參考圖2所示,現有技術中采用ring的方法實現在內核間傳送報文描述消息,以內核CPU和內核ME之間的通信為例進行說明,CPU和ME之間的通信是通過兩個環形隊列(ring)來實現的,兩個環形隊列的結構一致,由128個entry組成,每個ring由兩個指針(讀和寫),其中ME和CPU各維護一個。
其中ring entry的結構如表一所示表一
ENTRY結構中各個長字詳細定義如表二所示表二
根據上述的entry結構,具體的報文描述消息傳遞流程分為接收端和發送端分別描述如下接收端1)若read_ptr!=write_ptr,開始接收read_ptr指向的entry的報文描述消息。
2)若entry中的D字段為真,處理entry中的buffer pointer指向的報文描述消息,若D標志為假,等待發送端把entry中D字段設置為真。
3)當前entry接收處理完成,把entry中R字段置為真,D字段置為假,read_ptr加一。
4)返回1)繼續接收。
發送端1)如果read_ptr!=write_ptr+1,向write_ptr指向的entry發送報文描述消息。
2)釋放entry中上次接收完的buffer pointer,如果buffer pointer被接收端修改,可能導致buffer pointer丟失。
3)如果entry中的R字段為真,向entry中的相應消息字段填寫報文描述消息,如果所述的R字段為假,等待接收端把R字段設置為真。
4)當前entry發送處理完成,把D字段置為真,R字段設置為假,write_ptr加一。
5)返回1)繼續接收。
上述現有技術存在如下的缺點首先,根據上述的entry結構,報文描述消息讀寫控制域中包括R、D、S、E字段,在對所述的R、D、S字段的處理時會造成ring異常吊死。例如接收端內核如果發現read_ptr不等于write_ptr,認為消息需要接收,但是entry中的D字段(因為誤操作)沒有設置成真,則接收端內核會在當前entry一直等待,使ring吊死;反之如果發送端出現R字段設置錯誤,處理也會停止。
其次,上述現有技術中若對entry結構的R、D字段處理異常或buffer不釋放,可能導致buffer丟失,使報文的處理出現問題。
再次,由于報文緩存地址buffer addr和R、D、S、E設置在一個長字中,具體處理時,內核讀寫該長字可能導致該長字錯誤(例如CPU通過PCI讀寫該長字),使報文緩存地址丟失。例如在對R、D、S、E等字段的操作中可能造成buffer pointer的錯誤(由于在一個長字中,誤操作難以避免),正確的bufferpointer指向的緩存buffer將會丟失。
發明內容
本發明解決的技術問題是提供一種內核間報文描述消息的傳遞方法,以避免傳遞消息的環形隊列異常吊死。
為解決上述問題,本發明提供的內核間報文描述消息的傳遞方法,包括A、在所述的環形隊列的每項入口entry的報文描述消息讀寫控制域中僅設置標識一個報文結束的報文結束字段;
B、通過所述的報文結束字段將傳遞的各個報文的報文描述消息寫入環形隊列中;C、通過所述的報文結束字段從所述的環形隊列中讀取傳遞的各個報文的報文描述信息。
其中,步驟B包括B1、對環形隊列進行初始化,分配該環形隊列各個入口entry的緩存地址;B2、發送報文描述信息時,獲取所述的環形隊列寫指針指向的entry的緩存地址;B3、獲取報文描述信息內容;B4、將所述的報文描述信息內容寫入寫指針指向的entry的相應字段中;B5、一個報文的報文描述消息寫入完畢,將緩存該報文最后一個報文描述消息的entry中報文結束字段置為真。
其中,步驟C包括C1、接收報文描述消息時,獲取所述的環形隊列讀指針指向的entry的緩存地址;C2、從所述的讀指針指向的entry的緩存地址的entry相應字段中讀取報文描述消息;C3、檢測到entry中報文結束字段為真,則接收該entry中的報文描述消息后,讀取一個報文的報文描述消息完畢。
其中,所述的報文描述消息包括報文緩存地址、地址偏移、報文類型、報文長度和報文連接特性。
其中,所述的環形隊列的每項入口entry中以一個長字標識所述的報文緩存地址。
其中,所述的環形隊列的入口entry包括如下字段
長字0,標識報文結束的報文結束字段、保留字段和地址偏移字段;長字1,報文連接特性字段;長字2,報文類型字段和報文長度字段長字3,報文緩存地址字段。
與現有技術相比,本發明具有以下有益效果首先,本發明的環形隊列ring的entry結構中報文描述消息讀寫控制域中僅設置標識一個報文結束的報文結束字段,各個內核都根據所述的報文結束字段進行報文描述消息的接收和發送,因此可避免現有技術中對R、D和S字段處理造成的ring異常吊死問題;其次,本發明中ring的entry結構中沒有設置R、D字段,可避免現有技術中若R、D字段處理異常或buffer不釋放,導致buffer丟失,進一步使報文處理出現的問題情況;再次,本發明中ring的entry結構中以一個單獨的長字標識報文緩存地址,報文結束字段E設置在另一個長字中,由內核讀寫該E字段所在的長字時,即使讀寫該長字錯誤,也不會出現報文緩存地址buffer addr丟失的問題。
圖1是現有技術多內核處理器中內核間傳遞報文描述消息的示意圖;圖2是現有技術中內核間以環形隊列進行通信的示意圖;圖3是本發明內核間報文描述消息的傳遞方法中內核間以環形隊列進行通信的示意圖;圖4是本發明內核間報文描述消息的傳遞方法中根據讀寫指針進行消息讀寫的示意圖;
圖5是本發明內核間報文描述消息的傳遞方法中向ring中寫入報文描述消息的流程圖;圖6是本發明內核間報文描述消息的傳遞方法中從ring中讀取報文描述消息的流程圖。
具體實施例方式
參考圖3,本發明中內核之間的報文描述消息傳遞通過ring進行,每個內核擁有一個ring供且僅供本內核取報文描述消息進行處理,但是每個ring的報文描述消息可以由多個內核提供,具體的,本發明中應用的ring是一種環形隊列,一般由N個entry組成,訪問N后歸0。Ring的訪問位置和許可由兩個指針write_ptr、read_ptr維護,write_ptr為當前寫的指針,read_ptr為當前讀的指針。
參考圖4,本發明中Ring滿的狀態為write_ptr=read_ptr-1。Ring空的狀態為write_ptr=read_ptr。發送方只要ring不是滿的狀態就可以往write_ptr指向的ring entry中寫消息。接收方只要ring不是空的狀態就應該從read_ptr指向的ringentry中讀數據。
本發明中所述的環形隊列的每項入口entry的報文描述消息讀寫控制域中僅設置標識一個報文結束的報文結束字段;具體發送消息時,通過所述的報文結束字段將傳遞的各個報文的報文描述消息寫入環形隊列中;接收消息時,同樣以所述的報文結束字段從所述的環形隊列中讀取傳遞的各個報文的報文描述信息。由于讀寫報文描述消息的內核都僅根據報文結束字段進行消息讀寫,各個內核的操作流程一致,不會出現ring異常問題。
通常在內核之間傳送的是報文,傳遞一個報文需要的報文描述消息通常包括報文存放的buffer的地址、偏移,以便用于找到報文的內容;如果報文存放在多個buffer,報文的結束標志,用于定界一個完整報文。
報文類型、長度以及連接特性(對于ATM報文,連接特性包括PVC信息等)。
本發明中同樣需要通過在ring的entry結構中設置相應的消息字段存儲上述的報文描述消息。
下面以內核間傳遞ATM報文的具體例子進行說明。
本實施例中ring的entry可以設置如表三所示表三
其中各個長字的定義如表四所示表四
上述ring的entry結構中報文描述消息的控制指示域中僅設置報文結束字段E,另外,報文緩存地址Free_Buffer_Address單獨設置在一個長字中(本實施例設置在長字3)。
下面具體說明根據上述ring的entry結構進行報文描述消息的傳遞流程。
本發明中需要對ring進行初始化操作,給ring的各個entry分配一個緩存buffer,并計算該緩存buffer的緩存地址buffer_addr,然后封裝entry的緩存地址buffer_addr,設置該entry的其他字段為0。
參考圖5,該圖是本發明內核間報文描述消息的傳遞方法中向ring中寫入報文描述消息的流程圖,具體的,向ring中寫入報文描述消息主要包括如下步驟在步驟10,發送報文描述信息時,獲取所述的環形隊列寫指針指向的entry的緩存地址;然后在步驟11,獲取報文緩存地址、地址偏移、報文類型和報文連接特性等的報文描述消息;進一步在步驟12,將報文緩存地址、地址偏移、報文類型和報文連接特性等的報文描述消息寫入寫指針指向的entry的相應消息字段中;最后在步驟13,一個報文的報文描述消息寫入完畢,將緩存該報文最后一個報文描述消息的entry中報文結束字段置為真。
參考圖6,該圖是本發明內核間報文描述消息的傳遞方法中從ring中讀取報文描述消息的流程圖。從ring接收報文描述消息主要包括以下步驟在步驟20,接收報文描述信息時,獲取所述的環形隊列讀指針指向的entry的緩存地址;在步驟21,從所述的讀指針指向的entry的緩存地址的entry相應消息字段中讀取報文描述信息;在步驟22,檢測到entry中報文結束字段為真,則接收該entry中的報文描述信息后,讀取一個報文的報文描述消息完畢。
以上所述僅為本發明的優選實施方式,并不構成對本發明保護范圍的限定。任何在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明的權利要求保護范圍之內。
權利要求
1.一種內核間報文描述消息的傳遞方法,所述的內核間以環形隊列進行通信,通過所述的環形隊列的讀指針和寫指針控制進行傳遞的各個報文的報文描述消息的接收和發送,其特征在于,包括A、在所述的環形隊列的每項入口entry的報文描述消息讀寫控制域中僅設置標識一個報文結束的報文結束字段;B、通過所述的報文結束字段將傳遞的各個報文的報文描述消息寫入環形隊列中;C、通過所述的報文結束字段從所述的環形隊列中讀取傳遞的各個報文的報文描述信息。
2.根據權利要求1所述的內核間報文描述消息的傳遞方法,其特征在于,步驟B包括B1、對環形隊列進行初始化,分配該環形隊列各個入口entry的緩存地址;B2、發送報文描述信息時,獲取所述的環形隊列寫指針指向的entry的緩存地址;B3、獲取報文描述信息內容;B4、將所述的報文描述信息內容寫入寫指針指向的entry中;B5、一個報文的報文描述消息寫入完畢,將緩存該報文最后一個報文描述消息的entry中報文結束字段置為真。
3.根據權利要求2所述的內核間報文描述消息的傳遞方法,其特征在于,步驟C包括C1、接收報文描述消息時,獲取所述的環形隊列讀指針指向的entry的緩存地址;C2、從所述的讀指針指向的entry中讀取報文描述消息;C3、檢測到entry中報文結束字段為真,則接收該entry中的報文描述消息后,讀取一個報文的報文描述消息完畢。
4.根據權利要求1-3任一項所述的內核間報文描述消息的傳遞方法,其特征在于,所述的報文描述消息包括報文緩存地址、地址偏移、報文類型、報文長度和報文連接特性。
5.根據權利要求4所述的內核間報文描述消息的傳遞方法,其特征在于,所述的環形隊列的每項入口entry中以一個長字標識所述的報文緩存地址。
6.根據權利要求5所述的內核間報文描述消息的傳遞方法,其特征在于,所述的環形隊列的入口entry包括如下字段長字0,標識報文結束的報文結束字段、保留字段和地址偏移字段;長字1,報文連接特性字段;長字2,報文類型字段和報文長度字段長字3,報文緩存地址字段。
全文摘要
本發明公開一種內核間報文描述消息的傳遞方法,所述的內核間以環形隊列進行通信,通過所述的環形隊列的讀指針和寫指針控制進行待傳送的各個報文的報文描述消息的接收和發送,該方法包括在所述的環形隊列的每項入口entry的報文描述消息讀寫控制域中僅設置標識一個報文結束的報文結束字段;通過所述的報文結束字段將傳遞的各個報文的報文描述消息寫入環形隊列中;通過所述的報文結束字段從所述的環形隊列中讀取傳遞的各個報文的報文描述信息。本發明由于僅設置報文結束字段,可避免ring吊死問題。
文檔編號H04L12/42GK1842056SQ20051006258
公開日2006年10月4日 申請日期2005年3月31日 優先權日2005年3月31日
發明者張少雄 申請人:華為技術有限公司