專利名稱::一種高速并行的無鎖流表路由查找方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及路由查找算法,具體說是一種高速并行的無鎖流表路由查找方法,尤指多核處理器高速并行的無鎖流表路由查找方法。
背景技術(shù):
:隨著網(wǎng)絡(luò)帶寬的急劇增加,使得網(wǎng)絡(luò)的鏈路速率發(fā)展到lOGb/s,甚至更高,應(yīng)用高性能的多核處理器硬件平臺和高速的路由查找算法,設(shè)計出滿足網(wǎng)絡(luò)性能要求的路由器顯得非常必要。傳統(tǒng)的單核處理器的處理能力受到主頻和功耗等因素的制約,在性能上難以滿足日益增長的網(wǎng)絡(luò)數(shù)據(jù)處理任務(wù)要求。高性能的多核處理器在數(shù)據(jù)處理過程中能夠?qū)崿F(xiàn)并行處理,網(wǎng)絡(luò)延時小,數(shù)據(jù)吞吐量大,在當前的高端路由器中有著一定的應(yīng)用范圍。但是,傳統(tǒng)的基于基數(shù)排序樹(RadixTrie)、多分支Trie樹(MultibitTrie,多分支查找樹)、分段地址等路由查找算法多應(yīng)用在串行數(shù)據(jù)流處理的單核處理器中,這些算法在多核處理器中,由于多核并行執(zhí)行數(shù)據(jù)處理導(dǎo)致的路由資源競爭,易造成數(shù)據(jù)瓶頸,使得多核處理器的并行處理能力不能完全得以發(fā)揮,造成極大的資源浪費。路由查找的專用芯片TCAM(TernaryContentAddressableMemory,三態(tài)內(nèi)容尋址存儲器),由于其價格高昂,不適合在一些對成本敏感的路由器設(shè)計中廣泛采用,而SDRAM(同步動態(tài)隨機存儲器)價格低廉,因此開展基于SDRAM的快速路由查找算法的應(yīng)用研究顯得異常重要。高端路由器進行路由轉(zhuǎn)發(fā)時其轉(zhuǎn)發(fā)條目可達到百萬之上,在眾多的路由條目中匹配一條路由所消耗的時間主要取決于查找算法的性能。為了提高路由性能,在路由表設(shè)計過程中,基于原有路由表上再增加一張表,形成兩層路由表的結(jié)構(gòu)設(shè)計。第一層表是總表,保存著所有的路由條目和信息;新增的第二層表為流表,保存一定時間段下的常用路由的路由表項信息(Entry)。每次數(shù)據(jù)包轉(zhuǎn)發(fā)過程中,先去流表中進行查找,如果在流表中查找到匹配的路由表項信息,則數(shù)據(jù)包直接根據(jù)匹配的路由表項信息中的路由信息輸出到出端口;如果查詢不成功,則再進入總表中查找,在總表中查找到匹配的路由條目和信息后,將數(shù)據(jù)轉(zhuǎn)發(fā)出去的同時并將該匹配的路由條目和信息添加到流表中,方便同一數(shù)據(jù)流的下一個數(shù)據(jù)包在流表中查找。之所以采用流表的查找策略可以提高路由查找的效率,是因為流表中維護的路由條目遠遠小于總表,在流表中進行一次路由匹配與在總表中去匹配所需要的平均時間要小,并且,一般在路由表設(shè)計的時候,將流表置于處理器內(nèi)部的Cache(高速緩沖存儲器)中,使得基于流表的路由查找方式在性能上有更大的提升。上述基于流表的路由查找策略在單核串行處理方式上的確可以優(yōu)化性能,提高路由查找的性能。為了提高多核處理器查找的性能,同樣引入了流表的設(shè)計思想,但是由于多核處理器并行處理的特點,表項資源的共享和互斥問題給流表的設(shè)計提出了新的挑戰(zhàn)。一般常用的方法是在系統(tǒng)的Cache上創(chuàng)建一張多個核(處理器的核)共享的流表,但是多個核共同使用一張表必定造成資源的競爭,為了保證數(shù)據(jù)處理的安全性通常的解決辦法就是采用資源鎖,這在并行處理上容易造成數(shù)據(jù)處理瓶頸。同時每個核上處理的數(shù)據(jù)各不一樣,倉Ij建的表項形成的流表表項數(shù)目較多,對于基于流表的遍歷查找效率有所打折。另一種方法是在系統(tǒng)的Cache上創(chuàng)建與核數(shù)相對應(yīng)數(shù)目的流表,每個核維護一張流表,這種方式對于多核系統(tǒng)中同一個流的數(shù)據(jù)包送往同一個核處理的核間調(diào)度機制來說不會存在流表的競爭關(guān)系。因為相同的數(shù)據(jù)流在同一個核上進行處理,建立的流表的表項不會被其它核所用,此時這個流表只屬于這個核所私有,數(shù)據(jù)包路由查找在該核上串行實現(xiàn),多核間對于流表不會存在競爭的關(guān)系,如圖I所示的核I上處理數(shù)據(jù)流“A”。但流分類一般采用Hash算法(哈希算法),因Hash沖突的存在,導(dǎo)致Hash值相同但對應(yīng)轉(zhuǎn)發(fā)表不在流表中的數(shù)據(jù)流會進入同一個核進行處理,由于查表失敗而只能進入總表中進行第二次查找,從而對系統(tǒng)性能產(chǎn)生一定影響。對于多核數(shù)據(jù)流無序調(diào)度機制來講,也會產(chǎn)生問題,同一個數(shù)據(jù)流的數(shù)據(jù)包可能會發(fā)送到幾個不同的核上去處理,在處理的過程中它們共享一張流表,因此存在相互競爭的關(guān)系。如圖I所示核2、核3和核4處理數(shù)據(jù)流“O”時所示,三個核處理的數(shù)據(jù)包都需要用到同一張流表,此時就會發(fā)生假如一個核上的數(shù)據(jù)包正在查詢該數(shù)據(jù)包流對應(yīng)的流表的某一個表項時,另一個核正對該表項進行刪除,此時就會造成沖突,出現(xiàn)數(shù)據(jù)丟包等錯誤現(xiàn)象。常用的解決辦法就是對流表增加資源鎖,在無序的并行處理機制中,同一時間只允許一個核對其某一流表進行操作。采用流表設(shè)計的路由查找策略可以提升路由查找的性能,當前在單核處理中存在廣泛的應(yīng)用,但是在多核處理器執(zhí)行并行查找的特殊環(huán)境下,對流表資源存在競爭的關(guān)系,上述方法依舊會產(chǎn)生路由過程中的數(shù)據(jù)處理瓶頸,對多核的并行處理效率的較大影響,并造成數(shù)據(jù)處理延時加大。
發(fā)明內(nèi)容針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種高速并行的無鎖流表路由查找方法,解決多核處理器并行執(zhí)行過程中,現(xiàn)有流表設(shè)計方法造成的數(shù)據(jù)處理瓶頸問題,實現(xiàn)了多核并行執(zhí)行過程中數(shù)據(jù)轉(zhuǎn)發(fā)的安全性和快速性,提高大容量系統(tǒng)路由查找速度和并行路由查找的性能。為達到以上目的,本發(fā)明采取的技術(shù)方案是一種高速并行的無鎖流表路由查找方法,其特征在于,包括以下步驟步驟I:控制平面定期分別對初始化創(chuàng)建的N個流表g_flow_table[i]中的表項進行遍歷,0=〈i〈N,N值等于多核處理器的核數(shù)且N大于等于2,每遍歷一個表項的同時對表項的創(chuàng)建時間進行檢測;步驟2:控制平面執(zhí)行表項時間檢測函數(shù),如果當前時間time_info.current_time〉表項的創(chuàng)建時間flow_entry.create_time+生存周期時間time_info.expired_time,表明該表項已經(jīng)超期,則通過消息發(fā)送函數(shù)向表項對應(yīng)的核發(fā)送超期消息FL0W_INVALID,同時,將該表項通過鏈表添加函數(shù)添加到超期池g_expired_flow_pool對應(yīng)的鏈表中;步驟3:控制平面對超期池g_expired_flow_pool對應(yīng)的鏈表進行遍歷,如果當前時間time_info.current_time>表項的創(chuàng)建時間flow_entry.create_time+2*生存周期時間time_info.expired_time,表明該表項需要從內(nèi)存中刪除,貝U通過消息發(fā)送函數(shù)向表項對應(yīng)的核發(fā)送釋放內(nèi)存消息FL0W_DELETE。在上述技術(shù)方案的基礎(chǔ)上,步驟4:數(shù)據(jù)平面通過接收函數(shù)接收控制平面通過消息發(fā)送函數(shù)發(fā)送過來的消息,并對消息的種類進行分析;如果控制平面通過消息發(fā)送函數(shù)發(fā)送過來的消息是超期消息FL0W_INVALID,表明需要將對應(yīng)的表項從流表中移出,則數(shù)據(jù)平面調(diào)用移出函數(shù),通過雙向鏈表中表項結(jié)點的操作(例如next->prev=prev,prev_>next=next)將該表項從流表的鏈表中移出,并將該表項通過鏈表添加函數(shù)添加到超期池g_expired_flow_pool對應(yīng)的鏈表中,此時并未釋放表項內(nèi)存,因此可以保證可能正在利用該表項進行轉(zhuǎn)發(fā)操作的其它核,將數(shù)據(jù)包順利轉(zhuǎn)發(fā)出去;如果控制平面通過消息發(fā)送函數(shù)發(fā)送過來的消息是釋放內(nèi)存消息FL0W_DELETE,表明需要將該表項從流表中刪除,并釋放內(nèi)存空間,則數(shù)據(jù)平面調(diào)用刪除函數(shù),將該表項從流表中刪除并釋放內(nèi)存空間。在上述技術(shù)方案的基礎(chǔ)上,還包括以下步驟步驟5:當數(shù)據(jù)平面執(zhí)行完消息處理后,進入待轉(zhuǎn)發(fā)數(shù)據(jù)包的路由查找處理,調(diào)用流表查找函數(shù)flowjookup在對應(yīng)的流表中進行路由查找,如果在對應(yīng)的流表中沒有查找到匹配的表項,則通過流表增加函數(shù)flow_add在流表中創(chuàng)建新表項flow_entry,此時新表項flow_entry中的有效標志位action_num置O,用表項添加函數(shù)list_add將表項添加到該流表數(shù)據(jù)鏈的頭部,并把待轉(zhuǎn)發(fā)數(shù)據(jù)包的路由信息指針flow_info指向該新表項flow_entry,以便通過該指針獲得路由表項信息,完成后進入步驟6;如果在對應(yīng)的流表中查找到匹配的表項,通過待轉(zhuǎn)發(fā)數(shù)據(jù)包的路由信息指針flow_info返回得到路由表項信息,然后進入步驟7;步驟6:通過路由查找函數(shù)rt_lookUp在總表中進行路由查找,如果沒有查找到匹配的表項,則依照配置規(guī)則對數(shù)據(jù)包做相應(yīng)的處理,可按現(xiàn)有技術(shù)實施,不再詳述;如果查找到匹配的表項,將該表項的內(nèi)容復(fù)制到上一步(步驟5)創(chuàng)建的新表項flow_entry中,并將該新表項的有效標志位action_num置I,加上表項的創(chuàng)建時間,然后進入步驟7;步驟7:根據(jù)待轉(zhuǎn)發(fā)數(shù)據(jù)包查表返回得到的路由表項信息將待轉(zhuǎn)發(fā)數(shù)據(jù)包發(fā)送到對應(yīng)的出端口。本發(fā)明所述的高速并行的無鎖流表路由查找方法,解決多核處理器并行執(zhí)行過程中,現(xiàn)有流表設(shè)計方法造成的數(shù)據(jù)處理瓶頸問題,實現(xiàn)了多核并行執(zhí)行過程中數(shù)據(jù)轉(zhuǎn)發(fā)的安全性和快速性,提高大容量系統(tǒng)路由查找速度和并行路由查找的性能。本發(fā)明有如下附圖圖I多核并行調(diào)度環(huán)境下流表、總表與核之間的關(guān)系圖,圖2多核并行執(zhí)行環(huán)境流表原理圖,圖3初期的流和超期池表項結(jié)構(gòu)圖,圖4第一階段流表和超期池表項結(jié)構(gòu)圖,圖5第二階段流表和超期池表項結(jié)構(gòu)圖。具體實施方式以下結(jié)合附圖對本發(fā)明作進一步詳細說明。通過對現(xiàn)有的采用流表設(shè)計的路由查找策略進行分析,我們可知多核處理器中采用流表的路由查找策略,在一定程度上提高了路由查找的效率,但是由于多核處理器具有的并行執(zhí)行的特點,使得無論是多核共享同一張流表的設(shè)計架構(gòu),還是每個核各自維護一張流表的設(shè)計架構(gòu),都會產(chǎn)生表項資源的競爭。為了系統(tǒng)的安全性和可靠性,在一定范圍內(nèi)都需要采用資源鎖的形式解決流表表項的競爭問題,這種采用資源鎖的解決方法對多核處理器的并行執(zhí)行效率有所折損,在一定程度上容易產(chǎn)生數(shù)據(jù)瓶頸,不利于多核處理器硬件性能的完全發(fā)揮。以下對現(xiàn)有的多核并行執(zhí)行環(huán)境中流表原理進行分析。在多核處理器的多核并行執(zhí)行環(huán)境中,根據(jù)核完成的任務(wù)不同,分為數(shù)據(jù)平面(DataPlane)和控制平面(ControlPlane)。數(shù)據(jù)平面主要實現(xiàn)數(shù)據(jù)包數(shù)據(jù)的接收、數(shù)據(jù)頭分析、流表和總表的查詢、數(shù)據(jù)的轉(zhuǎn)發(fā)等??刂破矫嬷饕獙崿F(xiàn)將各種路由協(xié)議中學(xué)習(xí)的路由信息,下發(fā)到數(shù)據(jù)平面的轉(zhuǎn)發(fā)表中,并對處于數(shù)據(jù)平面的總表和流表進行管理與維護。一般來講總表和流表是建立在一段系統(tǒng)共享內(nèi)存上,可以確??刂破矫婧蛿?shù)據(jù)平面對其都可見,便于數(shù)據(jù)平面對路由表項數(shù)據(jù)的查詢和讀取,便于控制平面對路由表項數(shù)據(jù)的管理與維護。在多核并行執(zhí)行環(huán)境中采用流表的方式加快路由查找的速率,系統(tǒng)通常在Cache中申請與處理器的核數(shù)N(N大于等于2)相等的用來存放流表的空間塊。每個流表內(nèi)的路由表項集合是總表的一個子集,流表(FlowTable)與總表(GlobalRouterTable)之間的關(guān)系如圖2所示,在路由初始化后隨著數(shù)據(jù)流轉(zhuǎn)發(fā)過程一步步建立。處理器的核每次進行路由查找時,先去對應(yīng)的流表中進行查找,如果找到則數(shù)據(jù)直接根據(jù)路由信息轉(zhuǎn)發(fā)到出端口,如果查詢不到,則再進入總表中查找,在總表中查找到路由后,將該條路由添加到流表中。多核處理器在并行執(zhí)行的任務(wù)調(diào)度上分為有序調(diào)度模式(staticaffinitymode)和無序調(diào)度模式(round-robinmode)。有序調(diào)度模式下相同Hash值的數(shù)據(jù)流發(fā)往同一個核進行處理;無序調(diào)度模式下相同Hash值的數(shù)據(jù)流可能發(fā)往不同的核進行處理,多核并行執(zhí)行系統(tǒng)中流表的設(shè)計需要兼顧到這兩種調(diào)度方式的區(qū)別。設(shè)計過程中為了同時實現(xiàn)上述兩個執(zhí)行模式下流表工作的高效性和內(nèi)存消耗的合理性,在有序調(diào)度模式上,流表屬于核所私有,因為同一數(shù)據(jù)流在同一核上處理,可以確保其它的核不來競爭該流表資源;在無序調(diào)度模式上,流表屬于同一數(shù)據(jù)流所共享,但是同一數(shù)據(jù)流的數(shù)據(jù)包會發(fā)往不同的核進行處理,核在處理該流的數(shù)據(jù)包時,根據(jù)數(shù)據(jù)包信息哈希到該流對應(yīng)的同一個流表上,因此流表此時為核間所共享。雖然系統(tǒng)為數(shù)據(jù)平面的每個核創(chuàng)建了一個屬于自己的流表,但是在多核無序調(diào)度過程中,本屬于該核處理的數(shù)據(jù)流可能會發(fā)送到其它的核上去處理,其它核處理該數(shù)據(jù)過程中,通過數(shù)據(jù)任務(wù)本身攜帶的信息可以哈希到該核的流表上,因此還是會形成多個核使用相同的一張流表的現(xiàn)象,例如當同流的數(shù)據(jù)包在一個核上的正在查詢對應(yīng)的流表的某一個表項同時,另一個核此時正對該表項進行刪除,一定程度上還是會造成數(shù)據(jù)轉(zhuǎn)發(fā)的不確定性。以下對本發(fā)明的多核并行執(zhí)行環(huán)境中無鎖流表原理進行分析。為了完全解決上述問題,實現(xiàn)真正意義上的無鎖流表設(shè)計,本發(fā)明在設(shè)計中將表項的刪除過程劃分為兩個階段,第一階段將需要刪除的表項從流表的鏈表中剝離,第二階段是在一段一定周期(生存周期)時間后,通過釋放第一階段中剝離的表項內(nèi)存空間來刪除表項。第一階段中表項雖然已經(jīng)從流表的鏈表中剝離,但是不刪除,這樣做可以保證核在刪除表項操作過程時,其它核上處于使用該表項的數(shù)據(jù)仍能正確轉(zhuǎn)發(fā)出去。流表中的表項生存周期是根據(jù)時間來設(shè)定的,如果生存周期已到需要對表項進行相應(yīng)的刪除操作。初期的流表(g_flow_table)和超期池(g_expired_flow_pool)表項結(jié)構(gòu)圖如圖3所示,流表g_flow_table[i](0=〈i〈N,N為處理器核數(shù))中的每個表項flow_entry在創(chuàng)建時有一個時間標簽flow_entry.create_time,表項的生存周期時間為time_info.expired_time,當前時間為time_info.current_time??刂破矫鎸τ诹鞅碇斜眄椀膭h除過程的兩個階段按照時間來劃分,控制平面負責(zé)定期對所有流表進行遍歷,當發(fā)現(xiàn)表項的當前時間time_info.current_time大于表項的創(chuàng)建時間flow_entry.create_time與生存周期時間time_info.expired_time之和,表明表項已經(jīng)超期,進入第一階段,將該表項從流表中移出,并將超期的表項添加到g_expired_flow_pool鏈表后,第一階段流表(g_flow_table)和超期池(g_expired_flow_pool)表項結(jié)構(gòu)圖如圖4所示。當控制平面定期對添加了超期鏈表g_expired_flow_pool中的表項進行遍歷時,如果表項的當前時間大于表項的創(chuàng)建時間與2倍的生存周期時間之和時,表項操作進入第二階段,表明超期的表項需要釋放內(nèi)存空間,進行真正的刪除,第二階段流表(g_flow_table)和超期池(g_expired_flow_pool)表項結(jié)構(gòu)圖如圖5所示??刂破矫尕撠?zé)所有流表的表項的時間檢測和超期表項鏈表g_expired_flow_pool的維護管理,并通過消息隊列的方式將需要移出和需要釋放空間的表項信息發(fā)送到對應(yīng)所屬的數(shù)據(jù)平面核上,該核接收到控制平面的隊列消息(FL0W_INVALID或FL0W_DELETE),分別對該表項進行相應(yīng)的操作。本發(fā)明所述的高速并行的無鎖流表路由查找方法,包括以下步驟A)控制平面實現(xiàn)步驟步驟I:控制平面定期分別對初始化創(chuàng)建的N個流表g_flow_table[i]中的表項進行遍歷,0=〈i〈N,N值等于多核處理器的核數(shù)且N大于等于2,每遍歷一個表項的同時對表項的創(chuàng)建時間進行檢測;步驟2:控制平面執(zhí)行表項時間檢測函數(shù),如果當前時間time_info.current_time〉表項的創(chuàng)建時間flow_entry.create_time+生存周期時間time_info.expired_time,表明該表項已經(jīng)超期,則通過消息發(fā)送函數(shù)向表項對應(yīng)的核發(fā)送超期消息FL0W_INVALID,同時,將該表項通過鏈表添加函數(shù)添加到超期池g_expired_flow_pool對應(yīng)的鏈表中;步驟3:控制平面對超期池g_expired_flow_pool對應(yīng)的鏈表進行遍歷,如果當前時間time_info.current_time>表項的創(chuàng)建時間flow_entry.create_time+2*生存周期時間time_info.expired_time,表明該表項需要從內(nèi)存中刪除,貝U通過消息發(fā)送函數(shù)向表項對應(yīng)的核發(fā)送釋放內(nèi)存消息FL0W_DELETE;B)數(shù)據(jù)平面實現(xiàn)步驟步驟4:數(shù)據(jù)平面通過接收函數(shù)接收控制平面通過消息發(fā)送函數(shù)發(fā)送過來的消息,并對消息的種類進行分析;如果控制平面通過消息發(fā)送函數(shù)發(fā)送過來的消息是超期消息FL0W_INVALID,表明需要將對應(yīng)的表項從流表中移出,則數(shù)據(jù)平面調(diào)用移出函數(shù),通過雙向鏈表中表項結(jié)點的操作(例如next->prev=prev,prev_>next=next)將該表項從流表的鏈表中移出,并將該表項通過鏈表添加函數(shù)添加到超期池g_expired_flow_pool對應(yīng)的鏈表中,此時并未釋放表項內(nèi)存,因此可以保證可能正在利用該表項進行轉(zhuǎn)發(fā)操作的其它核,將數(shù)據(jù)包順利轉(zhuǎn)發(fā)出去;如果控制平面通過消息發(fā)送函數(shù)發(fā)送過來的消息是釋放內(nèi)存消息FL0W_DELETE,表明需要將該表項從流表中刪除,并釋放內(nèi)存空間,則數(shù)據(jù)平面調(diào)用刪除函數(shù),將該表項從流表中刪除并釋放內(nèi)存空間。在上述技術(shù)方案的基礎(chǔ)上,還包括以下步驟步驟5:當數(shù)據(jù)平面執(zhí)行完消息處理后,進入待轉(zhuǎn)發(fā)數(shù)據(jù)包的路由查找處理,調(diào)用流表查找函數(shù)flowjookup在對應(yīng)的流表中進行路由查找,如果在對應(yīng)的流表中沒有查找到匹配的表項,則通過流表增加函數(shù)flow_add在流表中創(chuàng)建新表項flow_entry,此時新表項flow_entry中的有效標志位action_num置O,用表項添加函數(shù)list_add將表項添加到該流表數(shù)據(jù)鏈的頭部,并把待轉(zhuǎn)發(fā)數(shù)據(jù)包的路由信息指針flow_info指向該新表項flow_entry,以便通過該指針獲得路由表項信息,完成后進入步驟6;如果在對應(yīng)的流表中查找到匹配的表項,通過待轉(zhuǎn)發(fā)數(shù)據(jù)包的路由信息指針flow_info返回得到路由表項信息,然后進入步驟7;步驟6:通過路由查找函數(shù)rt_lookUp在總表中進行路由查找,如果沒有查找到匹配的表項,則依照配置規(guī)則對數(shù)據(jù)包做相應(yīng)的處理,可按現(xiàn)有技術(shù)實施,不再詳述;如果查找到匹配的表項,將該表項的內(nèi)容復(fù)制到上一步(步驟5)創(chuàng)建的新表項flow_entry中,并將該新表項的有效標志位action_num置I,加上表項的創(chuàng)建時間,然后進入步驟7;步驟7:根據(jù)待轉(zhuǎn)發(fā)數(shù)據(jù)包查表返回得到的路由表項信息將待轉(zhuǎn)發(fā)數(shù)據(jù)包發(fā)送到對應(yīng)的出端口。本發(fā)明的關(guān)鍵點多核處理器并行執(zhí)行的環(huán)境中,采用與核數(shù)相對應(yīng)數(shù)目流表的設(shè)計結(jié)構(gòu)提高路由查找效率,并用多核中的控制平面與數(shù)據(jù)平面相結(jié)合,將流表中表項的刪除操作分割成兩個相對獨立的FL0W_INVALID(失效)和FL0W_DELETE(刪除)階段,用無鎖流表(流表無資源鎖)的方式解決了多核并行執(zhí)行過程中,多個核同時共享(讀寫)同一張流表造成的數(shù)據(jù)轉(zhuǎn)發(fā)不安全問題,避免了采用資源鎖對流表進行管理而降低路由查找的效率問題,實現(xiàn)多核并行執(zhí)行各模式(無序調(diào)度和有序調(diào)度模式)下的無鎖流表路由查找方法。特別說明無序調(diào)度和有序調(diào)度模式對于無鎖流表的上述步驟是沒有影響的,本發(fā)明能夠支持多核下兩種調(diào)度模式,兩種調(diào)度方式的不同只會影響到數(shù)據(jù)包發(fā)往處理的核有所差別,但是對于數(shù)據(jù)包hash到的流表則不會產(chǎn)生影響。本發(fā)明通過設(shè)計方法將對流表表項的刪除操作分成兩個階段,第一階段是讓表項失效,但是不刪除表項;第二階段再去釋放表項資源空間。使得并行路由查找過程中,多個核在同一時刻對同一表項進行的刪除和查找操作,可以并行執(zhí)行而不影響效率,并且可以保證在表項失效的時,其它核上正在利用該表項的數(shù)據(jù)包,依舊可以利用該表項的路由信息將數(shù)據(jù)發(fā)送出去,保障了數(shù)據(jù)處理的安全性和可靠性。本發(fā)明避免了采用資源鎖造成對流表的執(zhí)行只能串行執(zhí)行,使得并行路由查找產(chǎn)生數(shù)據(jù)處理瓶頸,而降低并行查找的效率。特別說明失效的表項加入超期池是為了便于控制平面對表項的生存周期進行管理,系統(tǒng)并不根據(jù)超期池中的表項進行數(shù)據(jù)轉(zhuǎn)發(fā)。本發(fā)明中對一個表項刪除劃分為失效和刪除兩個操作的根本原因在于無序調(diào)度下可能存在的多個核共用一個表項,但是此時有核對表項進行刪除操作,如果此時進行表項的內(nèi)存釋放,面臨的問題是其它核正在利用該表項進行轉(zhuǎn)發(fā)的操作是不安全的。因此劃分為FL0W_INVALID(失效)和FL0W_DELETE(刪除)兩個階段,失效但是內(nèi)存不釋放,因此其它核(在該時刻)依舊可以利用其表項進行安全的數(shù)據(jù)轉(zhuǎn)發(fā)。由于失效操作,該表項從鏈表中已經(jīng)移除,以后的流表查找操作也不會查找到該表項。需要理解的是,我們設(shè)計該發(fā)明保護數(shù)據(jù)的安全性,就是要保護刪除表項的這個時間點(這個點可能有多個核都在用同一個表項),而不是第一個階段。本說明書中未作詳細描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。權(quán)利要求1.一種高速并行的無鎖流表路由查找方法,其特征在于,包括以下步驟步驟I:控制平面定期分別對初始化創(chuàng)建的N個流表g_flow_table[i]中的表項進行遍歷,0=〈i〈N,N值等于多核處理器的核數(shù)且N大于等于2,每遍歷一個表項的同時對表項的創(chuàng)建時間進行檢測;步驟2:控制平面執(zhí)行表項時間檢測函數(shù),如果當前時間time_info.current_time>表項的創(chuàng)建時間flow_entry.create_time+生存周期時間time_info.expired_time,表明該表項已經(jīng)超期,則通過消息發(fā)送函數(shù)向表項對應(yīng)的核發(fā)送超期消息FL0W_INVALID,同時,將該表項通過鏈表添加函數(shù)添加到超期池g_expired_flow_pool對應(yīng)的鏈表中;步驟3:控制平面對超期池g_expired_flow_pool對應(yīng)的鏈表進行遍歷,如果當前時間time_info.current_time>表項的創(chuàng)建時間flow_entry.create_time+2*生存周期時間time_info.expired_time,表明該表項需要從內(nèi)存中刪除,貝U通過消息發(fā)送函數(shù)向表項對應(yīng)的核發(fā)送釋放內(nèi)存消息FL0W_DELETE。2.如權(quán)利要求I所述的高速并行的無鎖流表路由查找方法,其特征在于,步驟4:數(shù)據(jù)平面通過接收函數(shù)接收控制平面通過消息發(fā)送函數(shù)發(fā)送過來的消息,并對消息的種類進行分析;如果控制平面通過消息發(fā)送函數(shù)發(fā)送過來的消息是超期消息FL0W_INVALID,表明需要將對應(yīng)的表項從流表中移出,則數(shù)據(jù)平面調(diào)用移出函數(shù),通過雙向鏈表中表項結(jié)點的操作將該表項從流表的鏈表中移出,并將該表項通過鏈表添加函數(shù)添加到超期池g_expired_flow_pool對應(yīng)的鏈表中,此時并未釋放表項內(nèi)存,因此可以保證可能正在利用該表項進行轉(zhuǎn)發(fā)操作的其它核,將數(shù)據(jù)包順利轉(zhuǎn)發(fā)出去;如果控制平面通過消息發(fā)送函數(shù)發(fā)送過來的消息是釋放內(nèi)存消息FL0W_DELETE,表明需要將該表項從流表中刪除,并釋放內(nèi)存空間,則數(shù)據(jù)平面調(diào)用刪除函數(shù),將該表項從流表中刪除并釋放內(nèi)存空間。3.如權(quán)利要求2所述的高速并行的無鎖流表路由查找方法,其特征在于,還包括以下步驟步驟5:當數(shù)據(jù)平面執(zhí)行完消息處理后,進入待轉(zhuǎn)發(fā)數(shù)據(jù)包的路由查找處理,調(diào)用流表查找函數(shù)flowjookup在對應(yīng)的流表中進行路由查找,如果在對應(yīng)的流表中沒有查找到匹配的表項,則通過流表增加函數(shù)flow_add在流表中創(chuàng)建新表項flow_entry,此時新表項flow_entry中的有效標志位action_num置O,用表項添加函數(shù)list_add將表項添加到該流表數(shù)據(jù)鏈的頭部,并把待轉(zhuǎn)發(fā)數(shù)據(jù)包的路由信息指針flow_info指向該新表項flow_entry,以便通過該指針獲得路由表項信息,完成后進入步驟6;如果在對應(yīng)的流表中查找到匹配的表項,通過待轉(zhuǎn)發(fā)數(shù)據(jù)包的路由信息指針flow_info返回得到路由表項信息,然后進入步驟7;步驟6:通過路由查找函數(shù)rt_l00kup在總表中進行路由查找,如果沒有查找到匹配的表項,則依照配置規(guī)則對數(shù)據(jù)包做相應(yīng)的處理,可按現(xiàn)有技術(shù)實施,不再詳述;如果查找到匹配的表項,將該表項的內(nèi)容復(fù)制到上一步創(chuàng)建的新表項flow_entry中,并將該新表項的有效標志位action_num置I,加上表項的創(chuàng)建時間,然后進入步驟7;步驟7:根據(jù)待轉(zhuǎn)發(fā)數(shù)據(jù)包查表返回得到的路由表項信息將待轉(zhuǎn)發(fā)數(shù)據(jù)包發(fā)送到對應(yīng)的出端口。全文摘要本發(fā)明涉及路由查找算法,具體說是一種多核處理器高速并行的無鎖流表路由查找方法。多核處理器并行執(zhí)行環(huán)境中,采用與核數(shù)相對應(yīng)數(shù)目流表的設(shè)計結(jié)構(gòu),并用多核中控制平面與數(shù)據(jù)平面相結(jié)合的方式,將流表中表項的刪除操作分割成兩個相對獨立的FLOW_INVALID(失效)和FLOW_DELETE(刪除)階段,使得多個核對一張流表同時進行讀寫操作而無需依賴資源鎖的控制。本發(fā)明所述的高速并行的無鎖流表路由查找方法,解決多核處理器并行執(zhí)行過程中,現(xiàn)有流表設(shè)計方法造成的數(shù)據(jù)處理瓶頸問題,實現(xiàn)了多核并行執(zhí)行過程中數(shù)據(jù)轉(zhuǎn)發(fā)的安全性和快速性,提高大容量系統(tǒng)路由查找速度和并行路由查找的性能。文檔編號G06F17/30GK102938000SQ20121052027公開日2013年2月20日申請日期2012年12月6日優(yōu)先權(quán)日2012年12月6日發(fā)明者范富明,李念軍申請人:武漢烽火網(wǎng)絡(luò)有限責(zé)任公司