專利名稱:精確有限自動機(dfa)處理的制作方法
相關(guān)申請本專利要求保護2004年9月10日提交的第60/609,211號臨時申請,和2005年4月8日提交的第60/669,672號臨時申請的權(quán)益。上述申請的全部教導(dǎo)通過認(rèn)證在此并入本文。
背景技術(shù):
開放式通信系統(tǒng)互聯(lián)參考模型(OSI)定義了用來在傳輸媒體上進行通信的七個網(wǎng)絡(luò)協(xié)議層(L1-L7)。上層(L4-L7)負(fù)責(zé)端到端的通信,下層(L1-L3)負(fù)責(zé)本地通信。
網(wǎng)絡(luò)應(yīng)用認(rèn)知系統(tǒng)需要處理、過濾、交換L3到L7網(wǎng)絡(luò)協(xié)議層,例如,L7網(wǎng)絡(luò)協(xié)議層,諸如超文本傳輸協(xié)議(HTTP)和簡單郵件傳輸協(xié)議(SMTP),以及L4網(wǎng)絡(luò)協(xié)議層,比如傳輸控制協(xié)議(TCP)。除處理網(wǎng)絡(luò)協(xié)議層外,網(wǎng)絡(luò)應(yīng)用認(rèn)知系統(tǒng)要同時以線速保證這些協(xié)議的訪問和內(nèi)容的安全性通過L4-L7網(wǎng)絡(luò)協(xié)議層包括防火墻,虛擬專用網(wǎng)(VPN),安全套接字協(xié)議層(SSL),入侵檢測系統(tǒng)(IDS),互聯(lián)網(wǎng)協(xié)議安全性(IPSec),反病毒(AV)和反垃圾郵件功能。
網(wǎng)絡(luò)處理器對于高處理能力的L2和L3網(wǎng)絡(luò)協(xié)處理是有必要的,也就是說,執(zhí)行處理以線速轉(zhuǎn)寄數(shù)據(jù)包的數(shù)據(jù)包。通常,通用處理器被用來處理需要較高智能處理的L4-L7網(wǎng)絡(luò)協(xié)議。例如,L4網(wǎng)絡(luò)協(xié)議的傳輸控制協(xié)議(TCP)需要多計算精度任務(wù),包括數(shù)據(jù)包中的整個有效載荷的檢查和、TCP片段緩沖器的管理、保留每一次連接的所有次數(shù)的多次計數(shù)。雖然通用處理器可以執(zhí)行計算精度任務(wù),但是它不能提供足夠的性能來處理數(shù)據(jù),以致數(shù)據(jù)不能夠以線速被轉(zhuǎn)寄。
而且,檢查數(shù)據(jù)包內(nèi)容的內(nèi)容認(rèn)知應(yīng)用需要在數(shù)據(jù)流中搜索包含混合字符串和多次重復(fù)的特征類的表達式??梢栽谲浖惺褂脦追N搜索算法來運行這種任務(wù)。一種算法是精確有限自動機(DFA)。使用DFA搜索算法時有許多局限性,例如,在重復(fù)模式的數(shù)據(jù)流中以指數(shù)形式增長的圖像大小和錯誤的匹配。
由于這些局限性,內(nèi)容處理應(yīng)用需要對模式搜索產(chǎn)生的結(jié)果進行足夠量的后處理。后處理需要用其他連接狀態(tài)信息限定匹配模式,例如連接類型、數(shù)據(jù)包中協(xié)議頭中的某些值。還需要其他類型的計算精度限定,例如,模式匹配只有在數(shù)據(jù)流中的某種位置范圍內(nèi)時才有效,或被另一種模式所跟隨而且與前面的模式在某種排列中或在前面模式特定分支之中或之后。例如,規(guī)則表達式匹配把不同的操作符和允許將被結(jié)構(gòu)化的復(fù)雜表達式的單個字符合并。
發(fā)明內(nèi)容
本發(fā)明用于提高處理器運行內(nèi)容處理應(yīng)用的速度。處理器包括至少一個處理器內(nèi)核和精確有限自動機模塊(DFA),該精確有限自動機模塊異步操作至少一個處理器內(nèi)核,來越過存儲在具有存儲在第二存儲器中的分組數(shù)據(jù)的第一存儲器內(nèi)的至少一個DFA圖像轉(zhuǎn)換。
DFA模塊可以包括第一存儲控制器、至少一個DFA線程引擎和指令輸入邏輯。處理器內(nèi)核可以通過指令輸入邏輯生成的指令隊列提交DFA指令到DFA模塊。DFA指令可以指示存儲在第二存儲器中的分組數(shù)據(jù)用以使用和存儲在第一存儲器中的DFA圖像以越過。DFA模塊可以部署DFA指令到DFA線程引擎。DFA線程引擎可以取得存儲在第二存儲器中的分組數(shù)據(jù),并且發(fā)布與所取得的分組數(shù)據(jù)相對應(yīng)的存儲器尋址指令。
例如,第一存儲器可以是非緩沖存儲器,第二存儲器可以是連貫緩沖存儲器。DFA線程引擎順序取得存儲在連貫存儲器中的分組數(shù)據(jù),每次一個字節(jié)。DFA線程引擎然后每字節(jié)的從連貫緩沖存儲器中接收到的分組數(shù)據(jù)發(fā)布非緩沖存儲器加載指令以越過存儲在非緩沖存儲器中DFA圖像的下一個狀態(tài)。DFA線程引擎也可以將中間或最終結(jié)果寫入連貫緩沖存儲器。
本發(fā)明的前述和其它方面、特征和優(yōu)點,從下面更加具體的描述中可以體現(xiàn)出來,附圖中相同的參考數(shù)字指代不同附圖中的相同部件。附圖并不是嚴(yán)格按照比例所繪制的,其重點在于示出本發(fā)明的原理。
圖1A是根據(jù)本發(fā)明的原理的包括網(wǎng)絡(luò)處理器的網(wǎng)絡(luò)服務(wù)處理系統(tǒng)框圖;圖1B是圖1A中顯示的網(wǎng)絡(luò)服務(wù)處理器框圖;圖2A和2B圖示了可仿效的DFA圖像;圖3A是根據(jù)本發(fā)明原理的精簡指令集計算(RISC)處理器的框圖;圖3B是圖3A中的DFA模塊的框圖;
圖4A示出DFA指令隊列的結(jié)構(gòu);圖4B示出下一塊緩沖區(qū)指針指令格式;圖5A示出典型DFA圖像的另一個實施方案;圖5B示出圖5A中DFA圖像的不同的可能的節(jié)點標(biāo)識;圖6顯示了直接模式結(jié)構(gòu)化將由DTE處理的數(shù)據(jù)的實施例;圖7A顯示了結(jié)構(gòu)化將由DTE處理的數(shù)據(jù)的集合模式的實施例;圖7B示出DFA集合指針指令格式;圖8A示出DFA指令格式;以及圖8B示出DFA結(jié)果格式;具體實施方式
本發(fā)明優(yōu)選的實施方案的描述如下所述圖1A是根據(jù)本發(fā)明原理的包括網(wǎng)絡(luò)服務(wù)處理器110的安全設(shè)備100的框圖。安全設(shè)備100是獨立的系統(tǒng),可以將從一個以太網(wǎng)端口(Gig E)上所接收的數(shù)據(jù)包轉(zhuǎn)發(fā)到另一個以太網(wǎng)端口(Gig E),并且在轉(zhuǎn)寄數(shù)據(jù)包之前對收到的數(shù)據(jù)包執(zhí)行多種安全功能。例如,安全設(shè)備100能夠在將處理過的數(shù)據(jù)包傳遞到本地網(wǎng)之前對從廣域網(wǎng)接收到的數(shù)據(jù)包進行安全處理。
網(wǎng)絡(luò)服務(wù)處理器110包括硬件數(shù)據(jù)包處理、緩沖、工作分發(fā)、排序、同步化和連貫緩存支持以加快所有數(shù)據(jù)包處理任務(wù)。網(wǎng)絡(luò)服務(wù)處理器110處理壓縮到接收的數(shù)據(jù)包中的開放式系統(tǒng)互聯(lián)網(wǎng)L2-L7層協(xié)議。
網(wǎng)絡(luò)服務(wù)處理器110通過物理接口PHY104a、104b從以太網(wǎng)端口(Gig E)接收數(shù)據(jù)包,對接收到的數(shù)據(jù)包運行L7-L2層網(wǎng)絡(luò)協(xié)議的處理,并通過物理接口104a、104b或PCI總線106轉(zhuǎn)寄處理過的數(shù)據(jù)包。網(wǎng)絡(luò)協(xié)議處理可以包括網(wǎng)絡(luò)安全協(xié)議的處理,如防火墻,應(yīng)用防火墻,包括IP安全性(IPSEC)和/或安全套接字層(SSL)的虛擬專用網(wǎng)(VPN),入侵檢測系統(tǒng)(IDS)和反病毒(AV)網(wǎng)絡(luò)服務(wù)處理器中的動態(tài)隨機存儲器(DRAM)控制器133(圖1B)控制對被連接到網(wǎng)絡(luò)服務(wù)處理器110上的擴展DRAM108的訪問。DRAM108儲存從PHY接口104a,104b或可擴展外部設(shè)備組件互聯(lián)(PCI-X)接口106接收到的數(shù)據(jù)包供網(wǎng)絡(luò)服務(wù)處理器110處理。
網(wǎng)絡(luò)服務(wù)處理器110中的低延遲存儲控制器360(圖3B)控制低延遲存儲器(LLM)118。LLM118可以被網(wǎng)絡(luò)服務(wù)或安全設(shè)備使用進行快速查詢,包括可能是入侵檢測系統(tǒng)(IDS)或反病毒(AV)設(shè)備所需要的規(guī)則表達式匹配。
規(guī)則表達式是表示字符串匹配模式的通同方法。規(guī)則表達式的原子元素是要被匹配的單個字符。這些元素與元字符操作符合并允許用戶表示連接,交替,星號等等。串連被用來創(chuàng)建來自單個字符(或者子字符串)的多個字符匹配模式,而使用交替(|)創(chuàng)建可以匹配兩個或更多子字符串中的任何一個的模式。星號(*)允許模式匹配字符串中的模式的零(0)或更多次的出現(xiàn)。合并不同的操作符和單獨字符允許復(fù)雜的將被結(jié)構(gòu)化的表達式。例如,表達式th(is|at)*)會匹配th,this,that,thisis,thisat,thatis,thatat,等等。
圖1B是圖1A中所示網(wǎng)絡(luò)服務(wù)處理器110的框圖。網(wǎng)絡(luò)服務(wù)處理器110通過使用結(jié)合圖1A所描述的至少一個處理器內(nèi)核120來執(zhí)行高應(yīng)用性能。
數(shù)據(jù)包被接收用于通過SPI-4.2或RGMII接口,由GMX/SPX單元122a,122b中的任何一個處理。數(shù)據(jù)包也可以通過PCI接口124而被接收。GMX/SPX單元(122a,122b)通過檢查包括在接收到的數(shù)據(jù)包中的L2網(wǎng)絡(luò)協(xié)議頭中的各個區(qū)域?qū)邮盏降臄?shù)據(jù)包執(zhí)行預(yù)處理,然后將數(shù)據(jù)包轉(zhuǎn)寄給數(shù)據(jù)包輸入單元126。
數(shù)據(jù)包輸入單元126對包含在接收到的包中的網(wǎng)絡(luò)協(xié)議頭(L3層和L4層)進行進一步的預(yù)處理。這個預(yù)處理包括對傳輸控制協(xié)議(TCP)/用戶數(shù)據(jù)包協(xié)議(UDP)(L3層網(wǎng)絡(luò)協(xié)議)的檢查和檢查。
自由池分配器(FPA)128保持二級緩沖存儲器130和DRAM108的自由存儲器的指針池。輸入包處理單元126使用指針池中的一個來存儲接收到的分組數(shù)據(jù)在二級緩沖存儲器130或DRAM108中,另一個指針池來為處理器內(nèi)核120分配工作隊列入口。
包輸入單元126將分組數(shù)據(jù)以一種方便在至少一個處理器內(nèi)核120中執(zhí)行的更高層軟件以進一步處理更高級網(wǎng)絡(luò)協(xié)議的格式寫入二級緩沖存儲器130或DRAM108的緩沖區(qū)中。
I/O接口(IOI)136管理總的協(xié)議和分配,提供連貫的I/O分割。IOI136包括I/O橋(IOB)138和取和加單元(FAU)140。FAU140中的寄存器用來保持被用于通過包輸出單元126轉(zhuǎn)寄處理的包的輸出隊列的長度。IOB138包括緩沖隊列,用于存儲將在I/O總線142,連貫存儲器總線144,包輸入單元126和包輸出單元146之間傳遞的信息。
包次序/工作(POW)模塊148為處理器內(nèi)核120排列和分配工作。通過增加工作隊列入口到隊列中來排列工作。例如,通過包輸入單元126增加工作隊列入口用于每個包的到達。計時器單元150用來為處理器內(nèi)核分配工作。
處理器內(nèi)核120從POW模塊148中請求工作。POW模塊148為處理器內(nèi)核120選擇(即,分配)工作,返回指向描述工作的工作隊列入口的指針到處理器內(nèi)核120。
處理器內(nèi)核120包括指令緩沖152,一級(L1)數(shù)據(jù)緩沖154和加密加速156。在一個實施方案中,網(wǎng)絡(luò)服務(wù)處理器110包含十六個超級標(biāo)量RISC(精簡指令集計算機)型處理器內(nèi)核120。在一個實施方案中,每個超級標(biāo)量RISC型處理器內(nèi)核120是MIPS64處理器內(nèi)核第二版的擴展。
二級(L2)緩沖存儲器130和DRAM108由所有處理器內(nèi)核120和I/O聯(lián)合處理器設(shè)備共享使用。每個處理器內(nèi)核120通過連貫存儲器總線144耦合到二級緩沖存儲器130上。連貫存儲器總線是用于所有存儲器以及在處理器內(nèi)核120,IOB138和二級緩沖存儲器130和二級緩沖存儲器131之間I/O事務(wù)處理的通訊通道。在一個實施方案中,連貫存儲器總線144對16個處理器內(nèi)核120是可升級的,通過高緩沖和優(yōu)先列入I/O支持完全連續(xù)一級數(shù)據(jù)緩沖154的寫入。
二級存儲控制器131保持存儲參考一致性。無論塊是存儲在二級緩沖存儲器130,DRAM108或在傳輸中,它都為每個請求返回塊的最新拷貝。在每個處理器內(nèi)核120中,它還為數(shù)據(jù)緩沖154存儲標(biāo)志的副本。它對緩沖塊存儲的請求和數(shù)據(jù)緩沖標(biāo)記進行比較,當(dāng)從另一個處理器內(nèi)核或一個I/O組件通過IOB138傳來的存儲指令時,將處理器內(nèi)核120的數(shù)據(jù)緩沖標(biāo)志設(shè)為無效(所有拷貝)。
DRAM控制器133支持達到16兆的DRAM。DRAM控制器133支持到DRAM108的64比特或128比特的接口。DRAM控制器133支持DDR-I(雙倍數(shù)據(jù)速率)和DDR-II協(xié)議。
在數(shù)據(jù)包被處理器內(nèi)核120處理后,包輸出單元(PKO)146從存儲器讀取分組數(shù)據(jù),運行L4層網(wǎng)絡(luò)協(xié)議后處理(例如,產(chǎn)生TCP/UDP檢查和),通過GMX/SPC單元122a,122b將包傳遞,釋放包使用的二級緩沖130/DRAM108。
低延遲存儲控制器360(圖3B)管理傳遞中的事務(wù)(加載/存儲)到/從LLM118。低延遲存儲器(LLM)118由所有的處理器內(nèi)核120共享使用。LLM118可以是動態(tài)隨機訪問存儲器(DRAM)、精簡延遲動態(tài)隨機訪問存儲器(RLDRAM)、同步隨機訪問存儲器(SRAM)、快周期隨機訪問存儲器(FCRAM)、或者在本領(lǐng)域內(nèi)已知的任何其它類型的低延遲存儲器。RLDRAM提供30納秒的存儲器延遲或更好,也就是,所消耗的時間用來滿足處理器120發(fā)起的存儲請求。每個處理器內(nèi)核120通過低延遲存儲器總線158直接與LLM控制器360相耦合。低延遲存儲器總線158是用于在處理器內(nèi)核120和LLM控制器360之間進行內(nèi)容認(rèn)知應(yīng)用處理的通訊通道。LLM控制器30在處理器內(nèi)核120和LLM118之間被耦合,用來控制對LLM118的訪問。
網(wǎng)絡(luò)服務(wù)處理器110也包括除去處理器內(nèi)核120的特殊協(xié)同處理器,這樣網(wǎng)絡(luò)服務(wù)處理器獲得高處理能力。壓縮/解壓縮協(xié)同處理器132對接收到的包專門運行壓縮和解壓縮。精確有限自動機(DFA)模塊134包括專門的DFA引擎370(圖3B)來加速為反病毒(AV)、入侵檢測系統(tǒng)(IDS)和達到4Gpps的其它內(nèi)容處理應(yīng)用的模式和簽名匹配需要。
內(nèi)容認(rèn)知應(yīng)用處理利用存儲在LLM118里的模式/表達式(數(shù)據(jù))。模式/表達式可以是精確有限自動機(DFA)形式。DFA是狀態(tài)機器。DFA狀態(tài)機的輸入是字節(jié)字符串(8位)(即,DFA的字母是字節(jié))。每個輸入字節(jié)使?fàn)顟B(tài)機從一個狀態(tài)轉(zhuǎn)變?yōu)橄乱粋€狀態(tài)。如圖2A中所示,狀態(tài)和轉(zhuǎn)變功能可以被圖像200表示,其中每個圖像節(jié)點(節(jié)點0到3)是狀態(tài),連接不同節(jié)點的不同曲線表示不同輸入字節(jié)的狀態(tài)轉(zhuǎn)換。狀態(tài)可能包含某些跟狀態(tài)相關(guān)的字母,例如′A...Z,a...z,0...9,′等等。狀態(tài)機的現(xiàn)在狀態(tài)是選擇特定圖像節(jié)點的節(jié)點標(biāo)識。小型圖像,節(jié)點的數(shù)量可以從幾個到128,000左右。大的圖像可以有1,000,000甚至更多的點數(shù)。
在說明性實施例中,DFA圖像200被設(shè)計城搜索目標(biāo)字符串表達式‘a(chǎn)bc’。因此,DFA圖像用來對輸入數(shù)據(jù)進行搜索,查找對字符串‘a(chǎn)bc’的精確匹配。這個表達式是固定長度的表達式,也就是說,圖像的節(jié)點數(shù)量和深度是知道的(例如,固定)。
為了創(chuàng)建DFA圖像,表達式被傳遞,編譯器創(chuàng)建根節(jié)點(即,節(jié)點0),為目標(biāo)表達式添加節(jié)點1-3到圖像(即,目標(biāo)字符串中的每個字符的一個附加節(jié)點)。繼續(xù)這個例子,輸入字符流包含可仿效的串‘12abc3’。通過使用DFA圖像標(biāo)識目標(biāo)字符串表達式‘a(chǎn)bc’,輸入串被搜索。
DFA圖像的初始狀態(tài)是節(jié)點‘0’。按順序讀取每個字符或字節(jié),DFA一直保持在節(jié)點0,直到讀到目標(biāo)字符串表達式的第一個字符。例如,在輸入流中檢測目標(biāo)字符串表達式的第一個字符是‘a(chǎn)’時,從節(jié)點0到1的曲線標(biāo)記為‘a(chǎn)’。讀取輸入流中的下一個字符。如果檢測到的是目標(biāo)字符串表達式(例如,‘b’)之外的其它字符,從1回到0的曲線標(biāo)記為‘非b’。然而,在輸入流中檢測到的下一個字符是字符‘b’時,一段標(biāo)記為‘b’的曲線從節(jié)點1到節(jié)點2。讀取輸入流中的下一個字符。如果檢測到的是目標(biāo)字符串表達式(例如,‘c’)之外的其它字符,從2回到0的曲線標(biāo)記為‘非c’。然而,在輸入流中檢測到的下一個字符是字符‘c’時,一段標(biāo)記為‘c’的曲線從節(jié)點2到節(jié)點3。由于目標(biāo)字符串表達式‘a(chǎn)bc’是一個固定長度的表達式,節(jié)點3就是終端節(jié)點,報告作為搜索的結(jié)果,也就是說,在輸入流中找到了表達式‘a(chǎn)bc’及位置。
此外,通過編譯器為目標(biāo)表達式需要的圖像創(chuàng)建合適的節(jié)點,分析一個或更多的目標(biāo)表達式,更復(fù)雜的DFA圖像可以被簡單地創(chuàng)建。因此,單個圖像可以用來搜索復(fù)合表達式,該符合表達式可以是固定長度、可變長度、或固定長度跟可變長度的合并。
圖3A是根據(jù)本發(fā)明原理的精簡指令集計算(RISC)處理器的框圖。處理器(處理器內(nèi)核)120包括集成執(zhí)行單元302,指令分配單元304,指令獲取單元306,存儲器管理單元(MMU)308,系統(tǒng)接口310,低延遲接口350,加載/保存單元314,寫緩沖316和安全加速器156。處理器內(nèi)核120還包括EJTAG接口330,允許執(zhí)行調(diào)試操作。系統(tǒng)接口310控制對擴展存儲器的訪問,也就是,處理器120的擴展存儲器,例如,擴展二級緩沖存儲器130或者首/主存儲器108。
集成執(zhí)行單元302包括乘法器單元326,至少一個寄存器文件(主寄存器文件)328和兩個保持寄存器330a,330b。保持寄存器330a和330b用來保存要寫入LLM118的數(shù)據(jù)和使用LLM加載/保存指令從LLM118中讀出的數(shù)據(jù)。通過在停止流水線前允許兩個未解決的負(fù)載,保持寄存器330a和330b提高了指令流水線的效率。雖然顯示了兩個保持寄存器,但可能使用一個或多個保持寄存器。乘法器單元326有64位直接寄存乘法器。指令讀取單元306包括指令緩沖(ICache)152。加載/保存單元314包括數(shù)據(jù)緩存154。在一個實施方案中,指令緩存152是32K字節(jié),數(shù)據(jù)緩存154是8K字節(jié),寫入緩沖器316是2K字節(jié)。存儲器管理單元308包括翻譯后援緩沖器(TLB)340。
在一個實施方案中,處理器120包括加密加速模塊(安全加速器)156,加密加速模塊包括用于三重數(shù)據(jù)加密標(biāo)準(zhǔn)(3DES),高級加密標(biāo)準(zhǔn)(AES),安全散列算法(SHA-I),信息摘要算法#5(MD5)密碼體系的加速。加密加速器模塊156通過移動到執(zhí)行單元302中的主寄存器文件328或者從其中移出進行通訊。在乘法器單元326中運行RSA和密鑰交換(DH)算法。
圖3B是圖3A中DFA模塊134的框圖。DFA模塊134包括低延遲DRAM控制器360、至少一個DFA線程引擎(DTE)370(16顯示),和指令輸入邏輯380。指令輸入邏輯380包括DFA指令隊列382和報警器384。DFA指令隊列382排列存儲在L2/DRAM(130/108)中的DFA指令,報警器指示在DFA指令隊列382中存儲了多少DFA指令。內(nèi)核120軟件可以對每個單獨的DFA指令進行報警器寫操作,也可以累積多個DFA指令到一個報警器寫操作中。每個DFA指令包括DFA模塊134需要的信息,來開始DTE370、讀取輸入數(shù)據(jù),轉(zhuǎn)換保存在LLM118中的DFA圖像以及把結(jié)果寫入L2/DRAM(130/108)。DFA指令的格式會在以后結(jié)合圖8A進行描述。
DTEs370可以用來運行模式搜索。通常,DTEs370越過具有進入的分組數(shù)據(jù)(在L2/DRAM(130/108)中)的圖像200(圖2)(在LLM118中)以便在分組數(shù)據(jù)中查找特定的表達式。例如,網(wǎng)絡(luò)服務(wù)處理器可能同時跟蹤上到1000個TCP輸入流,其中每個流被發(fā)送到不同的DTE來查找特定的表達式。在內(nèi)核120中的軟件越過之前必須先(I)借助LLM總線158預(yù)裝DFA圖像到LLM118中;(II)預(yù)裝DFA指令到L2/DRAM(130/108)中;(III)借助IOB142提交DFA指令到DFA模塊134。DFA指令指示DFA圖像200通過進入的分組數(shù)據(jù)而越過。之后,DFA模塊134取得并排列DFA指令,分配每個DFA指令到16個可用的DTE370中的一個。所有DTE370都是相同的和相當(dāng)?shù)?,因此任何DFA指令都可以被分配給任一個可用的DTE370。DTE370一旦收到指令,它同時(a)通過IOB142從L2/DRAM(130/108)取得分組數(shù)據(jù);(b)每字節(jié)分組數(shù)據(jù)發(fā)布一個LLM DRAM負(fù)載以越到字節(jié)的下一個DFA圖像狀態(tài);(c)通過IOB142將中間或最終結(jié)果返回給L2/DRAM(130/108)。
通常,DTE370是狀態(tài)機,可以使用硬件、軟件或軟硬件混合來實現(xiàn)。在一些實施方案中,DTE370在使用組合邏輯的硬件中被實現(xiàn)。在另一種實施方案中,每個DTE370分別由不同的處理器來實現(xiàn)。還有的其它的實施方案中,DTE370使用普通處理器來實現(xiàn)。例如,每個DTE370可以是運行在適于提供共享的、多任務(wù)處理的通用處理器上的單獨的任務(wù)(即,指令的次序)。多任務(wù)處理是應(yīng)用在操作系統(tǒng)中以在多個獨立的工作中(即,DTE370)共享單個處理器的一種技術(shù)。交替的或附加的,每個DTE370可以是運行在適于提供多線程操作能力的通用處理器中的單獨處理線程。多線程處理操作與多任務(wù)處理不同的是線程通常彼此間比任務(wù)共享更多的環(huán)境。例如,當(dāng)線程共享一個地址空間和全局變量集時可以被它們的程序計數(shù)器和棧指針區(qū)分開來。
圖4A圖示了存儲在L2/DRAM(130/108)中的DFA指令隊列400的結(jié)構(gòu)。每個指令隊列是信息塊/緩沖器402的鏈表。每個信息塊402包括至少三個DFA指令404,組成全部信息塊大小406。如果有其它信息塊(例如402)存在,下一個信息塊緩沖器指針408立刻跟隨信息塊402中的最后一個指令404。
向DFA指令隊列400插入數(shù)據(jù)包,內(nèi)核120軟件將DFA指令404寫入DFA指令隊列400,如果需要的話會分配信息塊,然后通過把把DFA指令404的數(shù)量加入到DFA指令隊列400寫入DFA報警器384。DFA模塊134從DFA指令隊列400(開始于尾部410)讀取,并當(dāng)?shù)竭_一個信息塊(例如404/404)的最后一個指令時,DFA模塊134從DFA指令隊列400(從尾410開始)讀取和轉(zhuǎn)換下一個信息塊緩沖器指針408到下一個塊(例如402/402)。當(dāng)DFA模塊134跳到塊402,釋放前面的信息塊(例如402/404)給FPA128(圖1B)。
DFA模塊134保持DFA指令隊列的尾指針410,內(nèi)核120軟件保持DFA指令隊列的頭指針412。尾指針410和頭指針412之間的距離是DFA指令隊列400的長度和未完成的報警器記數(shù)。DFA指令隊列400的大小僅僅受可用的存儲器和DFA指令隊列400的20位未完成報警器記數(shù)器的限制。
圖4B列舉了下一個信息塊緩沖器指針格式450。下一個信息塊緩沖器指針是64位的單字,包含36位的地址(Addr)段452。在包含下一個DFA指令402的下一個信息塊400中,地址段452選擇有效的L2/DRAM(130/108)字節(jié)位置。
圖5A圖示存儲在LLM118中的DFA圖像500的結(jié)構(gòu)。DFA圖像500包括N個節(jié)點510a-510n。DFA圖像500中的每個節(jié)點510是一個256次節(jié)點指針512的簡單排列,每個對應(yīng)一個唯一的輸入字節(jié)值。每個次節(jié)點指針512包含次節(jié)點標(biāo)識號514用來對輸入字節(jié)直接進行標(biāo)識。
DFA模塊134支持18位次節(jié)點指針存儲格式516或36位次節(jié)點指針存儲格式518。對于18位指針,每個節(jié)點510需要18X256比特或512字節(jié)的LLM118存儲空間。每個次節(jié)點指針516是17位次節(jié)點標(biāo)識ID和奇偶校驗位。奇偶校驗是偶校驗(即,P=XOR(或OR)17位次節(jié)點ID514的所有位)。對于36位指針,每個節(jié)點510需要36X256比特或1KB的LLM118存儲空間。復(fù)制可以提高存儲空間需求。每個次節(jié)點518是20位次節(jié)點標(biāo)識ID,2位類型值,7位SECDED ECC碼和7個必須置零的未用位。DTE370使用36位指針中的SECDED ECC碼修復(fù)所有單位錯誤和檢查所有雙位錯誤。類型值指示下一個節(jié)點類型,例如0=正常;1=已標(biāo)記;2=終端。
DTE370支持三種特殊節(jié)點指針條件1.PERR-次節(jié)點指針包含錯誤。DTE370生成結(jié)果字指示失敗的LLM118位置。DTE370終止圖像500的轉(zhuǎn)換;2.TERM-下一個節(jié)點是終端節(jié)點,圖像轉(zhuǎn)換為停止。DTE370生成結(jié)果字指出轉(zhuǎn)換到終端節(jié)點的字節(jié),前一個節(jié)點ID,下一個節(jié)點ID。DTE370終止圖像500的轉(zhuǎn)換;3.MARKED-內(nèi)核120軟件為了以后的分析標(biāo)記這個臨界點。DTE370生成結(jié)果字指出轉(zhuǎn)換到標(biāo)記節(jié)點的字節(jié),前一個節(jié)點ID,后一個節(jié)點ID。DTE370繼續(xù)圖像500的轉(zhuǎn)換;對于18位模式,DTE370通過比較下一個節(jié)點ID決定特定的TERM和MARKED條件。在這種情況下,所有進入被標(biāo)記節(jié)點的過渡都被標(biāo)記。對于36為模式,DTE370直接根據(jù)下一個節(jié)點指針中的類型字段決定特定的TERM和MARKED條件。獨立的過渡,不僅僅獨立的節(jié)點,在36位模式下都會被標(biāo)記。
圖5顯示了所有可能的17位節(jié)點標(biāo)識ID和它們在18位模式下是怎么被分類的。終端節(jié)點標(biāo)識ID502不會被實際LLM118向后存儲。不過,普通節(jié)點504和被標(biāo)記的節(jié)點506被實際LLM118向后存儲。DFA指令404(圖8A)包含終端節(jié)點的數(shù)目,存儲在IW0RD3(圖8A)中的Tsize,被標(biāo)記節(jié)點的數(shù)目507,同樣存儲在IW0RD3(圖8A)中的Msize當(dāng)DTE370轉(zhuǎn)換圖像500時,它們產(chǎn)生的結(jié)果字會作為異常條件出現(xiàn)。下一個節(jié)點指針是異常的MARKED,TERM或PERR。兩個異常條件是輸入數(shù)據(jù)的完成和結(jié)果空間的清空。雖然對一個輸入字節(jié)的圖像轉(zhuǎn)換可以產(chǎn)生多種異常條件,但是一個輸入字節(jié)只能產(chǎn)生至多一個結(jié)果字。例如,最后一個輸入字節(jié)會遇到輸入數(shù)據(jù)條件的完成,會產(chǎn)生結(jié)果字。最后一個輸入字節(jié)也可能遇到被標(biāo)記的次節(jié)點,但是不會產(chǎn)生第二結(jié)果字。當(dāng)(優(yōu)先排序)PERR,TERM,輸入數(shù)據(jù)的完成和結(jié)果空間清空的異常條件發(fā)生時,圖像轉(zhuǎn)換停止,DTE370報告最高優(yōu)先性條件。例如,根據(jù)圖2中的圖像,下一個節(jié)點是到達節(jié)點‘c’的終端節(jié)點,DTE370終止圖像轉(zhuǎn)換。
每個DFA指令可以指定對保存在L2/DRAM中的數(shù)據(jù)進行怎樣的處理。在任一種情況(直接或一起),DFA模塊134從L2/DRAM(130/108)中讀取字節(jié)。
圖6顯示了直接模式600取得將被DTE370處理的數(shù)據(jù)的實施例。DFA指令404直接指定開始位置和字節(jié)數(shù)。處理相應(yīng)DFA指令404的DFA370從L2/DRAM(130/108)中讀取相臨的字節(jié)并處理它們。
圖7顯示了集合模式700取得將被DTE370處理的數(shù)據(jù)的實施例。DFA指令404直接指定開始位置和DFA集合指針710列表的大小。每個DFA集合指針710列表條目指定開始位置和DTE370要處理的字節(jié)數(shù)目。DTE370的所有輸入字節(jié)流是每個集合指針列表條目指定字節(jié)的連接。
圖7B顯示64位DFA集合指針710的格式。DFA集合指針710包括長度712(字節(jié))和地址段714(L2/DRAM地址)。DFA集合指針710是在64位邊界自然對準(zhǔn)的,但是它指向的L2/DRAM中的字節(jié)可以是任何字節(jié)對準(zhǔn)。在集合模式700下,字節(jié)總數(shù)是所有DFA集合指針710中的長度字段之和。
再根據(jù)圖4A,每個DFA指令404提供DFA模塊134需要的信息用以(i)開始DTE370;(ii)讀取輸入數(shù)據(jù);(iii)轉(zhuǎn)換LLM118中的圖像200;(iv)寫入結(jié)果。DFA指令404可以包含多個指令字,例如圖8A中例舉的指令格式。每個DFA指令404包含4個獨立的字455’,455”,455,455””(通常455)。每次字包含64位,代表了二級緩沖存儲器130或DRAM108中全部的32字節(jié)。優(yōu)選的是,每個DFA指令404在32位字節(jié)邊界是自然對準(zhǔn)的。DFA指令404被分配后由DTE370進行處理。DFA指令404包含標(biāo)識輸入字節(jié)位置和結(jié)果位置的字段。
在操作中,當(dāng)DFA指令隊列382具有有效的DFA指令404時,DFA模塊134從二級緩沖存儲器130或DRAM108中讀取DFA指令404和輸入數(shù)據(jù),然后在創(chuàng)建它們的時候(例如,一個一個字節(jié)的)寫入結(jié)果。DFA模塊134也可以在完成后選擇性地提交將被POW148(圖1B)分配的工作隊列條目,所以DFA指令404可以包含用于工作隊列指針的字段。
更詳細(xì)的,第一DFA指令字455’包含開始節(jié)點標(biāo)識ID460指示將被它第一節(jié)點使用的特定DFA圖像。第一字404也提供附加信息,例如副本字段462,該副本字段462存儲與被存儲在LLM118中的標(biāo)識的圖像的副本數(shù)量相對應(yīng)的副本數(shù)值。也可以提供類型值464,指示使用地址的類型(18或36位)。典型的64位字也可以包含一個或更多的保留字段。
第二DFA指令字455”包含長度字段470,指示DFA模塊要處理的字節(jié)的數(shù)量和地址段474,指示二級緩沖存儲器130或DRAM108中需要處理的分組數(shù)據(jù)的位置。
第三DFA指令字455包含結(jié)果地址段482,指示任何結(jié)果要寫入的地址(例如,在二級緩沖存儲器130或DRAM中的地址),和一個最大結(jié)果字段480,指示保存最大允許的結(jié)果數(shù)的值。更進一步,DFA模塊134也可以在完成后選擇性的提交工作隊列條目,因此DFA指令404包含工作隊列處理(WQP)段490,用于一個或更多工作隊列指針。
圖8B顯示的是DFA指令404的結(jié)果格式800。DFA結(jié)果800在L2/DRAM(130/108)中有兩個或更多64位字。每個字在L2/DRAM(130/108)中自然排列。在對DFA指令404的處理中和處理后,DFA模塊134將這些字寫入L2/DRAM(130/108)。這個結(jié)構(gòu)是可變長度以適應(yīng)等于可變數(shù)量的標(biāo)記節(jié)點的DFA指令404,但是結(jié)果的長度可以被DFA指令字段的最大結(jié)構(gòu)數(shù)限制。
如上所述,通過使用36位指針518提供的類型字段(圖5A),節(jié)點類型與DFA圖像的一個或多個節(jié)點聯(lián)系成為可能。當(dāng)DTE370轉(zhuǎn)換圖像時,它們產(chǎn)生結(jié)果字異常條件出現(xiàn)。至少一個異常條件是終端節(jié)點。當(dāng)DTE370遇到終端節(jié)點時,它記錄DFA圖像已經(jīng)到達結(jié)尾,DTE370運行的轉(zhuǎn)換會停止。另一個異常條件的例子是標(biāo)記節(jié)點。跟終端節(jié)點相比,當(dāng)DTE370遇到標(biāo)記節(jié)點時圖像的轉(zhuǎn)換不需要停止。然而,結(jié)果會被寫到輸出字中,指出特殊標(biāo)記的節(jié)點為以后分析。因此,當(dāng)圖像中相應(yīng)的節(jié)點被轉(zhuǎn)換時,標(biāo)記的節(jié)點可以用來區(qū)分。
注意,DFA模塊134可能會不只一次寫操作DFA結(jié)果800中的字0。只有最后一次寫入字0會包含有效的DFA結(jié)果800。雖然DFA模塊134可以多次寫操作字0,但僅僅最后一次寫操作可以設(shè)置位16,位16只有DFA模塊完成DFA指令404后才能被設(shè)置。在提交DFA指令404到DFA模塊134之前通過設(shè)置結(jié)果中字0中的位16為零,軟件可以輪詢字0的位16以確定DFA模塊134何時完成DFA指令。當(dāng)DFA的字0的位16被設(shè)置,整個結(jié)果就出現(xiàn)了。
圖2B中圖示的另外一個實施例,圖2A的圖像是要查找兩個不同的字符串‘a(chǎn)bed’和‘a(chǎn)bce’的一個或多個的出現(xiàn)次數(shù)。因此,兩個額外節(jié)點,節(jié)點4和5,增加到了圖2A中,一個節(jié)點分別用于每個字符串的第四個字符(例如,節(jié)點4用于d,節(jié)點5用于e)。節(jié)點4和5都連接到節(jié)點3,如圖,每個字符串的前三個字符是相同的。優(yōu)選的,在輸入字符串中每個字符串的出現(xiàn)都會標(biāo)注上一個“pass”。
可仿效的輸入字符串,比如字符串‘xwabcd454abceabcdsfk’通過一遍,DFA生成三個“已標(biāo)記”過渡。標(biāo)記的過渡發(fā)生在輸入字符串結(jié)尾段(例如,在‘d’或‘e’出現(xiàn)的每個位置)。因此,三個標(biāo)記的過渡指出三個字符串發(fā)現(xiàn)的位置。第一個和最后一個標(biāo)記顯示從節(jié)點3到節(jié)點4的過渡,指出在輸入字符串中字符串‘a(chǎn)bed’的存在(例如,DTE byte=5,previous 3,next 4 and DTEByte 17,previous=3,next=4)。中間標(biāo)記的節(jié)點顯示了從節(jié)點3到節(jié)點5的過渡,指出在輸入字符串中字符串‘′abce′的存在(例如,DTE Byte=13,previous=3,next=5)。使用18位的指針,節(jié)點4和5被標(biāo)記。使用36位的指針,從節(jié)點3到4和5的弧線被標(biāo)記。因此,通過使用DFA標(biāo)記技術(shù)結(jié)合DFA線程引擎,在單獨輸入通道中,可以在相同的輸入字符串中查找到多個不同字符串的存在和位置。
本發(fā)明相關(guān)資料2004年9月10日提交的美國第60/609,211號臨時專利;2004年12月28日提交的美國第11/024,002號臨時專利;2005年4月8日提交,文章名為“Deterministic FiniteAutomata(DFA)Instruction”的美國第60/669,603號臨時專利;2005年4月8日提交,文章名為“Selective Replication of DataStructures”的美國第60/669,655號臨時專利。上述申請的全部教導(dǎo)通過認(rèn)證在此并入本文。
雖然本發(fā)明已經(jīng)對關(guān)于其優(yōu)選的實施方式進行了具體的描述和介紹,但本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,在不脫離本發(fā)明所附權(quán)利要求保護的范圍的情況下,本發(fā)明在形式和細(xì)節(jié)上可以進行多種改變。
權(quán)利要求
1.一種網(wǎng)絡(luò)處理器,包括至少一個處理器內(nèi)核;以及確定性有限自動機(DFA)模塊,異步操作至少一個處理器內(nèi)核,該DFA模塊越過存儲在帶有存儲在連貫緩沖存儲器中的分組數(shù)據(jù)的非緩沖存儲器中的至少一個DFA圖表的多個節(jié)點以響應(yīng)來自至少一個處理器內(nèi)核中的指令。
2.根據(jù)權(quán)利要求1所述的網(wǎng)絡(luò)處理器,DFA模塊包括適于訪問存儲DFA圖表的存儲器的非緩沖存儲控制器;至少一個DFA線程引擎與非緩沖存儲控制器保持通訊;指令輸入邏輯用來設(shè)定從至少一個處理器內(nèi)核到至少一個DFA線程引擎的指令。
3.根據(jù)權(quán)利要求2所述的網(wǎng)絡(luò)處理器,進一步包括指令隊列,至少一個處理器內(nèi)核將與DFA模塊相關(guān)的DFA指令提交到指令隊列中。
4.根據(jù)權(quán)利要求3所述的網(wǎng)絡(luò)處理器,DFA模塊保持指向指令隊列的指針。
5.根據(jù)權(quán)利要求3所述的網(wǎng)絡(luò)處理器,DFA指令標(biāo)示要使用的存儲在連貫緩沖存儲器中的分組數(shù)據(jù)和用于越過的存儲在非緩沖存儲器中的至少一個DFA圖像。
6.根據(jù)權(quán)利要求3所述的網(wǎng)絡(luò)處理器,DFA模塊分配DFA指令給至少一個DFA線程引擎。
7.根據(jù)權(quán)利要求6所述的網(wǎng)絡(luò)處理器,其中至少一個DFA線程引擎取得存儲在連貫緩沖存儲器中的分組數(shù)據(jù);每字節(jié)從連貫緩沖存儲器中接收的分組數(shù)據(jù)發(fā)布非緩沖存儲器加載指令用以轉(zhuǎn)換存儲在非緩沖存儲器中的DFA圖像的下一個狀態(tài);以及將中間的和最終結(jié)果寫到連貫緩沖存儲器中。
8.根據(jù)權(quán)利要求7所述的網(wǎng)絡(luò)處理器,還包括中間的和最終結(jié)果被寫到其中的結(jié)果字。
9.根據(jù)權(quán)利要求8所述的網(wǎng)絡(luò)處理器,其中結(jié)果字當(dāng)設(shè)置時包括指示DFA指令完成的指令完成字段。
10.根據(jù)權(quán)利要求1所述的網(wǎng)絡(luò)處理器,其中DFA模塊方面包括關(guān)聯(lián)在具有至少一個處理器內(nèi)核的共享配置中的多個DFA線程引擎,每個DFA線程適于轉(zhuǎn)換存儲在非緩沖存儲器中的至少一個DFA圖像。
11.根據(jù)權(quán)利要求1所述的網(wǎng)絡(luò)處理器,進一步包括節(jié)點類型標(biāo)識符用于標(biāo)識DFA圖像的節(jié)點的類型。
12.根據(jù)權(quán)利要求11所述的網(wǎng)絡(luò)處理器,節(jié)點類型標(biāo)識符是標(biāo)記的節(jié)點,圖象的標(biāo)記節(jié)點不受阻礙轉(zhuǎn)換的轉(zhuǎn)換。
13.一種轉(zhuǎn)換具有進入的分組數(shù)據(jù)轉(zhuǎn)換的DFA圖像的方法,其包括存儲至少一個DFA圖像到非連貫緩沖存儲器中;存儲DFA指令到連貫緩沖存儲器中,DFA指令指示要使用的存儲在連貫緩沖存儲器中的分組數(shù)據(jù)和要轉(zhuǎn)換的存儲在非緩沖存儲器中的至少一個DFA圖像;使用存儲的分組數(shù)據(jù)轉(zhuǎn)換DFA圖像并將中間和最終結(jié)果寫入連貫緩沖存儲器。
14.根據(jù)權(quán)利要求13所述的方法,其中至少一個處理器內(nèi)核提交DFA指令到DFA模塊。
15.根據(jù)權(quán)利要求13所述的方法,其中DFA模塊分配DFA指令到至少一個DFA線程引擎。
16.根據(jù)權(quán)利要求15所述的方法,其中至少一個DFA線程引擎取得存儲在連貫緩沖存儲器中的分組數(shù)據(jù);每字節(jié)的從連貫緩沖存儲器中取得的分組數(shù)據(jù)分配一個非緩沖存儲器加載指令;越過與取得的每字節(jié)分組數(shù)據(jù)相對應(yīng)的存儲在非緩沖存儲器中的DFA圖像的下一個狀態(tài);以及將中間和最終結(jié)果寫入連貫緩沖存儲器。
17.根據(jù)權(quán)利要求16所述的方法,進一步包括為標(biāo)識DFA圖像中每個節(jié)點各自的節(jié)點類型提供的節(jié)點類型標(biāo)識符,通過節(jié)點類型標(biāo)識符決定中間和最終的結(jié)果。
18.網(wǎng)絡(luò)處理器,所述的網(wǎng)絡(luò)處理器包括用于將至少一個DFA圖象存儲到連貫非緩沖存儲器中的裝置;用于將DFA指令存儲到連貫緩沖存儲器中的裝置,改DFA指令指出存儲在連貫緩沖存儲器中的分組數(shù)據(jù)用以使用以及用于越過的存儲在非緩沖存儲器中的至少一個DFA圖象;以及使用存儲的分組數(shù)據(jù)越過DFA圖象的裝置,該裝置將中間和最終結(jié)果寫入連貫緩沖存儲器。
全文摘要
一種用于越過實時具有輸入的分組數(shù)據(jù)的精確自動圖像的處理器。處理器包括至少一個處理器內(nèi)核和DFA模塊,該DFA模塊對至少一個處理器內(nèi)核異步操作用于越過存儲在具有存儲在連貫緩沖存儲器中的分組數(shù)據(jù)的非緩沖存儲器中的至少一個DFA圖像。
文檔編號G06F21/00GK101053234SQ200580034214
公開日2007年10月10日 申請日期2005年9月8日 優(yōu)先權(quán)日2004年9月10日
發(fā)明者格雷格·A·鮑查德, 大衛(wèi)·A·卡爾森, 理查德·E·科斯勒, 穆罕默德·R·休斯塞恩 申請人:卡威姆網(wǎng)絡(luò)有限公司