本發(fā)明涉及大容量數(shù)據(jù)交換技術(shù),尤其涉及一種消除報(bào)文的交換頭阻的方法及裝置。
背景技術(shù):
隨著數(shù)據(jù)網(wǎng)絡(luò)的快速發(fā)展,路由交換芯片的交換容量也在急劇增長,業(yè)內(nèi)普遍采用一種隊(duì)列鏈表管理實(shí)現(xiàn)共享存儲空間的方式,來緩解交換容量的壓力;路由交換芯片將源端口的報(bào)文按照路由交換到目的端口,一般分為兩級存儲結(jié)構(gòu)和中間級交換結(jié)構(gòu)。
第一級存儲結(jié)構(gòu)采用虛擬輸入隊(duì)列(virtualinputqueue,viq)方式,即以報(bào)文源端口(iport)為隊(duì)列號組織鏈表存儲;報(bào)文進(jìn)入viq時(shí),先從viq的空閑鏈表中取一個空閑地址,將報(bào)文本體存入本體隨機(jī)存取存儲器(randomaccessmemory,ram)(data_ram)中,再將報(bào)文在data_ram中的地址作為節(jié)點(diǎn)信息,寫入報(bào)文所屬隊(duì)列尾指針(qlist_tp)指向的隊(duì)列鏈表ram(qlist_ram)地址里,同時(shí)將該節(jié)點(diǎn)信息作為新的qlist_tp;報(bào)文出viq時(shí),先以隊(duì)列頭指針(qlist_hp)為data_ram的讀地址,取出報(bào)文,釋放地址到viq的空閑鏈表,同時(shí)以qlist_hp為qlist_ram的讀地址,得到新的qlist_hp。
中間級交換結(jié)構(gòu)在第一級存儲結(jié)構(gòu)的viq之間根據(jù)保序算法逐一調(diào)度出某一隊(duì)列,去查詢路由表,得到目的端口信息(bitmap),返回第一級存儲結(jié)構(gòu)取出隊(duì)首報(bào)文本體,與bitmap一起送到第二級存儲結(jié)構(gòu);這里大致介紹一下保序算法,數(shù)據(jù)包按照特定的依據(jù)切成報(bào)文送到交換網(wǎng),在交換目的端相應(yīng)地按照此特定的依據(jù)將報(bào)文組合還原成數(shù)據(jù)包,這個依據(jù)就是保序算法。
第二級存儲結(jié)構(gòu)采用虛擬輸出隊(duì)列(virtualoutputqueue,voq)方式, 即以目的端口(oport)作為隊(duì)列號組織鏈表存儲;將第一級存儲送來的報(bào)文按bitmap輸入到相應(yīng)的一條或幾條目的端口鏈表隊(duì)列中,在目的隊(duì)列之間再以保序算法調(diào)度出隊(duì),這就實(shí)現(xiàn)了報(bào)文從源到目的的交換。
圖1為利用現(xiàn)有技術(shù)進(jìn)行數(shù)據(jù)交換時(shí)產(chǎn)生報(bào)文交換頭阻的示意圖,如圖1所示,第一級存儲的一個viq中可能存在去往多個不同目的的報(bào)文,例如,第一級存儲的隊(duì)列i_que_0(iport=0)的隊(duì)首報(bào)文去往第二級存儲的隊(duì)列o_que_n-1(oport=n-1),次隊(duì)首報(bào)文去往第二級存儲的隊(duì)列o_que_2(oport=2);如果正在調(diào)度隊(duì)列i_que_0的隊(duì)首報(bào)文,但恰好隊(duì)列o_que_n-1將滿,由于隊(duì)列鏈表緩存的只能順序輸出的特性,一旦隊(duì)首報(bào)文發(fā)生目的端口阻塞無法輸出,余下報(bào)文即便是要去往空閑目的端口也無法輸出,則必然路由交換芯片會流量控制第一級存儲的出口,這時(shí)即使隊(duì)列i_que_0仍有去往隊(duì)列o_que_2的信元,并且隊(duì)列o_que_2中有足夠空間可以接收新的報(bào)文,但因?yàn)殛?duì)首報(bào)文的阻塞,無法從隊(duì)列鏈表中跳過頭指針得到次隊(duì)的隊(duì)首報(bào)文的存儲地址,而只能全部停止調(diào)度,即產(chǎn)生交換頭阻的問題,降低了系統(tǒng)效率和性能。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例期望提供一種消除報(bào)文的交換頭阻的方法及裝置,以解決產(chǎn)生交換頭阻的問題,提高系統(tǒng)效率和性能。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
本發(fā)明提供一種消除報(bào)文的交換頭阻的方法,所述方法包括:
根據(jù)第一虛擬輸入隊(duì)列viq鏈表的節(jié)點(diǎn)信息和目的端口信息建立至少一個第二viq鏈表,并更新所述第一viq鏈表的節(jié)點(diǎn)信息;
確定出所述至少一個第二viq鏈表的隊(duì)首報(bào)文后更新所述至少一個第二viq鏈表的節(jié)點(diǎn)信息,將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息發(fā)送到第二級存儲。
上述方案中,所述根據(jù)第一虛擬輸入隊(duì)列viq鏈表的節(jié)點(diǎn)信息和目的端口信息建立至少一個第二viq鏈表,并更新所述第一viq鏈表的節(jié)點(diǎn)信息,包括:
根據(jù)第一viq鏈表的節(jié)點(diǎn)信息和隊(duì)首報(bào)文的目的端口信息建立至少一個第二viq鏈表;
將所述第一viq鏈表的頭指針作為所述至少一個第二viq鏈表的新的尾指針;
更新所述第一viq鏈表,得到所述第一viq鏈表的新的頭指針。
上述方案中,所述確定出所述至少一個第二viq鏈表的隊(duì)首報(bào)文后更新所述至少一個第二viq鏈表的節(jié)點(diǎn)信息,將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息發(fā)送到第二級存儲,包括:
根據(jù)所述至少一個第二viq鏈表的頭指針得到所述至少一個第二viq鏈表的隊(duì)首報(bào)文;
更新所述至少一個第二viq鏈表,得到所述至少一個第二viq鏈表的新的頭指針;
將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息一起發(fā)送到第二級存儲。
上述方案中,在所述根據(jù)第一viq鏈表的節(jié)點(diǎn)信息和隊(duì)首報(bào)文的目的端口信息建立至少一個第二viq鏈表之前,所述方法還包括:
利用保序算法確定所述第一viq鏈表中的隊(duì)首報(bào)文后,查詢路由得到所述隊(duì)首報(bào)文的目的端口信息。
上述方案中,在所述更新所述第一viq鏈表,得到所述第一viq鏈表的新的頭指針之后,所述方法還包括:
根據(jù)所述第二級存儲的流量控制和利用保序算法得到符合條件的所述至少一個第二viq鏈表。
上述方案中,在所述根據(jù)所述至少一個第二viq鏈表的頭指針得到所述至少一個第二viq鏈表的隊(duì)首報(bào)文之后,在所述更新所述至少一個第二viq鏈表,得到所述至少一個第二viq鏈表的新的頭指針之前,所述方法還包括:
釋放所述至少一個第二viq鏈表的頭指針給所述本體隨機(jī)存取存儲器的空閑鏈表。
上述方案中,所述將所述第一viq鏈表的頭指針作為所述至少一個第二viq鏈表的新的尾指針,包括:
將所述第一viq鏈表的頭指針作為寫數(shù)據(jù),將所述至少一個第二viq鏈表的尾指針作為寫地址,寫入所述至少一個第二viq鏈表的鏈表隨機(jī)存取存儲器中,將所述第一viq鏈表的頭指針作為所述至少一個第二viq鏈表的新的尾指針。
上述方案中,所述更新所述第一viq鏈表,得到所述第一viq鏈表的新的頭指針,包括:
將所述第一viq鏈表的頭指針作為讀地址,讀取所述第一viq鏈表的鏈表隨機(jī)存取存儲器,得到所述第一viq鏈表的新的頭指針。
上述方案中,所述根據(jù)所述至少一個第二viq鏈表的頭指針得到所述至少一個第二viq鏈表的隊(duì)首報(bào)文,包括:
將所述至少一個第二viq鏈表的頭指針作為讀地址,讀取本體隨機(jī)存取存儲器,得到所述至少一個第二viq鏈表的隊(duì)首報(bào)文。
上述方案中,所述更新所述至少一個第二viq鏈表,得到所述至少一個第二viq鏈表的新的頭指針,包括:
將所述至少一個第二viq鏈表的頭指針作為讀地址,讀取所述至少一個第二viq鏈表的鏈表隨機(jī)存取存儲器,得到所述至少一個第二viq鏈表的新的頭指針。
本發(fā)明還提供一種消除報(bào)文的交換頭阻的裝置,所述裝置包括:
第一處理模塊,用于根據(jù)第一虛擬輸入隊(duì)列viq鏈表的節(jié)點(diǎn)信息和目的端口信息建立至少一個第二viq鏈表,并更新所述第一viq鏈表的節(jié)點(diǎn)信息;
第二處理模塊,用于確定出所述至少一個第二viq鏈表的隊(duì)首報(bào)文后更新所述至少一個第二viq鏈表的節(jié)點(diǎn)信息,將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息發(fā)送到第二級存儲。
上述方案中,所述第一處理模塊,具體用于根據(jù)第一viq鏈表的節(jié)點(diǎn)信息和隊(duì)首報(bào)文的目的端口信息建立至少一個第二viq鏈表;
將所述第一viq鏈表的頭指針作為所述至少一個第二viq鏈表的新的尾指針;
更新所述第一viq鏈表,得到所述第一viq鏈表的新的頭指針。
上述方案中,所述第二處理模塊,具體用于根據(jù)所述至少一個第二viq鏈表的頭指針得到所述至少一個第二viq鏈表的隊(duì)首報(bào)文;
更新所述至少一個第二viq鏈表,得到所述至少一個第二viq鏈表的新的頭指針;
將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息一起發(fā)送到第二級存儲。
上述方案中,所述第一處理模塊,還具體用于將所述第一viq鏈表的頭指針作為寫數(shù)據(jù),將所述至少一個第二viq鏈表的尾指針作為寫地址,寫入所述至少一個第二viq鏈表的鏈表隨機(jī)存取存儲器中,將所述第一viq鏈表的頭指針作為所述至少一個第二viq鏈表的新的尾指針;
所述第一處理模塊,還具體用于將所述第一viq鏈表的頭指針作為讀地址,讀取所述第一viq鏈表的鏈表隨機(jī)存取存儲器,得到所述第一viq鏈表的新的頭指針。
上述方案中,所述第二處理模塊,還具體用于將所述至少一個第二viq鏈表的頭指針作為讀地址,讀取本體隨機(jī)存取存儲器,得到所述至少一個第二viq鏈表的隊(duì)首報(bào)文;
所述第二處理模塊,還具體用于將所述至少一個第二viq鏈表的頭指針作為讀地址,讀取所述至少一個第二viq鏈表的鏈表隨機(jī)存取存儲器,得到所述至少一個第二viq鏈表的新的頭指針。
本發(fā)明實(shí)施例提供的消除報(bào)文的交換頭阻的方法及裝置,通過確定出所述至少一個第二viq鏈表的隊(duì)首報(bào)文后更新所述至少一個第二viq鏈表的節(jié)點(diǎn)信息,將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息發(fā)送到第二級存儲;確定出所述至少一個第二viq鏈表的隊(duì)首報(bào)文后更新所述至少一個第二viq鏈表的節(jié)點(diǎn)信息,將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的 端口信息發(fā)送到第二級存儲;不用移動報(bào)文本體,僅對原始viq鏈表(第一viq鏈表)的節(jié)點(diǎn)信息進(jìn)行重新排隊(duì),得到第二viq鏈表,通過第二viq鏈表與第二級存儲進(jìn)行交換,使得不同目的端口的報(bào)文在不同第二viq鏈表中,從而避免相互阻塞,解決了產(chǎn)生交換頭阻的問題,提高了系統(tǒng)效率和性能。
附圖說明
圖1為利用現(xiàn)有技術(shù)進(jìn)行數(shù)據(jù)交換時(shí)產(chǎn)生報(bào)文交換頭阻的示意圖;
圖2為本發(fā)明消除報(bào)文的交換頭阻的方法實(shí)施例一的流程圖;
圖3為本發(fā)明消除報(bào)文的交換頭阻的方法實(shí)施例二的流程圖;
圖4為本發(fā)明消除報(bào)文的交換頭阻的方法實(shí)施例二的單播報(bào)文二次入隊(duì)的示意圖;
圖5為本發(fā)明消除報(bào)文的交換頭阻的方法實(shí)施例二的單播報(bào)文出隊(duì)的示意圖;
圖6為本發(fā)明消除報(bào)文的交換頭阻的方法實(shí)施例二的多播報(bào)文二次入隊(duì)的示意圖;
圖7為本發(fā)明消除報(bào)文的交換頭阻的方法實(shí)施例二的多播報(bào)文出隊(duì)的示意圖;
圖8為本發(fā)明消除報(bào)文的交換頭阻的裝置實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述。
圖2為本發(fā)明消除報(bào)文的交換頭阻的方法實(shí)施例一的流程圖,如圖2所示,本發(fā)明實(shí)施例提供的消除報(bào)文的交換頭阻的方法主要改進(jìn)在路由交換芯片的第一級存儲中,其可以包括如下步驟:
步驟201、根據(jù)第一虛擬輸入隊(duì)列viq鏈表的節(jié)點(diǎn)信息和目的端口信息建立至少一個第二viq鏈表,并更新所述第一viq鏈表的節(jié)點(diǎn)信息。
消除報(bào)文的交換頭阻的裝置仍先將報(bào)文以原始存在的viq鏈表(即,第一viq鏈表為原始存在的viq鏈表)存儲,在中間交換結(jié)構(gòu)查詢路由得到第一viq鏈表的隊(duì)首報(bào)文的目的端口信息后,將節(jié)點(diǎn)信息從第一viq鏈表出隊(duì),根據(jù)隊(duì)首報(bào)文的目的端口信息指向的目的端口建立至少一個新的viq鏈表(即,至少一個第二viq鏈表為根據(jù)隊(duì)首報(bào)文的目的端口信息指向的目的端口建立的至少一個新的viq鏈表),即二次入隊(duì),因?yàn)樵诼酚山粨Q中有多種類型的交換,例如,一對一的單播報(bào)文、一對n(n>1)的多播報(bào)文,因此可以根據(jù)實(shí)際需求建立適合的第二viq鏈表,在此不加以限制;之后更新第一viq鏈表的節(jié)點(diǎn)信息,其中,第一viq鏈表的節(jié)點(diǎn)信息包括了第一viq鏈表的頭指針和尾指針;二次入隊(duì)是節(jié)點(diǎn)信息的二次入隊(duì),報(bào)文本體并不真正從本體ram中出隊(duì),報(bào)文本體占用的地址不釋放給空閑鏈表。
步驟202、確定出所述至少一個第二viq鏈表的隊(duì)首報(bào)文后更新所述至少一個第二viq鏈表的節(jié)點(diǎn)信息,將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息發(fā)送到第二級存儲。
消除報(bào)文的交換頭阻的裝置利用保序算法確定出至少一個第二viq鏈表的隊(duì)首報(bào)文后,更新至少一個第二viq鏈表的節(jié)點(diǎn)信息,其中,第二viq鏈表的節(jié)點(diǎn)信息包括了第二viq鏈表的頭指針和尾指針;之后,將至少一個第二viq鏈表的隊(duì)首報(bào)文和目的端口信息發(fā)送到第二級存儲,通過一組總線傳輸?shù)降诙壌鎯?,第二級存儲可以很容易地根?jù)總緩存深度和單隊(duì)列深度產(chǎn)生目的端口的單隊(duì)列級的流量控制信息,因?yàn)榈诙iq鏈表與第二級存儲結(jié)構(gòu)的單隊(duì)列都是按目的端口排列的,當(dāng)收到第二級存儲的單隊(duì)列級流量控制時(shí),可以區(qū)別響應(yīng),受到流量控制的第二viq鏈表就不參與調(diào)度,在剩余的第二viq鏈表中通過保序算法調(diào)度出一個報(bào)文繼續(xù)向后傳輸,于是解決了產(chǎn)生交換頭阻的問題。
本發(fā)明實(shí)施例提供的消除報(bào)文的交換頭阻的方法,通過確定出所述至少一個第二viq鏈表的隊(duì)首報(bào)文后更新所述至少一個第二viq鏈表的節(jié)點(diǎn)信息,將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息發(fā)送到第二級存儲;確定出所述至少一個第二viq鏈表的隊(duì)首報(bào)文后更新所述至少一個第二 viq鏈表的節(jié)點(diǎn)信息,將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息發(fā)送到第二級存儲;不用移動報(bào)文本體,僅對原始viq鏈表(第一viq鏈表)的節(jié)點(diǎn)信息進(jìn)行重新排隊(duì),得到第二viq鏈表,通過第二viq鏈表與第二級存儲進(jìn)行交換,使得不同目的端口的報(bào)文在不同第二viq鏈表中,從而避免相互阻塞,解決了產(chǎn)生交換頭阻的問題,提高了系統(tǒng)效率和性能。
為了更加體現(xiàn)出本發(fā)明的目的,在上述實(shí)施例的基礎(chǔ)上,進(jìn)一步的舉例說明。
圖3為本發(fā)明消除報(bào)文的交換頭阻的方法實(shí)施例二的流程圖,如圖3所示,本發(fā)明實(shí)施例提供的消除報(bào)文的交換頭阻的方法可以包括如下步驟:
步驟301、利用保序算法確定第一viq鏈表中的隊(duì)首報(bào)文后,查詢路由得到所述隊(duì)首報(bào)文的目的端口信息。
消除報(bào)文的交換頭阻的裝置利用保序算法確定出第一viq鏈表中的隊(duì)首報(bào)文后,去查詢路由返回目的端口信息(bitmap),從bitmap中解析出該隊(duì)首報(bào)文的目的端口號。
步驟302、根據(jù)第一viq鏈表的節(jié)點(diǎn)信息和隊(duì)首報(bào)文的目的端口信息建立至少一個第二viq鏈表。
消除報(bào)文的交換頭阻的裝置根據(jù)第一viq鏈表的頭指針和尾指針以及隊(duì)首報(bào)文的目的端口號建立至少一個第二viq鏈表。
步驟303、將所述第一viq鏈表的頭指針作為所述至少一個第二viq鏈表的新的尾指針。
具體的,消除報(bào)文的交換頭阻的裝置將所述第一viq鏈表的頭指針作為寫數(shù)據(jù),將所述至少一個第二viq鏈表的尾指針作為寫地址,寫入所述至少一個第二viq鏈表的鏈表隨機(jī)存取存儲器(ram)中,將所述第一viq鏈表的頭指針作為所述至少一個第二viq鏈表的新的尾指針。
消除報(bào)文的交換頭阻的裝置將第一viq鏈表的頭指針作為寫數(shù)據(jù),將至少一個第二viq鏈表的尾指針作為寫地址,寫入至少一個第二viq鏈表的鏈表ram中;之后,將第一viq鏈表m的頭指針作為至少一個第二viq鏈表的新 的尾指針。
步驟304、更新所述第一viq鏈表,得到所述第一viq鏈表的新的頭指針。
具體的,消除報(bào)文的交換頭阻的裝置將所述第一viq鏈表的頭指針作為讀地址,讀取所述第一viq鏈表的鏈表隨機(jī)存取存儲器,得到所述第一viq鏈表的新的頭指針。
消除報(bào)文的交換頭阻的裝置將第一viq鏈表的頭指針作為讀地址,讀取第一viq鏈表的鏈表ram,得到第一viq鏈表的新的頭指針。
步驟305、根據(jù)所述第二級存儲的流量控制和利用保序算法得到符合條件的所述至少一個第二viq鏈表。
消除報(bào)文的交換頭阻的裝置根據(jù)第二級存儲的流量控制和利用保序算法得到符合條件的至少一個第二viq鏈表。
步驟306、根據(jù)所述至少一個第二viq鏈表的頭指針得到所述至少一個第二viq鏈表的隊(duì)首報(bào)文。
具體的,消除報(bào)文的交換頭阻的裝置將所述符合條件的至少一個第二viq鏈表的頭指針作為讀地址,讀取本體隨機(jī)存取存儲器(data_ram),得到所述符合條件的至少一個第二viq鏈表的隊(duì)首報(bào)文。
消除報(bào)文的交換頭阻的裝置將符合條件的至少一個第二viq鏈表的頭指針作為讀地址,讀取data_ram,得到符合條件的至少一個第二viq鏈表的隊(duì)首報(bào)文。
步驟307、釋放所述至少一個第二viq鏈表的頭指針給所述本體隨機(jī)存取存儲器的空閑鏈表。
消除報(bào)文的交換頭阻的裝置釋放符合條件的至少一個第二viq鏈表的頭指針給所述data_ram的空閑鏈表,如此該報(bào)文本體在第一級存儲真正完成出隊(duì)。
步驟308、更新所述至少一個第二viq鏈表,得到所述至少一個第二viq鏈表的新的頭指針。
具體的,消除報(bào)文的交換頭阻的裝置將所述至少一個第二viq鏈表的頭指針作為讀地址,讀取所述至少一個第二viq鏈表的鏈表隨機(jī)存取存儲器 (ram),得到所述至少一個第二viq鏈表的新的頭指針。
消除報(bào)文的交換頭阻的裝置將符合條件的至少一個第二viq鏈表的頭指針作為讀地址,讀取符合條件的至少一個第二viq鏈表的鏈表ram,得到符合條件的至少一個第二viq鏈表的新的頭指針。
步驟309、將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息一起發(fā)送到第二級存儲。
消除報(bào)文的交換頭阻的裝置將符合條件的至少一個第二viq鏈表的隊(duì)首報(bào)文和目的端口信息一起發(fā)送到第二級存儲,完成第一級存儲的出隊(duì)。
單播報(bào)文在第一級存儲的二次入隊(duì)和出隊(duì)過程,資源上就只需要另開辟一塊和第一viq鏈表的鏈表ram一樣的緩存,作為第一viq鏈表的鏈表ram,存儲節(jié)點(diǎn)信息的二次入隊(duì)鏈表。
不同于一對一的單播報(bào)文,交換芯片中另一種典型報(bào)文——組播報(bào)文是一對n(n>1)的交換過程,報(bào)文最多可以復(fù)制n份;那么在二次入隊(duì)的時(shí)候會出現(xiàn)將一個報(bào)文節(jié)點(diǎn)信息同時(shí)寫入n個第二viq鏈表的尾指針的場景,因此資源上需要開辟n塊和第一viq鏈表的鏈表ram一樣的緩存;另外一個差別是,上述n個第二viq鏈表可能不會同時(shí)受到流量控制,未受流量控制的第二viq鏈表可以從data_ram讀到報(bào)文本體送到第二級存儲,但只要報(bào)文本體還有一份沒有復(fù)制完成,data_ram中報(bào)文本體所占的地址就不能釋放給空閑鏈表,并且此時(shí)的bitmap內(nèi)容為未受流量控制的目的端口隊(duì)列。
下面以兩種類型報(bào)文作進(jìn)一步的詳細(xì)描述。
圖4為本發(fā)明消除報(bào)文的交換頭阻的方法實(shí)施例二的單播報(bào)文二次入隊(duì)的示意圖,如圖4所示,假設(shè)第一隊(duì)列i_que_1的隊(duì)首報(bào)文被保序算法選中,去查詢路由返回bitmap=0x4(oport=2);根據(jù)第一隊(duì)列i_que_1的節(jié)點(diǎn)信息和bitmap建立第二隊(duì)列vo_que_2;取出第一隊(duì)列i_que_1的qlist_hp=0,qlist_hp=0指示的是該隊(duì)首報(bào)文在data_ram中的地址為0,以0為寫數(shù)據(jù),以二次入隊(duì)第二隊(duì)列vo_que_2的qlist_tp=12為寫地址,寫入第二隊(duì)列vo_que_2的鏈表ram;用0作為第二隊(duì)列vo_que_2的新的尾指針;以0為讀地址,讀取第一隊(duì)列i_que_1 的鏈表ram,得到第一隊(duì)列i_que_1的新的頭指針qlist_hp=13;即,二次入隊(duì)前的第一隊(duì)列i_que_1的鏈表ram為0-13-2-6-7,第一隊(duì)列i_que_1的qlist_hp=0、qlist_tp=7,第二隊(duì)列vo_que_2的鏈表ram為10-12,第二隊(duì)列vo_que_2的qlist_hp=10、qlist_tp=12;二次入隊(duì)后的第一隊(duì)列i_que_1鏈表ram為13-2-6-7,第一隊(duì)列i_que_1的qlist_hp=13、qlist_tp=7,第二隊(duì)列vo_que_2的鏈表ram為10-12-0,第二隊(duì)列vo_que_2的qlist_hp=10、qlist_tp=0;圖中eoc表示尾指針的標(biāo)識。
圖5為本發(fā)明消除報(bào)文的交換頭阻的方法實(shí)施例二的單播報(bào)文出隊(duì)的示意圖,如圖5所示,假設(shè)第二級存儲隊(duì)列o_que_n-1已滿,向前產(chǎn)生單隊(duì)列級流量控制,那么因?yàn)閳?bào)文在二次隊(duì)列中已經(jīng)按目的進(jìn)行了預(yù)排序,即有且僅有第二隊(duì)列vo_que_n-1的報(bào)文是去往第二級存儲隊(duì)列o_que_n-1的,因此剔除第二隊(duì)列vo_que_n-1,在第二隊(duì)列vo_que_0~vo_que_n-2之間按保序算法調(diào)度某一第二隊(duì)列的隊(duì)首報(bào)文出隊(duì);在本實(shí)施例中例如調(diào)度第二隊(duì)列vo_que_2的報(bào)文出隊(duì),取出第二隊(duì)列vo_que_2的qlist_hp=10,以10為讀地址,讀取data_ram得到第二隊(duì)列vo_que_2的隊(duì)首報(bào)文;釋放地址10給空閑鏈表,使得該報(bào)文本體在第一級存儲真正完成出隊(duì);以10為讀地址,讀取第二隊(duì)列vo_que_2的鏈表ram,得到隊(duì)列vo_que_2的新的頭指針qlist_hp=12,即,出隊(duì)前的第二隊(duì)列vo_que_2的鏈表ram為10-12-0,第二隊(duì)列vo_que_2的qlist_hp=10、qlist_tp=0;出隊(duì)后的第二隊(duì)列vo_que_2的鏈表ram為12-0,第二隊(duì)列vo_que_2的qlist_hp=12、qlist_tp=0;最后把第二隊(duì)列vo_que_2的隊(duì)首報(bào)文和bitmap=0x4一起發(fā)送到第二級存儲,在第二級存儲隊(duì)列o_que_n-1入隊(duì),后續(xù)處理為現(xiàn)有技術(shù),在此不贅述。
圖6為本發(fā)明消除報(bào)文的交換頭阻的方法實(shí)施例二的多播報(bào)文二次入隊(duì)的示意圖,如圖6所示,假設(shè)第一隊(duì)列i_que_0的隊(duì)首報(bào)文被保序算法選中,去查詢路由返回bitmap=0x7(oport=0、1、2);根據(jù)第一隊(duì)列i_que_0的節(jié)點(diǎn)信息和bitmap建立多個第二隊(duì)列,分別為第二vo_que_0第二vo_que_1、第二vo_que_2;取出第一隊(duì)列i_que_0的qlist_hp=15,qlist_hp=15指示的是該隊(duì)首 報(bào)文在data_ram中的地址為15,以15為寫數(shù)據(jù),同時(shí)以二次入隊(duì)第二隊(duì)列vo_que_0的qlist_tp=1、第二隊(duì)列vo_que_1的qlist_tp=2、第二隊(duì)列vo_que_2的qlist_tp=7為寫地址,寫入第二隊(duì)列vo_que_0的鏈表ram0、第二隊(duì)列vo_que_1的鏈表ram1、第二隊(duì)列vo_que_2鏈表ram2(其中,第二隊(duì)列vo_que_0的鏈表ram0存儲的是第二隊(duì)列vo_que_0的鏈表,其他類推);用15作為第二隊(duì)列vo_que_0、第二隊(duì)列vo_que_1、第二隊(duì)列vo_que_2的新的尾指針;以15為讀地址,讀取第一隊(duì)列i_que_0的鏈表ram,得到第一隊(duì)列i_que_0的新的頭指針qlist_hp=14;即,二次入隊(duì)前的第一隊(duì)列i_que_0的鏈表ram為15-14-3-4-10-12,第一隊(duì)列i_que_0的qlist_hp=15、qlist_tp=12,第二隊(duì)列vo_que_0的鏈表ram0為1,第二隊(duì)列vo_que_0的qlist_hp=1、qlist_tp=1,第二隊(duì)列vo_que_1的鏈表ram1為0-2,第二隊(duì)列vo_que_1的qlist_hp=0、qlist_tp=2,第二隊(duì)列vo_que_2的鏈表ram2為7,第二隊(duì)列vo_que_2的qlist_hp=7、qlist_tp=7;圖中eoc表示尾指針的標(biāo)識。
圖7為本發(fā)明消除報(bào)文的交換頭阻的方法實(shí)施例二的多播報(bào)文出隊(duì)的示意圖,如圖7所示,假設(shè)第二級存儲隊(duì)列o_que_0已滿,向前產(chǎn)生單隊(duì)列級流量控制,因此剔除第二隊(duì)列vo_que_0,在第二隊(duì)列vo_que_1~vo_que_n-1之間按保序算法調(diào)度某一第二隊(duì)列的隊(duì)首報(bào)文出隊(duì);在本實(shí)施例中,因?yàn)榈诙?duì)列vo_que_0、第二隊(duì)列vo_que_1、第二隊(duì)列vo_que_2是同一報(bào)文復(fù)制而來,根據(jù)保序算法和流量控制,當(dāng)前應(yīng)該同時(shí)調(diào)度第二隊(duì)列vo_que_1、第二隊(duì)列vo_que_2的報(bào)文出隊(duì),它們共同擁有一份報(bào)文本體,因而頭指針指向data_ram中同一個地址,取出頭指針qlist_hp=15,以15為讀地址,讀取data_ram得到第二隊(duì)列vo_que_1、第二隊(duì)列vo_que_2的隊(duì)首報(bào)文,該報(bào)文本體還要等待單隊(duì)列流量控制取消后復(fù)制一份到第二級存儲隊(duì)列o_que_0才算真正完成出隊(duì),因此地址15暫時(shí)不能釋放給空閑鏈表;以15為讀地址,讀取第二隊(duì)列vo_que_1的鏈表ram1,得到第二隊(duì)列vo_que_1的新的頭指針qlist_hp=7,以15為讀地址,讀取第二隊(duì)列vo_que_2的鏈表ram2,得到第二隊(duì)列vo_que_2的新的頭指針qlist_hp=13,即,出隊(duì)前的第二隊(duì)列vo_que_0的鏈表ram0為15,第二 隊(duì)列vo_que_0的qlist_hp=15、qlist_tp=15,出隊(duì)前的第二隊(duì)列vo_que_1的鏈表ram1為15-7-10-11,第二隊(duì)列vo_que_1的qlist_hp=15、qlist_tp=11,出隊(duì)前的第二隊(duì)列vo_que_2的鏈表ram2為15-13,第二隊(duì)列vo_que_2的qlist_hp=15、qlist_tp=13;出隊(duì)后的第二隊(duì)列vo_que_0的鏈表ram0為15,第二隊(duì)列vo_que_0的qlist_hp=15、qlist_tp=15不變,出隊(duì)后的第二隊(duì)列vo_que_1的鏈表ram1為7-10-11,第二隊(duì)列vo_que_1的qlist_hp=7、qlist_tp=11,出隊(duì)后的第二隊(duì)列vo_que_2的鏈表ram2為13,第二隊(duì)列vo_que_2的qlist_hp=13、qlist_tp=13;把該報(bào)文和bitmap=0x6一起發(fā)送到第二級存儲,在第二級隊(duì)列o_que_1和第二級隊(duì)列o_que_2分別入隊(duì),后續(xù)處理為現(xiàn)有技術(shù),在此不贅述。
本發(fā)明實(shí)施例提供的消除報(bào)文的交換頭阻的方法,通過根據(jù)第一viq鏈表的節(jié)點(diǎn)信息和隊(duì)首報(bào)文的目的端口信息建立至少一個第二viq鏈表;將所述第一viq鏈表的頭指針作為所述至少一個第二viq鏈表的新的尾指針;更新所述第一viq鏈表,得到所述第一viq鏈表的新的頭指針;根據(jù)所述至少一個第二viq鏈表的頭指針得到所述至少一個第二viq鏈表的隊(duì)首報(bào)文;更新所述至少一個第二viq鏈表,得到所述至少一個第二viq鏈表的新的頭指針。將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息一起發(fā)送到第二級存儲;通過不用移動報(bào)文本體,僅對原始viq鏈表(第一viq鏈表)的節(jié)點(diǎn)信息進(jìn)行重新排隊(duì),得到第二viq鏈表,通過第二viq鏈表與第二級存儲進(jìn)行交換,使得不同目的端口的報(bào)文在不同第二viq鏈表中,從而避免相互阻塞,解決了產(chǎn)生交換頭阻的問題,提高了系統(tǒng)效率和性能。
圖8為本發(fā)明消除報(bào)文的交換頭阻的裝置實(shí)施例的結(jié)構(gòu)示意圖,如圖8所示,本發(fā)明實(shí)施例提供的消除報(bào)文的交換頭阻的裝置08包括:第一處理模塊81、第二處理模塊82;其中,
所述第一處理模塊81,用于根據(jù)第一虛擬輸入隊(duì)列viq鏈表的節(jié)點(diǎn)信息和目的端口信息建立至少一個第二viq鏈表,并更新所述第一viq鏈表的節(jié)點(diǎn)信息;
所述第二處理模塊82,用于確定出所述至少一個第二viq鏈表的隊(duì)首報(bào)文 后更新所述至少一個第二viq鏈表的節(jié)點(diǎn)信息,將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息發(fā)送到第二級存儲。
進(jìn)一步的,所述第一處理模塊81,具體用于根據(jù)第一viq鏈表的節(jié)點(diǎn)信息和隊(duì)首報(bào)文的目的端口信息建立至少一個第二viq鏈表;
將所述第一viq鏈表的頭指針作為所述至少一個第二viq鏈表的新的尾指針;
更新所述第一viq鏈表,得到所述第一viq鏈表的新的頭指針。
進(jìn)一步的,所述第二處理模塊82,具體用于根據(jù)所述至少一個第二viq鏈表的頭指針得到所述至少一個第二viq鏈表的隊(duì)首報(bào)文;
更新所述至少一個第二viq鏈表,得到所述至少一個第二viq鏈表的新的頭指針;
將所述至少一個第二viq鏈表的隊(duì)首報(bào)文和所述目的端口信息一起發(fā)送到第二級存儲。
進(jìn)一步的,所述裝置還包括:獲取模塊83;其中,
所述獲取模塊83,用于利用保序算法確定所述第一viq鏈表中的隊(duì)首報(bào)文后,查詢路由得到所述隊(duì)首報(bào)文的目的端口信息。
進(jìn)一步的,所述裝置還包括:選取模塊84;其中,
所述選取模塊84,用于根據(jù)所述第二級存儲的流量控制和利用保序算法得到符合條件的所述至少一個第二viq鏈表。
進(jìn)一步的,所述裝置還包括:釋放模塊85;其中,
所述釋放模塊85,用于釋放所述至少一個第二viq鏈表的頭指針給所述本體隨機(jī)存取存儲器的空閑鏈表。
進(jìn)一步的,所述第一處理模塊81,還具體用于將所述第一viq鏈表的頭指針作為寫數(shù)據(jù),將所述至少一個第二viq鏈表的尾指針作為寫地址,寫入所述至少一個第二viq鏈表的鏈表隨機(jī)存取存儲器中,將所述第一viq鏈表的頭指針作為所述至少一個第二viq鏈表的新的尾指針。
進(jìn)一步的,所述第一處理模塊81,還具體用于將所述第一viq鏈表的頭指 針作為讀地址,讀取所述第一viq鏈表的鏈表隨機(jī)存取存儲器,得到所述第一viq鏈表的新的頭指針。
進(jìn)一步的,所述第二處理模塊82,還具體用于將所述至少一個第二viq鏈表的頭指針作為讀地址,讀取本體隨機(jī)存取存儲器,得到所述至少一個第二viq鏈表的隊(duì)首報(bào)文。
進(jìn)一步的,所述第二處理模塊82,還具體用于將所述至少一個第二viq鏈表的頭指針作為讀地址,讀取所述至少一個第二viq鏈表的鏈表隨機(jī)存取存儲器,得到所述至少一個第二viq鏈表的新的頭指針。
本實(shí)施例的裝置,可以用于執(zhí)行上述所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,此處不再贅述。
在實(shí)際應(yīng)用中,所述第一處理模塊81、第二處理模塊82、獲取模塊83、選取模塊84、釋放模塊85可由位于裝置上的中央處理器(cpu)、微處理器(mpu)、數(shù)字信號處理器(dsp)或現(xiàn)場可編程門陣列(fpga)等器件實(shí)現(xiàn)。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用硬件實(shí)施例、軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器和光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲器中,使得存儲在該計(jì)算機(jī)可讀存儲器中的 指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。