用于處理有限自動機(jī)的引擎架構(gòu)的制作方法
【專利摘要】一種用于處理有限自動機(jī)的引擎架構(gòu)包括一個專用于非確定有限自動機(jī)(NFA)處理的超非確定有限自動機(jī)(HNA)處理器。該HNA處理器包括多個超級集群和一個HNA調(diào)度器。每個超級集群包括多個集群。該多個集群中的每個集群包括多個HNA處理單元(HPU)。所選擇的該至少一個超級集群的相應(yīng)多個集群的相應(yīng)多個HPU作為HPU資源池對用于對指示一個HNA指令進(jìn)行分配的HNA調(diào)度器是可用的,以能夠?qū)崿F(xiàn)從網(wǎng)絡(luò)接收到的輸入流中的至少一個正則表達(dá)式的匹配的加速。
【專利說明】用于處理有限自動機(jī)的弓I擎架構(gòu)
【背景技術(shù)】
[0001]開放系統(tǒng)互連(OSI)參考模型定義了用于通過傳輸介質(zhì)進(jìn)行通信的7個網(wǎng)絡(luò)協(xié)議層(L1-L7)。上層(L4-L7)表示端到端通信并且下層(L1-L3)表示本地通信。
[0002]聯(lián)網(wǎng)應(yīng)用感知系統(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é)議層以外,聯(lián)網(wǎng)應(yīng)用感知系統(tǒng)需要以線速(即,在其上傳輸和接收數(shù)據(jù)的網(wǎng)絡(luò)的物理介質(zhì)上的數(shù)據(jù)傳輸速率)通過L4-L7網(wǎng)絡(luò)協(xié)議層來同時通過基于訪問和內(nèi)容的安全性來保護(hù)這些協(xié)議,這些協(xié)議層包括防火墻、虛擬專用網(wǎng)(VPN)、安全套接字層(SSL)、入侵檢測系統(tǒng)(IDS)、互聯(lián)網(wǎng)協(xié)議安全(IPSec)、防病毒(AV)和防垃圾郵件功能。
[0003]網(wǎng)絡(luò)處理器可用于高吞吐量L2和L3網(wǎng)絡(luò)協(xié)議處理,即,執(zhí)行數(shù)據(jù)包處理從而線速轉(zhuǎn)發(fā)數(shù)據(jù)包。通常,通用處理器用于處理需要更多智能處理的L4-L7網(wǎng)絡(luò)協(xié)議。雖然通用處理器可以執(zhí)行計(jì)算密集型任務(wù),但是沒有足夠用于處理數(shù)據(jù)使得其能夠被以線速轉(zhuǎn)發(fā)的性能。
[0004]入侵檢測系統(tǒng)(IDS)應(yīng)用可以檢查流過網(wǎng)絡(luò)的獨(dú)立數(shù)據(jù)包的內(nèi)容,并且可以標(biāo)識可能指示嘗試闖入或威脅系統(tǒng)的可疑圖樣??梢蓤D樣的一個示例可以是數(shù)據(jù)包中的特定文本串,該特定文本串在100個字符以后跟隨另一特定文本串。此類內(nèi)容感知聯(lián)網(wǎng)可能需要以“線速”對數(shù)據(jù)包的內(nèi)容進(jìn)行檢查??梢詫υ搩?nèi)容進(jìn)行分析以確定是否已經(jīng)存在安全漏洞或入侵。
[0005]可以應(yīng)用大量正則表達(dá)式(本文中也被稱為正則表達(dá)式圖樣)形式的圖樣和規(guī)則以確保所有的安全漏洞或入侵被檢測到。正則表達(dá)式是用于描述字符串中的圖樣的緊湊型方法。由正則表達(dá)式所匹配的最簡單圖樣是單個字符或字符串,例如,/c/或/cat/。正則表達(dá)式還可以包括具有特殊含義的運(yùn)算符和元字符。通過使用元字符,正則表達(dá)式可以用于更復(fù)雜的搜索,如“abc.*xyz”。S卩,在“abc”和“xyz”之間的無限量字符數(shù)量的情況下,發(fā)現(xiàn)字符串“abc”,之后是字符串“xyz”。另一示例是正則表達(dá)式“abc..abc.*xyz ; ”,即,發(fā)現(xiàn)字符串“abc”,后面兩個字符,然后是字符串“abc”并且在無限量的字符后由字符串“xyz”跟隨。
[0006]通常使用搜索方法(如用于處理正則表達(dá)式的確定有限自動機(jī)(DFA)或非確定有限自動機(jī)(NFA))來執(zhí)行內(nèi)容搜索。
【發(fā)明內(nèi)容】
[0007]在此披露的實(shí)施例提供了一種用于處理有限自動機(jī)的引擎架構(gòu)的方法、裝置、和相應(yīng)的系統(tǒng)。
[0008]根據(jù)一個實(shí)施例,安全裝置可以操作性地耦合至網(wǎng)絡(luò)。該安全裝置可以包括至少一個中央處理單元(CPU)內(nèi)核和操作性地親合至該至少一個CPU內(nèi)核的至少一個超非確定自動機(jī)(HNA)處理器。該至少一個HNA處理器可以專用于非確定有限自動機(jī)(NFA)處理。該至少一個HNA處理器可以包括多個超級集群。每個超級集群可以包括多個集群。該多個集群中的每個集群可以包括多個HNA處理單元(HPU)。該至少一個CPU內(nèi)核可以被配置成用于選擇該多個超級集群中的至少一個超級集群。該至少一個HNA處理器可以包括一個被配置成用于存儲至少一個HNA指令的HNA片上指令隊(duì)列。該至少一個HNA處理器可以包括一個HNA調(diào)度器。該HNA調(diào)度器可以被配置成用于選擇所選擇的該至少一個超級集群中的該多個集群中的該多個HPU中的一個給定HPU并且將該至少一個HNA指令分配給該給定HPU以便發(fā)起對從網(wǎng)絡(luò)接收到的一個輸入流中的至少一個正則表達(dá)式圖樣進(jìn)行匹配。
[0009]每個超級集群可以進(jìn)一步包括一個相應(yīng)超級集群專有的一個超級集群圖形存儲器。該相應(yīng)超級集群的相應(yīng)多個集群的相應(yīng)多個HPU可以訪問該超級集群圖形存儲器。該超級集群圖形存儲器可以被配置成用于靜態(tài)地存儲至少一個每圖樣NFA的一個節(jié)點(diǎn)子集。該至少一個每圖樣NFA的一個編譯器可以確定該節(jié)點(diǎn)子集。
[0010]每個超級集群可以進(jìn)一步包括該相應(yīng)超級集群專有的至少一個超級集群字符類存儲器。每個至少一個超級集群字符類存儲器可以被配置成用于靜態(tài)地存儲多個正則表達(dá)式圖樣字符類定義。
[0011 ] 該超級集群圖形存儲器和該至少一個超級集群字符類存儲器可以是統(tǒng)一的。
[0012]該相應(yīng)超級集群的該相應(yīng)多個集群的該相應(yīng)多個HPU可以共享該至少一個超級集群字符類存儲器。
[0013]每個超級集群可以進(jìn)一步包括至少一個超級集群字符類存儲器。每個至少一個超級集群字符類存儲器可以是相應(yīng)超級集群的相應(yīng)多個集群中的給定集群專有的并且由該給定集群的相應(yīng)多個HPU共享。每個至少一個超級集群字符類存儲器可以被配置成用于靜態(tài)地存儲多個正則表達(dá)式圖樣字符類定義。
[0014]該至少一個CPU內(nèi)核可以被進(jìn)一步配置成用于通過基于一個與該至少一個HNA指令相關(guān)聯(lián)的圖形標(biāo)識符限制超級集群選擇來選擇該多個超級集群中的該至少一個超級集群。
[0015]該圖形標(biāo)識符可以與多個每圖樣NFA中的一個給定每圖樣NFA相關(guān)聯(lián),并且限制該超級集群選擇可以包括一個確定:該給定每圖樣NFA的至少一個節(jié)點(diǎn)存儲在所選擇的該至少一個超級集群專有的一個超級集群圖形存儲器內(nèi)。
[0016]該HNA調(diào)度器可以被配置成用于從一個HPU限制集合選擇該給定HPU,該HPU限制集合可以包括所選擇的該至少一個超級集群的每個相應(yīng)多個集群各自的每個相應(yīng)多個HPU0該至少一個CPU內(nèi)核可以被進(jìn)一步配置成用于基于與該圖形標(biāo)識符相關(guān)聯(lián)的該給定每圖樣NFA的至少一個節(jié)點(diǎn)存儲在所選擇的該至少一個超級集群專有的一個超級集群圖形存儲器內(nèi)的一個確定來選擇該多個超級集群中的該至少一個超級集群。
[0017]該HNA調(diào)度器可以被進(jìn)一步配置成用于基于該HPU限制集合中的多個HPU的一次循環(huán)調(diào)度來從該HPU限制集合中選擇該給定HPU。
[0018]該HNA調(diào)度器可以被進(jìn)一步配置成用于基于該HPU限制集合中的每個HPU的瞬時加載來從該HPU限制集合中選擇該給定HPU。
[0019]每個超級集群可以進(jìn)一步包括該相應(yīng)超級集群專有的一個超級集群圖形存儲器。每個超級集群圖形存儲器可以被配置成用于存儲多個每圖樣NFA中的至少一個每圖樣NFA的至少一個節(jié)點(diǎn)以復(fù)制該至少一個NFA處理器的每個超級集群的每個超級集群圖形存儲器中的該至少一個節(jié)點(diǎn)。
[0020]該至少一個CPU內(nèi)核可以被進(jìn)一步配置成用于為該HNA調(diào)度器提供一個選項(xiàng):基于復(fù)制與該至少一個HNA指令相關(guān)聯(lián)的該至少一個每圖樣NFA中的一個給定每圖樣NFA的一個確定來選擇該至少一個超級集群。該HNA調(diào)度器可以進(jìn)一步被配置成用于基于所提供的該選項(xiàng)和(i)該多個超級集群的一次第一循環(huán)調(diào)度、(ii)該多個超級集群的一次第一瞬時加載或(ii) (i)與(ii)的組合來選擇該至少一個超級集群。該HNA調(diào)度器可以進(jìn)一步被配置成用于基于所選擇的該至少一個超級集群的該多個集群的該多個HPU的一次第二循環(huán)調(diào)度、所選擇的該至少一個超級集群的該多個集群的該多個HPU的一次第二瞬時加載、或以上的組合來從所選擇的該至少一個超級集群的該多個集群的該多個HPU中選擇該給定HPU。
[0021]該至少一個HNA處理器可以進(jìn)一步包括該多個超級集群的該多個集群的該多個HPU可訪問的一個HNA片上圖形存儲器。該HNA片上圖形存儲器可以被配置成用于靜態(tài)地存儲至少一個每圖樣NFA的一個節(jié)點(diǎn)子集。該至少一個每圖樣NFA的一個編譯器可以確定該節(jié)點(diǎn)子集。
[0022]該至少一個HNA指令可以是第一至少一個HNA指令,并且該安全裝置可以進(jìn)一步包括操作性地耦合至該至少一個CPU內(nèi)核和該至少一個HNA處理器的至少一個系統(tǒng)存儲器。該至少一個系統(tǒng)存儲器可以被配置成包括一個用于存儲第二至少一個HNA指令的HNA芯片外指令隊(duì)列。該第二至少一個HNA指令可以未決傳輸至HNA處理器的該HNA片上指令隊(duì)列。該至少一個系統(tǒng)存儲器可以進(jìn)一步包括一個被配置成用于靜態(tài)地存儲至少一個每圖樣NFA的一個節(jié)點(diǎn)子集的HNA芯片外圖形存儲器。該至少一個每圖樣NFA的一個編譯器可以確定該節(jié)點(diǎn)子集。
[0023]該安全裝置可以進(jìn)一步包括至少一個本地存儲器控制器(LMC)。該至少一個LMC可以操作性地耦合至該至少一個HNA處理器和該至少一個系統(tǒng)存儲器。該至少一個LMC中的一個給定LMC可以被配置成用于能夠?qū)崿F(xiàn)該至少一個系統(tǒng)存儲器的非一致性訪問以便該至少一個HNA處理器對該HNA芯片外圖形存儲器進(jìn)行訪問。
[0024]該至少一個系統(tǒng)存儲器可以被進(jìn)一步配置成包括一個被配置成用于連續(xù)地存儲多個有效載荷的HNA數(shù)據(jù)包數(shù)據(jù)存儲器,該多個有效載荷中的每個有效載荷可以具有一個固定的最大長度。該多個有效載荷中的每個有效載荷可以與該HNA片上指令隊(duì)列中所存儲的該第一至少一個HNA指令或未決傳輸至該HNA片上指令隊(duì)列的該第二至少一個HNA指令中的一個給定HNA指令相關(guān)聯(lián)。
[0025]該至少一個系統(tǒng)存儲器可以被進(jìn)一步配置成包括一個被配置成用于存儲至少一個HNA輸入堆棧的HNA輸入堆棧分區(qū)。每個至少一個HNA輸入堆??梢员慌渲贸捎糜诖鎯︶槍υ摱鄠€超級集群的該多個集群的該多個HPU中的至少一個HPU的至少一項(xiàng)HNA輸入工作。該至少一個系統(tǒng)存儲器可以被進(jìn)一步配置成包括一個被配置成用于存儲至少一個HNA芯片外運(yùn)行堆棧的HNA芯片外運(yùn)行堆棧分區(qū)以擴(kuò)展至少一個片上運(yùn)行堆棧的存儲。每個至少一個片上運(yùn)行堆??梢员慌渲贸捎糜诖鎯︶槍υ撝辽僖粋€HPU的至少一項(xiàng)運(yùn)行時間HNA工作。該至少一個系統(tǒng)存儲器可以被進(jìn)一步配置成包括一個被配置成用于擴(kuò)展至少一個片上保存緩沖區(qū)的存儲的HNA芯片外保存緩沖區(qū)分區(qū)。每個片上保存緩沖區(qū)可以被配置成用于基于檢測到一個有效載荷邊界而存儲針對該至少一個HPU的該至少一項(xiàng)運(yùn)行時間HNA工作。該至少一個系統(tǒng)存儲器可以被進(jìn)一步配置成包括一個被配置成用于存儲該至少一個HPU所確定的該至少一個正則表達(dá)式圖樣的至少一個最終匹配結(jié)果條目的HNA芯片外結(jié)果緩沖區(qū)分區(qū)以在該輸入流中進(jìn)行匹配。所存儲的每個至少一個HNA指令可以對該HNA輸入堆棧分區(qū)的一個給定HNA輸入堆棧、該HNA芯片外運(yùn)行堆棧分區(qū)的一個給定HNA芯片外運(yùn)行堆棧、該HNA芯片外保存緩沖區(qū)分區(qū)的一個給定HNA芯片外保存緩沖區(qū)、以及該HNA芯片外結(jié)果緩沖區(qū)分區(qū)的一個給定HNA芯片外結(jié)果緩沖區(qū)進(jìn)行標(biāo)識。
[0026]該至少一個LMC中的一個給定LMC可以被配置成用于使該至少一個HNA處理器能夠通過一條一致路徑訪問該HNA數(shù)據(jù)包數(shù)據(jù)存儲器、HNA輸入堆棧分區(qū)、HNA芯片外指令隊(duì)列、HNA芯片外運(yùn)行堆棧分區(qū)、HNA芯片外保存緩沖區(qū)分區(qū)、以及該HNA芯片外結(jié)果緩沖區(qū)分區(qū),并且使該至少一個HNA處理器能夠通過一條非一致路徑訪問該HNA芯片外圖形存儲器。
[0027]該多個超級集群的該多個集群的該多個HPU中的每個HPU可以包括一個節(jié)點(diǎn)高速緩存,該節(jié)點(diǎn)高速緩存被配置成用于高速緩存來自一個超級集群圖形存儲器、一個HNA片上圖形存儲器、或一個HNA芯片外圖形存儲器的一個或多個節(jié)點(diǎn)。該多個超級集群的該多個集群的該多個HPU中的每個HPU可以進(jìn)一步包括一個被配置成用于高速緩存來自一個超級集群字符類存儲器的一個或多個正則表達(dá)式圖樣字符類定義的字符類高速緩存和一個被配置成用于存儲來自一個HNA數(shù)據(jù)包數(shù)據(jù)存儲器的一個給定有效載荷的有效載荷緩沖區(qū)。該至少一個HNA指令可以包括一個用于該HNA數(shù)據(jù)包數(shù)據(jù)存儲器中的該給定有效載荷的一個位置的標(biāo)識符。該多個超級集群的該多個集群的該多個HPU中的每個HPU可以進(jìn)一步包括一個被配置成用于存儲單項(xiàng)HNA工作的棧頂寄存器、一個被配置成用于存儲多項(xiàng)HNA工作的運(yùn)行堆棧、以及一個被配置成用于存儲一個保存堆棧的第一內(nèi)容和一個匹配結(jié)果緩沖區(qū)的第二內(nèi)容的統(tǒng)一存儲器。該第一內(nèi)容可以包括該運(yùn)行堆棧中所存儲的一項(xiàng)或多項(xiàng)HNA工作,并且該第二內(nèi)容可以包括一個或多個最終匹配結(jié)果。該多個超級集群的該多個集群的該多個HPU中的每個HPU可以進(jìn)一步包括一個HNA處理內(nèi)核,該處理內(nèi)核操作性地耦合至該節(jié)點(diǎn)高速緩存、字符類高速緩存、有效載荷緩沖區(qū)、棧頂寄存器、運(yùn)行堆棧、以及該統(tǒng)一存儲器。該HNA處理內(nèi)核可以被配置成用于行走至少一個每圖樣NFA,其中,多個有效載荷段存儲在該有效載荷緩沖區(qū)內(nèi),以確定該至少一個正則表達(dá)式圖樣的一次匹配。
[0028]每個超級集群可以進(jìn)一步包括一個相應(yīng)超級集群專有的一個超級集群圖形存儲器。該至少一個HNA處理器可以進(jìn)一步包括該多個超級集群所共享的一個HNA片上圖形存儲器。該安全裝置可以進(jìn)一步包括至少一個系統(tǒng)存儲器,該系統(tǒng)存儲器被配置成包括該多個超級集群所共享的一個HNA芯片外圖形存儲器。所選擇的該給定HPU可以被配置成用于基于所分配的該至少一個HNA指令根據(jù)該輸入流的一個有效載荷的多個段行走至少一個每圖樣NFA中的一個給定圖樣NFA的多個節(jié)點(diǎn)。所行走的這些節(jié)點(diǎn)可以存儲在對所選擇的該給定HPU、該超級集群圖形存儲器、該HNA片上圖形存儲器、該HNA芯片外圖形存儲器、或以上的組合專有的一個節(jié)點(diǎn)高速緩存中。
[0029]所選擇的該至少一個超級集群的該多個集群的該多個HPU可以形成一個該HNA調(diào)度器可用于選擇的HPU資源池以能夠?qū)崿F(xiàn)該匹配的加速。
[0030]在此披露的另一個示例實(shí)施例包括一種專用于非確定有限自動機(jī)(NFA)處理的超非確定有限自動機(jī)(HNA)處理器。該HNA處理器可以包括多個超級集群。每個超級集群可以包括多個集群。該多個集群中的每個集群可以包括多個HNA處理單元(HPU)。該HNA處理器可以進(jìn)一步包括一個可以被配置成用于存儲至少一個HNA指令的HNA片上指令隊(duì)列。所選擇的該至少一個超級集群的該多個集群的該多個HPU可以形成一個可用于對該至少一個HNA指令進(jìn)行分配的HPU資源池。該HNA處理器可以進(jìn)一步包括一個HNA調(diào)度器,該調(diào)度器被配置成用于選擇所形成的該資源池中的一個給定HPU和將該至少一個HNA指令分配給所選擇的該給定HPU以便發(fā)起對從一個網(wǎng)絡(luò)接收到的一個輸入流中的至少一個正則表達(dá)式圖樣進(jìn)行匹配。
[0031]在此披露的另一個示例實(shí)施例包括一種與和在此披露的實(shí)施例相一致的操作相對應(yīng)的方法。
[0032]進(jìn)一步地,又另一個示例實(shí)施例可以包括一種使指令序列存儲在其上的非瞬態(tài)計(jì)算機(jī)可讀介質(zhì),當(dāng)被處理器加載和執(zhí)行時,該指令序列致使處理器執(zhí)行在此披露的方法。
【專利附圖】
【附圖說明】
[0033]從本發(fā)明的示例實(shí)施例的以下更具體的說明中上述內(nèi)容將是明顯的,如在這些附圖中所展示的,其中貫穿這些不同的視圖,相似的參考字符是指相同的部分。附圖不一定按比例,而是著重于展示本發(fā)明的實(shí)施例。
[0034]圖1A為用于有限自動機(jī)處理的引擎架構(gòu)的示例實(shí)施例的框圖。
[0035]圖1B為超非確定自動機(jī)(HNA)處理器的示例實(shí)施例的框圖。
[0036]圖1C為包括HNA處理器的示例實(shí)施例的安全裝置的示例實(shí)施例的框圖。
[0037]圖1D為HNA處理器的另一個不例實(shí)施例的框圖。
[0038]圖1E為至少一個系統(tǒng)存儲器的示例實(shí)施例的框圖。
[0039]圖1F為一種方法的示例實(shí)施例的流程圖。
[0040]圖1G為一種安全裝置的示例實(shí)施例的框圖,在其中可以實(shí)施在此披露的實(shí)施例。
[0041]圖2A至圖2G為示例NFA和DFA圖形和展示圖爆的概念的表。
[0042]圖3A為安全裝置的實(shí)施例的框圖,在其中可以實(shí)施在此披露的實(shí)施例。
[0043]圖3B為可以在至少一個處理器中實(shí)施的方法的示例實(shí)施例的流程圖,該處理器操作性地耦合至安全裝置內(nèi)的至少一個存儲器,該安全裝置操作性地耦合至網(wǎng)絡(luò)。
[0044]圖4A為HNA處理單元(HPU)的示例實(shí)施例的框圖。
[0045]圖4B為根據(jù)在此披露的實(shí)施例的可以被存儲或取回的上下文的示例實(shí)施例的框圖。
[0046]圖5A為行走器可以用于對輸入流中的正則表達(dá)式圖樣進(jìn)行匹配的每圖樣非確定有限自動機(jī)(NFA)圖形的示例實(shí)施例的框圖。
[0047]圖5B為根據(jù)有效載荷行走圖5A的每圖樣NFA圖形的處理周期的示例實(shí)施例的表。
[0048]圖6為行走器的環(huán)境的示例實(shí)施例的框圖。
[0049]圖7A為編譯器的環(huán)境的示例實(shí)施例的框圖。
[0050]圖7B為HNA處理內(nèi)核的示例實(shí)施例的框圖,該處理內(nèi)核操作性地耦合至被映射到存儲器層次中的多個層級的多個存儲器。
[0051]圖8為多個每圖樣NFA的節(jié)點(diǎn)分布的示例實(shí)施例的框圖。
[0052]圖9為可以在至少一個處理器中實(shí)施的方法的示例實(shí)施例的流程圖,該處理器操作性地耦合至被映射到安全裝置內(nèi)的存儲器層次中的多個層級的存儲器,該安全裝操作性地耦合至網(wǎng)絡(luò)。
[0053]圖10為多個每圖樣NFA的節(jié)點(diǎn)的另一節(jié)點(diǎn)分布的示例實(shí)施例的框圖。
[0054]圖11為一種用于對至少一個每圖樣NFA的節(jié)點(diǎn)進(jìn)行分布的方法的示例實(shí)施例的流程圖。
[0055]圖12為可以在至少一個處理器中實(shí)施的方法的另一個示例實(shí)施例的流程圖,該處理器操作性地耦合至被映射到安全裝置內(nèi)的存儲器層次中的多個層級的存儲器,該安全裝操作性地耦合至網(wǎng)絡(luò)。
[0056]圖13A為可以在至少一個處理器中實(shí)施的方法的示例實(shí)施例的流程圖1300,該處理器操作性地耦合至存儲器層次中的多個存儲器和安全裝置內(nèi)的節(jié)點(diǎn)高速緩存,該安全裝操作性地耦合至網(wǎng)絡(luò)。
[0057]圖13B為有效載荷和有效載荷中帶有對應(yīng)偏移的段的示例實(shí)施例的框圖。
[0058]圖13C為通過在分離節(jié)點(diǎn)處選擇懶惰路徑根據(jù)圖13B的有效載荷行走圖5A的每圖樣NFA圖形的處理周期的示例實(shí)施例的表。
[0059]圖13D為一個表,其為圖13C的表的續(xù)表。
[0060]圖14為在此披露的實(shí)施例內(nèi)可選計(jì)算機(jī)的示例內(nèi)部結(jié)構(gòu)的框圖。
【具體實(shí)施方式】
[0061]根據(jù)此披露的實(shí)施例,一種用于有限自動機(jī)處理的引擎架構(gòu)可以包括一個超非確定自動機(jī)(HNA)處理器,該處理器為非確定有限自動機(jī)(NFA)處理提供硬件加速。該HNA處理器可以是與超有限自動機(jī)(HFA)協(xié)處理器互補(bǔ)的協(xié)處理器。該HFA處理器可以為確定有限自動機(jī)(DFA)處理提供硬件加速。HNA和HFA可以是可以用于深度數(shù)據(jù)包檢查應(yīng)用的正則表達(dá)式處理器,如入侵檢測/預(yù)防(IDP)、數(shù)據(jù)包分類、服務(wù)器負(fù)載均衡、web切換、存儲陣列網(wǎng)絡(luò)(SAN)、防火墻負(fù)載均衡、病毒掃描、或任何其他合適的深度數(shù)據(jù)包檢查應(yīng)用。HNA和HFA可以從執(zhí)行計(jì)算和內(nèi)存密集型圖樣匹配過程的沉重負(fù)擔(dān)中分流通用中央處理單元(CPU)。
[0062]圖1A為用于有限自動機(jī)處理的引擎架構(gòu)的示例實(shí)施例的框圖150。根據(jù)該示例實(shí)施例,至少一個CPU內(nèi)核103可以操作性地耦合至至少一個HFA處理器110和至少一個HNA處理器108。操作性耦合可以包括通過總線、中斷、郵箱、一個或多個電路元件的耦合、通信路徑、通信耦合、或以任何其他合適的方式的耦合。至少一個HFA處理器110可以專用于DFA處理,并且至少一個HNA處理器108可以專用于NFA處理。至少一個CPU內(nèi)核103、至少一個HFA處理器110、以及至少一個HNA處理器108可以被配置成共享一個2級高速緩存(L2C)113ο
[0063]至少一個CPU內(nèi)核103、至少一個HNA處理器108、以及至少一個HFA處理器110可以各自分別通過一致路徑115a、115b、和115c操作性地耦合至L2C 113,這些路徑可以是單獨(dú)的一致存儲器總線、單條共享一致存儲器總線、單獨(dú)的一致通信信道、共享一致通信信道或任何其他合適的一致路徑。L2C存儲器控制器(未示出)可以使用L2C 113來保持通過一致路徑115a、115b、和115c的存儲器訪問的存儲器參考一致性。例如,如果至少一個HNA處理器108通過一致路徑115b訪問給定存儲器位置,則可以通過使至少一個CPU內(nèi)核103從該給定存儲器位置讀取的內(nèi)容的數(shù)據(jù)副本無效來保持存儲器參考一致性。使數(shù)據(jù)副本無效可以使至少一個CPU內(nèi)核103或至少一個HFA處理器110能夠獲得至少一個HNA處理器108對該給定存儲器位置進(jìn)行的最近更新的值。
[0064]該示例實(shí)施例可以進(jìn)一步包括至少一個本地存儲器控制器(LMC) 117,該本地存儲器控制器可以操作性地耦合至L2C 113并且被配置成用于管理多種訪問,如對至少一個系統(tǒng)存儲器151或從其讀取、寫入、加載、存儲或任何其他合適的訪問。如此,至少一個CPU內(nèi)核103、至少一個HNA處理器108、或至少一個HFA處理器110通過一致路徑115a、115b、和115c對至少一個系統(tǒng)存儲器151中的一個位置的訪問使至少一個CPU內(nèi)核103、至少一個HFA處理器110、以及至少一個HNA處理器108能夠?yàn)樗L問的位置保持一個共同值。
[0065]進(jìn)一步地,如以下參照圖1B和圖4A所描述的,至少一個HNA處理器108可以包括多個HNA處理單元(HPU),每個處理單元包括至少一個HNA處理內(nèi)核。如此,通過一致路徑115a或115b的訪問可以使至少一個CPU內(nèi)核103中的每個至少一個CPU內(nèi)核以及至少一個HNA處理器108的HPU中的每個的每個至少一個HNA處理內(nèi)核能夠保持存儲器參考一致性。這些HPU可以是能夠使至少一個HNA處理器108的總體性能實(shí)現(xiàn)至少20Gbps的并發(fā)HPU0
[0066]回到圖1A,至少一個HFA處理器110和至少一個HNA處理器108可以分別通過非一致路徑119a和119b操作性地耦合至LMC 117,從而使得至少一個HFA處理器110和至少一個HNA處理器108能夠繞過L2C 113以減少存儲器訪問延遲,從而提高匹配性能。根據(jù)在此披露的實(shí)施例,非一致路徑119a可以使HNA處理器108能夠通過LMC 117直接訪問至少一個系統(tǒng)存儲器151,從而基于HNA處理器108訪問的至少一個系統(tǒng)存儲器151的具體分區(qū)或位置而繞過LC2113。
[0067]例如,從HNA處理器108的角度看,如果至少一個系統(tǒng)存儲器151的具體分區(qū)或位置包括只讀內(nèi)容,則可以使用非一致路徑119a,因?yàn)榛谠L問來保持一致性將不是問題。此類只讀內(nèi)容可以包括圖形存儲器內(nèi)容,如HNA處理器108可以用來對輸入流中的正則表達(dá)式進(jìn)行匹配的至少一個NFA圖形(未示出)的一個或多個節(jié)點(diǎn)。通過非一致路徑119a訪問至少一個系統(tǒng)存儲器151來繞過L2C 113可以通過避免將以另外方式發(fā)生的延遲來提高至少一個HNA處理器108的匹配性能,以便保持訪問的一致性。進(jìn)一步地,由于只讀內(nèi)容可以有利地包括至少一個NFA圖形的可以不具有時間或空間局部性的一個或多個節(jié)點(diǎn),如以下參照圖13D所披露的,通過非一致路徑119a訪問該一個或多個節(jié)點(diǎn)可以實(shí)現(xiàn)另一個優(yōu)點(diǎn),因?yàn)榇祟愒L問將不污染L2C 113的現(xiàn)有內(nèi)容。
[0068]圖1B為HNA處理器108的示例實(shí)施例的框圖155。如以上參照圖1A所披露的,HNA處理器108可以專用于NFA處理。HNA處理器108可以包括多個超級集群,如超級集群121a和121b。每個超級集群可以包括多個集群,如超級集群121a的集群123a和123b和超級集群121b的集群123c和123d。該多個集群123a_d中的每個集群可以包括多個HNA處理單元(HPU),如集群123a的HPU 125a和125b、集群123b的HPU 125c和125d、集群123c的HPU 125e和125f、以及集群123d的HPU 125g和125h。HPU 125a_f中的每個可以具有一個如以下參照圖4A所披露的架構(gòu)。HNA處理器108可以進(jìn)一步包括一個可以被配置成用于存儲至少一個HNA指令153的HNA芯上指令隊(duì)列154,該指令可以被分配至HPU 125a-f中的給定HPU。
[0069]對至少一個HNA指令153進(jìn)行分配可以包括寫入特定門鈴寄存器,該門鈴寄存器被配置成用于使用與以下參照圖4A所披露的HNA指令相關(guān)聯(lián)的信息來觸發(fā)該多個HPU中的給定HPU以開始圖形行走。分配可以包括觸發(fā)與該給定HPU相關(guān)聯(lián)的中斷、或以任何其他合適方式的分配。
[0070]可以按照HNA指令塊的鏈表來保持HNA片上指令隊(duì)列154或以任何其他合適的方式來保持。每個HNA指令塊可以包括可編程數(shù)量的固定長度的HNA指令。軟件可以對可以由HPU釋放的指令塊進(jìn)行分配。HNA指令塊后面可以緊跟著一個可以包括下一個塊指針鏈接的64位字。給定HPU可以被配置成用于與該給定HPU相關(guān)聯(lián)的門鈴計(jì)數(shù)一指示指令塊中最后一個HNA指令包含一個有效HNA指令就讀取下一個塊指針。該給定HPU可以從該指令隊(duì)列讀取字,例如,以頭指針開始,并且基于處理指令塊中的最后一個指令,該給定HPU可以使用下一個塊指針鏈接來遍歷至下一個指令塊。以此方式,當(dāng)止用塊中的最后一個HNA指令時,該給定HPU可以自動地將所止用的存儲器塊釋放回管理池。下一個塊指針可以是指令塊內(nèi)的最后一個HNA指令后的下一個64位字。下一個塊指針可以指定下一個塊指針(前向鏈接)以使該給定HPU能夠?qū)梢源鎯υ谥辽僖粋€系統(tǒng)存儲器151內(nèi)的下一個指令進(jìn)行定位。
[0071]為了將HNA指令插入到HNA片上指令隊(duì)列154內(nèi),軟件可以將該HNA指令寫入到軟件所保持的尾指針,然后將與有待添加至HNA片上指令隊(duì)列154的HNA指令的總數(shù)一起寫入至給定的HNA門鈴計(jì)數(shù)寄存器。到該給定的HNA門鈴計(jì)數(shù)寄存器的寫入可以是累積的并且可以反映未決HNA指令的總數(shù)。當(dāng)該給定HPU止用指令時,可以使相應(yīng)的HNA門鈴計(jì)數(shù)寄存器自動減量。該給定HPU可以被配置成用于繼續(xù)處理HNA指令,直到已經(jīng)為所有未決請求提供了服務(wù),例如,直到相關(guān)聯(lián)的累積門鈴計(jì)數(shù)寄存器為零。
[0072]根據(jù)在此披露的實(shí)施例,該多個超級集群121a和121b中的所選擇的至少一個超級集群121a的該多個集群123a和123b的該多個HPU125a_d可以形成一個可用于對至少一個HNA指令153進(jìn)行分配的HPU資源池127。HNA處理器108可以進(jìn)一步包括一個可以被配置成用于從所形成的HPU資源池127選擇一個給定HPU (如HPU 125b)的HNA調(diào)度器129,并且HNA調(diào)度器129可以將至少一個HNA指令153分配給所選擇的給定HPU 125b以便發(fā)起對從網(wǎng)絡(luò)(未示出)接收到的輸入流(未示出)中的至少一個正則表達(dá)式圖樣(未示出)進(jìn)行匹配。形成HNA調(diào)度器129可用于選擇的HPU資源池127的多個HPU 125a_d可以能夠?qū)崿F(xiàn)匹配的加速。
[0073]應(yīng)理解到,在此被稱為“片上”的HNA組件是指可以集成在HNA處理器108的單個芯片基板上的組件,并且針對超級集群、集群、或HPU示出的總數(shù)是出于說明目的,并且可以使用任何合適的總數(shù)。例如,該多個超級集群的一個第一總數(shù)可以至少為二,該多個集群的一個第二總數(shù)可以至少為二,并且該多個HPU的一個第三總數(shù)可以至少為十。
[0074]圖1C為包括HNA處理器108的示例實(shí)施例的安全裝置102的實(shí)施例的框圖157。安全裝置102可以操作性地耦合至網(wǎng)絡(luò)(未示出)。該網(wǎng)絡(luò)可以是廣域網(wǎng)(WAN)、局域網(wǎng)(LAN)、無線網(wǎng)絡(luò)、或任何其他合適的網(wǎng)絡(luò)。安全裝置102可以包括至少一個CPU內(nèi)核103和可以操作性地連至以上參照圖1A所披露的至少一個CPU內(nèi)核103的至少一個HNA處理器108。至少一個HNA處理器108可以專用于非確定有限自動機(jī)(NFA)處理。
[0075]根據(jù)在此披露的實(shí)施例,至少一個HNA處理器108可以包括多個超級集群,如以上披露的超級集群121a和121b。每個超級集群可以包括多個集群,如超級集群121a的集群123a和123b和超級集群121b的集群123c和123d。該多個集群123a_d中的每個集群可以包括多個HNA處理單元(HPU),如集群123a的HPU 125a和125b、集群123b的HPU 125c和125d、集群123c的HPU 125e和125f、以及集群123d的HPU 125g和125h。至少一個CPU內(nèi)核103可以被配置成用于當(dāng)向HNA處理器108提交指令時選擇該多個超級集群121a和121b中的至少一個超級集群,如超級集群121a。
[0076]至少一個HNA處理器108可以包括一個被配置成用于存儲至少一個HNA指令153的HNA片上指令隊(duì)列154。至少一個HNA處理器108可以包括HNA調(diào)度器129。HNA調(diào)度器129可以被配置成用于選擇所選擇的至少一個超級集群121a的該多個集群123a和123b的中的該多個HPU 125a-d中的給定HPU 125b并且將至少一個HNA指令153分配給給定HPU125b以便發(fā)起對從網(wǎng)絡(luò)(未示出)接收到的輸入流(未示出)中的至少一個正則表達(dá)式圖樣(未示出)進(jìn)行匹配。
[0077]圖1D為HNA處理器108的另一個示例實(shí)施例的框圖158。根據(jù)該示例實(shí)施例,每個超級集群可以進(jìn)一步包括一個相應(yīng)超級集群專有的一個超級集群圖形存儲器156a。例如,超級集群圖形存儲器156a可以是對相應(yīng)超級集群121a專有的。超級集群圖形存儲器156a對相應(yīng)超級集群的相應(yīng)多個集群的相應(yīng)多個HPU(如集群123a和123b的該多個HPU125a-d)是可訪問的并且可以被配置成用于靜態(tài)地存儲至少一個每圖樣NFA(未示出)(如以下參照圖3A所披露的每圖樣NFA 314)的一個節(jié)點(diǎn)子集(未示出)。該節(jié)點(diǎn)子集可以由一個編譯器(未示出)確定,如以下參照圖3A所披露的編譯器306,該編譯器可以確定節(jié)點(diǎn)分布,如以下參照圖7A和圖8所披露的節(jié)點(diǎn)分布。超級集群圖形存儲器156a可以被配置成用于存儲多種類型的NFA節(jié)點(diǎn)。不同節(jié)點(diǎn)類型的NFA節(jié)點(diǎn)可以配置有給定大小,從而使多種節(jié)點(diǎn)類型的多個節(jié)點(diǎn)能夠具有相同的節(jié)點(diǎn)大小。
[0078]根據(jù)在此披露的實(shí)施例,每個超級集群可以進(jìn)一步包括相應(yīng)超級集群專有的至少一個超級集群字符類存儲器135。例如,至少一個超級集群字符類存儲器135可以是對相應(yīng)超級集群121a專有的。每個至少一個超級集群字符類存儲器可以被配置成用于靜態(tài)地存儲多個正則表達(dá)式圖樣字符類定義(未示出)。所存儲的正則表達(dá)式圖樣字符類定義可以用于對輸入流中的至少一個正則表達(dá)式圖樣進(jìn)行匹配。相應(yīng)超級集群121a的相應(yīng)多個集群123a和123b的相應(yīng)多個HPU 125a_d可以共享至少一個超級集群字符類存儲器135。根據(jù)另一個實(shí)施例,超級集群圖形存儲器156a和至少一個超級集群字符類存儲器135可以是統(tǒng)一的。
[0079]根據(jù)在此披露的實(shí)施例,每個至少一個HNA指令153可以指定一個用于指定哪個每圖樣NFA用于對至少一個正則表達(dá)式進(jìn)行匹配的圖形標(biāo)識符。根據(jù)一個實(shí)施例,編譯器(如圖3A的編譯器306)可以對每個每圖樣NFA的節(jié)點(diǎn)進(jìn)行分布,從而通過將給定每圖樣NFA的節(jié)點(diǎn)存儲到給定超級集群專有的存儲器使得該給定每圖樣NFA對該給定超級集群是專有的。
[0080]如此,可以基于與至少一個HNA指令153所指定的給定每圖樣NFA相關(guān)聯(lián)的唯一圖形標(biāo)識符對至少一個HNA指令153進(jìn)行分配,以遍歷(即,行走)有效載荷段以便對至少一個正則表達(dá)式圖樣進(jìn)行匹配。如此,可以將HPU選擇限制到給定超級集群的HPU。在該給定超級集群內(nèi),由于該給定超級集群的集群訪問共享統(tǒng)一超級集群圖形存儲器,可以基于該給定集群的每個HPU的循環(huán)調(diào)度、瞬時加載、以上的組合、或以任何其他合適的方式選擇給定該超級集群的給定HPU。
[0081]例如,該圖形標(biāo)識符可以與多個每圖樣NFA中的給定每圖樣NFA相關(guān)聯(lián),如圖3A的NFA 314。如此,一個給定的圖樣集合可以共享同一個圖形標(biāo)識符。例如,圖3A的規(guī)則集310中的所有圖樣可以共享同一個圖形標(biāo)識符。在某些情況下,可以存在與系統(tǒng)中的規(guī)則集310相似的多個規(guī)則集。在那種情況下,每個單獨(dú)的“規(guī)則集”可以具有一個唯一的圖形標(biāo)識符。該圖形標(biāo)識符可以與該給定每圖樣NFA的至少一個節(jié)點(diǎn)(未示出)相關(guān)聯(lián)并且可以存儲在可以是對該多個超級集群121a和121b的給定超級集群121a專有的超級集群圖形存儲器156a內(nèi),如超級集群121a專有的超級集群圖形存儲器156a。該圖形標(biāo)識符可以與一個圖樣集合相關(guān)聯(lián)。至少一個CPU內(nèi)核103可以基于確定與該圖形標(biāo)識符相關(guān)聯(lián)的給定每圖樣NFA 314的至少一個節(jié)點(diǎn)存儲在給定超級集群121a專有的超級集群圖形存儲器156a內(nèi)來選擇該多個超級集群121a和121b中的給定超級集群121a。
[0082]如此,至少一個CPU內(nèi)核103可以被進(jìn)一步配置成用于通過基于與至少一個HNA指令153相關(guān)聯(lián)的圖形標(biāo)識符(未示出)限制超級集群選擇來選擇多個超級集群121a和121b中的該至少一個超級集群(如超級集群121a)。例如,該圖形標(biāo)識符可以與多個每圖樣NFA中的給定每圖樣NFA相關(guān)聯(lián),并且限制超級集群選擇可以包括確定該給定每圖樣NFA的至少一個節(jié)點(diǎn)存儲在至少一個超級集群121a專有的超級集群圖形存儲器156a內(nèi)。至少一個CPU內(nèi)核103可以基于確定與該圖形標(biāo)識符相關(guān)聯(lián)的該給定每圖樣NFA的至少一個節(jié)點(diǎn)存儲在超級集群121a專有的超級集群圖形存儲器156a內(nèi)來選擇多個超級集群121a和121b中的至少一個超級集群121a。
[0083]根據(jù)在此披露的實(shí)施例,HNA調(diào)度器129可以被配置成用于從可以包括所選擇的該至少一個超級集群的每個相應(yīng)多個集群的每個相應(yīng)多個HPU的HPU限制集合(如所選擇的相應(yīng)超級集群121a的相應(yīng)多個集群123a和123b的相應(yīng)多個HPU 125a_d)中選擇一個給定HPU,如圖1C的HPU 125b。HNA調(diào)度器129可以被配置成用于基于該HPU限制集合中的HPU 125a-d的循環(huán)調(diào)度、該HPU限制集合中的HPU125a_d中的每個HPU的瞬時加載、以上的組合、或基于任何其他合適的調(diào)度策略從可以包括HPU 125a-d的該HPU限制集合中選擇給定HPU125b。
[0084]根據(jù)在此披露的另一個實(shí)施例,編譯器(如以下披露的圖3A的編譯器306)可以復(fù)制多個超級集群圖形存儲器中的該至少一個每圖樣NFA中的給定每圖樣NFA的一個或多個節(jié)點(diǎn),每個超級集群圖形存儲器對相應(yīng)超級集群是專有的。如此,至少一個HNA指令153可以被分配或調(diào)度至HNA處理器108的任何超級集群的任何集群的任何HPU??梢曰诰唧w超級集群(或超級集群內(nèi)的集群)處的瞬時加載或基于HNA處理器108的該多個超級集群的該多個集群的該多個HPU的循環(huán)調(diào)度來選擇HPU。如果希望每個每圖樣NFA的最大吞吐量,則可以是此類情況。然而,根據(jù)替代性示例實(shí)施例,當(dāng)HNA處理器108的多個超級集群的每個超級集群圖形存儲器包含所復(fù)制的每圖樣NFA節(jié)點(diǎn)時,此類配置可以通過HNA處理器108的超級集群的總數(shù)來限制所支持的每圖樣NFA的總數(shù)。
[0085]例如,根據(jù)替代性示例實(shí)施例,編譯器306可以將每個超級集群圖形存儲器配置成用于存儲多個每圖樣NFA中的至少一個每圖樣NFA的至少一個節(jié)點(diǎn)以復(fù)制該至少一個HNA處理器的每個超級集群的每個超級集群圖形存儲器中的該至少一個節(jié)點(diǎn)。如此,至少一個CPU內(nèi)核103可以為HNA調(diào)度器129提供一個選項(xiàng):基于確定復(fù)制與該至少一個HNA指令相關(guān)聯(lián)的至少一個每圖樣NFA中的給定每圖樣NFA來選擇該至少一個超級集群。
[0086]如此,至少一個CPU內(nèi)核103選擇至少一個超級集群的替代方案,而是HNA調(diào)度器129可以基于所提供的該選項(xiàng)來選擇至少一個超級集群,如圖1C的超級集群121a。例如,如果所提供的該選項(xiàng)指示HNA調(diào)度器129要選擇至少一個超級集群,則HNA調(diào)度器129可以基于所提供的該選項(xiàng)和(i)該多個超級集群的一次第一循環(huán)調(diào)度、(ii)該多個超級集群的一次第一瞬時加載或(ii) (i)與(ii)的組合來選擇該至少一個超級集群。然后,HNA調(diào)度器129可以基于HNA 129所選擇的至少一個超級集群121a的多個集群123a和123b的多個HPU125a-d的一次第二循環(huán)調(diào)度、HNA 129所選擇的至少一個超級集群121a的多個集群123a和123b的多個HPU 125a_d的一次第二瞬時加載、或以上的組合來從所選擇的至少一個超級集群121a的多個集群123a和123b的多個HPU125a_d中選擇給定HPU 125b。
[0087]回到圖1D,至少一個HNA處理器129可以進(jìn)一步包括該多個超級集群的該多個集群的該多個HPU(如圖1C的該多個超級集群121a和121b的該多個集群123a_d的該多個HPU 125a-h)可以訪問的HNA片上圖形存儲器156b。HNA片上圖形存儲器156b可以被配置成用于靜態(tài)地存儲至少一個每圖樣NFA(未示出)的一個節(jié)點(diǎn)子集(未示出)。該節(jié)點(diǎn)子集可以由一個編譯器(如至少一個每圖樣NFA 314的圖3A的編譯器306)確定,該編譯器可以確定節(jié)點(diǎn)分布,如以下參照圖7A和圖8所披露的節(jié)點(diǎn)分布。HNA片上圖形存儲器156b可以被配置成用于存儲多種類型的NFA節(jié)點(diǎn)。不同節(jié)點(diǎn)類型的NFA節(jié)點(diǎn)可以配置有給定大小,從而使多種節(jié)點(diǎn)類型的多個節(jié)點(diǎn)能夠具有相同的節(jié)點(diǎn)大小。
[0088]回到圖1C,至少一個HNA指令153可以是第一至少一個HNA指令,并且安全裝置102可以進(jìn)一步包括至少一個系統(tǒng)存儲器,如圖1A中的可以操作性地耦合至至少一個CPU內(nèi)核103和至少一個HNA處理器108的至少一個系統(tǒng)存儲器151。
[0089]圖1E為至少一個系統(tǒng)存儲器151的示例實(shí)施例的框圖160。根據(jù)在此披露的實(shí)施例,至少一個系統(tǒng)存儲器(如以上參照圖1A所披露的至少一個系統(tǒng)存儲器151)可以被配置成包括用于存儲第二至少一個HNA指令(未示出)的HNA片上指令隊(duì)列163。該第二至少一個HNA指令可以未決傳輸至HNA處理器108的HNA片上指令隊(duì)列154。至少一個系統(tǒng)存儲器151可以進(jìn)一步包括一個被配置成用于靜態(tài)地存儲至少一個每圖樣NFA(未示出)的一個節(jié)點(diǎn)子集(未示出)的HNA芯片外圖形存儲器156c。該節(jié)點(diǎn)子集可以由至少一個每圖樣NFA的一個編譯器(如至少一個每圖樣NFA 314的圖3A的編譯器306)確定,該編譯器可以確定節(jié)點(diǎn)分布,如以下參照圖7A和圖8所披露的節(jié)點(diǎn)分布。HNA芯片外圖形存儲器156c可以被配置成用于存儲多種類型的NFA節(jié)點(diǎn)。不同節(jié)點(diǎn)類型的NFA節(jié)點(diǎn)可以配置有給定大小,從而使多種節(jié)點(diǎn)類型的多個節(jié)點(diǎn)能夠具有相同的節(jié)點(diǎn)大小。
[0090]根據(jù)在此披露的實(shí)施例,圖1C的安全裝置102可以進(jìn)一步包括L2C 113、至少一個LMC 117、以及圖1A的至少一個系統(tǒng)存儲器151。至少一個LMC 117可以操作性地耦合至至少一個HNA處理器108和至少一個系統(tǒng)存儲器151。該至少一個LMC中的給定LMC可以被配置成用于能夠?qū)崿F(xiàn)至少一個系統(tǒng)存儲器151的訪問以便至少一個HNA處理器108對HNA芯片外圖形存儲器156c進(jìn)行訪問。通過非一致路徑119a來繞過L2C 113可以通過避免由于保持通過一致路徑115b對HNA芯片外圖形存儲器156c的訪問的一致性而另外引起的延遲來提高至少一個HNA處理器108的匹配性能。由于HNA芯片外圖形存儲器156c中所存儲的節(jié)點(diǎn)可能沒有時間或空間局部性并且由于從至少一個HNA處理器108的角度看,此類存儲的節(jié)點(diǎn)的訪問是只讀的,通過非一致路徑119a訪問HNA芯片外圖形存儲器156c可以實(shí)現(xiàn)又另一個優(yōu)點(diǎn),因?yàn)榇祟愒L問將不污染L2C 113的現(xiàn)有內(nèi)容。
[0091]回到圖1E,至少一個系統(tǒng)存儲器151可以被進(jìn)一步配置成包括可以被配置成用于連續(xù)地存儲多個有效載荷的HNA數(shù)據(jù)包數(shù)據(jù)存儲器165。該多個有效載荷中的每個有效載荷可以具有一個固定最大長度,如1536字節(jié)或任何其他合適的固定最大長度。該多個有效載荷中的每個有效載荷可以與HNA片上指令隊(duì)列154中所存儲的第一至少一個HNA指令或可以存儲在HNA芯片外指令隊(duì)列163內(nèi)并且未決傳輸至HNA片上指令隊(duì)列154的第二至少一個HNA指令中的一個給定HNA指令相關(guān)聯(lián)。
[0092]根據(jù)在此披露的實(shí)施例,至少一個系統(tǒng)存儲器151可以被進(jìn)一步配置成包括一個可以被配置成用于存儲至少一個HNA輸入堆棧的HNA輸入堆棧分區(qū)161。每個至少一個HNA輸入堆棧可以被配置成用于存儲針對該多個超級集群的該多個集群的該多個HPU的至少一個HPU的至少一項(xiàng)HNA輸入工作,如以上所披露的HNA處理器108的該多個超級集群121a和121b的該多個集群123a_d的該多個HPU125a_h。
[0093]至少一個系統(tǒng)存儲器151可以進(jìn)一步包括可以被配置成用于存儲至少一個芯片外運(yùn)行堆棧的HNA芯片外運(yùn)行堆棧分區(qū)167以擴(kuò)展至少一個片上運(yùn)行堆棧的存儲,如以下參照圖4A所披露的運(yùn)行堆棧460。每個至少一個片上運(yùn)行堆??梢员慌渲贸捎糜诖鎯︶槍ο鄳?yīng)HPU的至少一項(xiàng)運(yùn)行時間HNA工作,如HPU 425,如以下參照圖4A所披露的。
[0094]至少一個系統(tǒng)存儲器151可以進(jìn)一步包括可以被配置成用于擴(kuò)展至少一個片上保存緩沖區(qū)的存儲的HNA芯片外保存緩沖區(qū)分區(qū)169,如以下參照圖4A所披露的保存緩沖區(qū)464。該片上保存緩沖區(qū)可以被配置成用于基于檢測到有效載荷邊界而存儲針對相應(yīng)HPU的至少一項(xiàng)運(yùn)行時間HNA工作,如HPU 425,如以下參照圖4所披露的。
[0095]至少一個系統(tǒng)存儲器151可以進(jìn)一步包括可以被配置成用于存儲匹配結(jié)果緩沖區(qū)的至少一個最終匹配結(jié)果條目的HNA芯片外結(jié)果緩沖區(qū)分區(qū)171,如以下參照圖4A所披露的匹配結(jié)果緩沖區(qū)466。該至少一個最終匹配結(jié)果可以是至少一個HPU所確定的至少一個正則表達(dá)式圖樣的最終匹配以在輸入流中進(jìn)行匹配??梢源鎯υ贖NA片上指令隊(duì)列154或HNA芯片外指令隊(duì)列163中的每個至少一個HNA指令可以對HNA輸入堆棧分區(qū)161的給定HNA輸入堆棧、HNA芯片外運(yùn)行堆棧分區(qū)167的給定HNA芯片外運(yùn)行堆棧、HNA芯片外保存緩沖區(qū)分區(qū)169的給定HNA芯片外保存緩沖區(qū)、以及HNA芯片外結(jié)果緩沖區(qū)分區(qū)171的給定HNA芯片外結(jié)果緩沖區(qū)進(jìn)行標(biāo)識。
[0096]回到圖1A,至少一個LMC 117中的給定LMC可以被配置成用于使至少一個HNA處理器108能夠通過一致路徑115b訪問HNA數(shù)據(jù)包數(shù)據(jù)存儲器165、HNA輸入堆棧分區(qū)161、HNA芯片外指令隊(duì)列163、HNA芯片外運(yùn)行堆棧分區(qū)167、HNA芯片外保存緩沖區(qū)分區(qū)169、以及HNA芯片外結(jié)果緩沖區(qū)分區(qū)171,并且可以被配置成用于使至少一個HNA處理器108能夠通過非一致路徑119a訪問HNA芯片外圖形存儲器156c。
[0097]回到圖1E,HNA輸入堆棧分區(qū)161可以包括可以是由DFA處理產(chǎn)生的新HNA工作的HNA工作。如以上所披露的,至少一個HNA處理器108可以與為以下參照圖1G所披露的確定有限自動機(jī)(DFA)處理提供硬件加速的HFA處理器110互補(bǔ)。
[0098]圖1F為一種方法的示例實(shí)施例的流程圖(180)。該方法可以開始(182)并且在至少一個HNA處理器中包括多個超級集群,該處理器操作性地耦合至至少一個CPU內(nèi)核并且專用于非確定有限自動機(jī)(NFA)處理(184)。該方法可以包括每個超級集群中的多個集群
(186)ο該方法可以包括在該多個集群中的每個集群中的多個HNA處理單元(HPU) (188)。該方法可以選擇該多個超級集群中的至少一個超級集群(190)。該方法可以選擇所選擇的該至少一個超級集群的多個集群的多個HPU中的給定HPU(192)。該方法可以將至少一個HNA指令分配給所選擇的該給定HPU以便發(fā)起對從網(wǎng)絡(luò)接收到的輸入流中的至少一個正則表達(dá)式圖樣進(jìn)行匹配(194),并且在該示例實(shí)施例中,該方法之后結(jié)束。
[0099]圖1G為以上披露的安全裝置102的另一個示例實(shí)施例的框圖,在其中可以實(shí)施在此披露的實(shí)施例。安全裝置102可以包括一個網(wǎng)絡(luò)服務(wù)處理器100。安全裝置102可以是可以將在一個網(wǎng)絡(luò)接口 107a接收到的數(shù)據(jù)包切換到另一個網(wǎng)絡(luò)接口 107b并且在轉(zhuǎn)發(fā)這些數(shù)據(jù)包之前可以在所接收到的數(shù)據(jù)包上執(zhí)行多個安全功能的獨(dú)立系統(tǒng)。例如,安全裝置102可以用于在將處理的數(shù)據(jù)包1lb轉(zhuǎn)發(fā)至局域網(wǎng)(LNA) 105b、或任何其他合適的網(wǎng)絡(luò)之前對可以在廣域網(wǎng)(WAN) 105a、或任何其他合適的網(wǎng)絡(luò)上接收到的數(shù)據(jù)包1la進(jìn)行安全處理。
[0100]網(wǎng)絡(luò)服務(wù)處理器100可以被配置成用于對所接收到的數(shù)據(jù)包中所封裝的開放系統(tǒng)互連(OSI)網(wǎng)絡(luò)L2-L7層協(xié)議進(jìn)行處理。如本領(lǐng)域技術(shù)人員所熟知的,開放系統(tǒng)互連
(OSI)參考模型定義了七層網(wǎng)絡(luò)協(xié)議層(L1-L7)。物理層(LI)表示將設(shè)備連接到傳輸媒介的實(shí)際接口,包括電氣接口及物理接口。數(shù)據(jù)鏈路層(L2)執(zhí)行數(shù)據(jù)組幀。網(wǎng)絡(luò)層(L3)將數(shù)據(jù)格式化為數(shù)據(jù)包。傳輸層(L4)處理端到端的傳輸。會話層(L5)管理設(shè)備之間的通信,例如,無論通信是半雙工的還是全雙工的。表現(xiàn)層(L6)管理數(shù)據(jù)格式化及表現(xiàn),例如,語法、控制代碼、特殊圖形及字符集。應(yīng)用層(L7)允許多個用戶之間的通信,例如,文件傳輸及電子郵件。
[0101]網(wǎng)絡(luò)服務(wù)處理器100可以為高層網(wǎng)絡(luò)協(xié)議(例如,L4-L7)調(diào)度和排列工作(例如,數(shù)據(jù)包處理操作),并且能夠?qū)崿F(xiàn)在所接收到的待執(zhí)行的數(shù)據(jù)包中進(jìn)行高層網(wǎng)絡(luò)協(xié)議的處理,以便以線速轉(zhuǎn)發(fā)數(shù)據(jù)包。通過處理這些協(xié)議來以線速轉(zhuǎn)發(fā)這些數(shù)據(jù)包,網(wǎng)絡(luò)服務(wù)處理器100不會降低網(wǎng)絡(luò)數(shù)據(jù)傳輸速率。網(wǎng)絡(luò)服務(wù)處理器100可以從可以是物理硬件接口的網(wǎng)絡(luò)接口 107a或107b接收數(shù)據(jù)包,并且可以對所接收到的數(shù)據(jù)包執(zhí)行L2-L7網(wǎng)絡(luò)協(xié)議處理。網(wǎng)絡(luò)服務(wù)處理器100可以后續(xù)地將所處理的數(shù)據(jù)包1lb轉(zhuǎn)發(fā)通過網(wǎng)絡(luò)接口 107a或107b到達(dá)網(wǎng)絡(luò)中的另一跳、最終目的地、或通過另一條總線(未示出)以便主機(jī)處理器(未示出)進(jìn)行進(jìn)一步處理。網(wǎng)絡(luò)協(xié)議處理可以包括網(wǎng)絡(luò)安全協(xié)議的處理,如防火墻、應(yīng)用防火墻、包括IP安全(IPSec)和/或安全套接字層(SSL)的虛擬專用網(wǎng)(VPN)、入侵檢測系統(tǒng)(IDS)和防病毒(AV)、或任何其他合適的網(wǎng)絡(luò)協(xié)議。
[0102]網(wǎng)絡(luò)服務(wù)處理器100可以使用多個處理器(即,內(nèi)核)(如以上披露的至少一個CPU內(nèi)核103)產(chǎn)生高應(yīng)用性能。這些內(nèi)核(未示出)中的每個內(nèi)核可以專用于執(zhí)行數(shù)據(jù)面、控制面操作、或以上的組合。數(shù)據(jù)面操作可以包括數(shù)據(jù)包操作以便轉(zhuǎn)發(fā)數(shù)據(jù)包??刂泼娌僮骺梢园ㄌ幚韽?fù)雜的高層協(xié)議的多個部分,如互聯(lián)網(wǎng)協(xié)議安全(IPSec)、傳輸控制協(xié)議(TCP)、安全套接字層(SSL)、或任何其他合適的高層協(xié)議。數(shù)據(jù)面操作可以包括處理這些復(fù)雜的高層協(xié)議的其他部分。
[0103]網(wǎng)絡(luò)服務(wù)處理器100還可以包括可以分流內(nèi)核從而使得網(wǎng)絡(luò)服務(wù)處理器100實(shí)現(xiàn)高吞吐量的特定用途協(xié)處理器。例如,網(wǎng)絡(luò)服務(wù)處理器100可以包括一個加速單元106,該加速單元可以包括用于NFA處理的硬件加速的HNA處理器108和用于DFA處理的硬件加速的HFA處理器110。HNA處理器108和HFA處理器110可以是被配置成用于從執(zhí)行計(jì)算和內(nèi)存密集型圖樣匹配方法的沉重負(fù)擔(dān)分流網(wǎng)絡(luò)服務(wù)處理器100通用內(nèi)核(如以上披露的至少一個CPU內(nèi)核103)的協(xié)處理器。
[0104]網(wǎng)絡(luò)服務(wù)處理器100可以執(zhí)行圖樣搜索、正則表達(dá)式處理、內(nèi)容驗(yàn)證、變換和安全以加速數(shù)據(jù)包處理。正則表達(dá)式處理和圖樣搜索可以用于針對AV和IDS應(yīng)用以及可能需要字符串匹配的其他應(yīng)用執(zhí)行字符串匹配。網(wǎng)絡(luò)服務(wù)處理器100中的存儲器控制器(未示出)可以控制對操作性地耦合至網(wǎng)絡(luò)服務(wù)處理器100的存儲器104的訪問。存儲器104可以是內(nèi)部(即,片上)的或外部(即,芯片外)的、或以上的組合,并且可以被配置成用于存儲所接收到的數(shù)據(jù)包,如用于網(wǎng)絡(luò)服務(wù)處理器100進(jìn)行處理的數(shù)據(jù)包101a。存儲器104可以被配置成用于存儲編譯規(guī)則數(shù)據(jù),該規(guī)則數(shù)據(jù)用于DFA和NFA圖形表達(dá)式搜索中的查找和圖樣匹配??梢宰鳛槎祱D像112存儲編譯規(guī)則數(shù)據(jù),該二值圖像可以包括用于DFA和NFA兩者的編譯規(guī)則數(shù)據(jù)、或?qū)FA編譯規(guī)則數(shù)據(jù)與NFA編譯規(guī)則數(shù)據(jù)分開的多張二值圖像。
[0105]如以上所披露的,典型的內(nèi)容感知應(yīng)用處理可以使用或者DFA或者NFA來辨識所接收到的數(shù)據(jù)包的內(nèi)容中的圖樣。DFA和NFA兩者都是有限狀態(tài)機(jī),S卩,計(jì)算模型,計(jì)算模型中的每一個都包括狀態(tài)集合、開始狀態(tài)、輸入字母表(所有可能的符號集合)和轉(zhuǎn)換函數(shù)。計(jì)算在開始狀態(tài)下開始并且取決于轉(zhuǎn)換函數(shù)變化至新的狀態(tài)。
[0106]圖樣通常使用正則表達(dá)式來表達(dá),正則表達(dá)式包括基本元素,例如,像A-Z和0-9的正常文本字符、以及像*、~和I的元字符。正則表達(dá)式的基本元素是要被匹配的符號(單個字符)?;驹乜梢耘c允許連結(jié)、交替(I)、以及克萊尼(Kleene)星號(*)。用于連結(jié)的元字符可以用于從單個字符(或子字符串)創(chuàng)建多個字符匹配圖樣,而用于交替(I)的元字符可以用于創(chuàng)建可以匹配兩個或更多個子字符串中的任何一個的正則表達(dá)式。元字符Kleene星號(*)允許圖樣匹配任意次數(shù),包括不會出現(xiàn)之前的字符或字符串。
[0107]組合不同的運(yùn)算符和單個字符允許構(gòu)建復(fù)雜的表達(dá)式的子圖樣。例如,如(th (is I at) *)的子圖樣可以匹配多個字符串,如:th、this、that、thisis、thisat、that is或thatat。表達(dá)式的復(fù)雜圖樣的另一個示例可以是結(jié)合了允許列出有待搜索的字符列表的字符類結(jié)構(gòu)[…]的一個示例。例如,gr[ea]y尋找grey和gray兩者。其他復(fù)雜的子圖樣示例為那些可以使用破折號來指示字符范圍的示例,例如,[A-Z]、或可以與任一個字符匹配的”。圖樣的元素可以是基本元素或一個或多個基本元素結(jié)合一個或多個元字符的組入口 ο
[0108]對DFA或NFA狀態(tài)機(jī)的輸入通常包括來自輸入流(即,所接收到的數(shù)據(jù)包)的多個段,如(8位)字節(jié)的字符串,即,字母可以是單字節(jié)(一個字符或符號)。輸入流中的每個段(例如,字節(jié))可以產(chǎn)生從一種狀態(tài)到另一種狀態(tài)的轉(zhuǎn)換。DFA或NFA狀態(tài)機(jī)的狀態(tài)和轉(zhuǎn)換函數(shù)可以由節(jié)點(diǎn)圖形來表示。圖形中的每個節(jié)點(diǎn)可以表示一種狀態(tài),并且圖形中的圓弧(此處也被稱為轉(zhuǎn)換或轉(zhuǎn)換圓弧)可以表示狀態(tài)轉(zhuǎn)換。狀態(tài)機(jī)的當(dāng)前狀態(tài)可以由選擇圖形中的具體字節(jié)的節(jié)點(diǎn)標(biāo)識符來表示。
[0109]使用DFA來處理正則表達(dá)式并且發(fā)現(xiàn)字符的輸入流中由正則表達(dá)式描述的一個或多個圖樣的特征可以特征在于具有確定運(yùn)行時間性能。因?yàn)槊緿FA狀態(tài)僅存在一次狀態(tài)轉(zhuǎn)換,可以從輸入字符(或符號)、和DFA的當(dāng)前狀態(tài)確定DFA的下一個狀態(tài)。這樣,DFA的運(yùn)行時間性能被認(rèn)為是確定的并且行為可以從輸入被完全預(yù)測。然而,確定性的折衷為一個圖形,其中,節(jié)點(diǎn)的數(shù)量(或圖形大小)可以隨著圖樣的大小呈指數(shù)增長。
[0110]相比之下,NFA圖形的節(jié)點(diǎn)數(shù)量可以特征在于隨著圖樣的大小而呈線性增長。然而,使用NFA來處理正則表達(dá)式并且發(fā)現(xiàn)字符的輸入流中由正則表達(dá)式描述的一個或多個圖樣的特征可以在于具有非確定運(yùn)行時間性能。例如,給定輸入字符(或符號)和NFA的當(dāng)前狀態(tài),可能存在要轉(zhuǎn)換到其上的NFA的多于一個下一狀態(tài)。如此,NFA的下一狀態(tài)不能唯一地從NFA的輸入和當(dāng)前狀態(tài)來確定。從而,當(dāng)行為不能從輸入被完全預(yù)測時,NFA的運(yùn)行時間性能被認(rèn)為是非確定的。
[0111]圖2A至圖2G示出了 DFA “圖爆”的概念。圖2A、圖2B、和圖2C分別示出了圖樣“.*ar\n]”、“.*a[~\n] Γ\η] ”、“.*a[~\n] Γ\η] Γ\η]” 的 NFA 圖形,并且圖 2D、圖 2Ε 和圖2F分別示出了相同圖樣的DFA圖形。如圖2Α至圖2F中所示和圖2G的表所總結(jié)的,針對某些圖樣,當(dāng)相同圖樣的DFA可以呈指數(shù)方式增長時,NFA可以呈線性增長,從而引起圖爆。如所示,針對一個或多個給定圖樣,DFA狀態(tài)的數(shù)量可以大于NFA狀態(tài)的數(shù)量,典型地大約幾百以上或一千以上個狀態(tài)的量級。這是“圖爆”的示例,這是DFA的標(biāo)志特點(diǎn)。
[0112]根據(jù)在此披露的實(shí)施例,可以使用DFA、NFA、或其組合來執(zhí)行內(nèi)容搜索。根據(jù)一個實(shí)施例,運(yùn)行時間處理器、協(xié)處理器、或其組合可以在硬件中實(shí)現(xiàn)并且可以被配置成用于實(shí)現(xiàn)編譯器和行走器。
[0113]編譯器可以將圖樣或圖樣的輸入列表(也被稱為特征或規(guī)則)編譯成DFA、NFA、或其組合。DFA和NFA可以是二進(jìn)制數(shù)據(jù)結(jié)構(gòu),如DFA和NFA圖形和表。
[0114]行走器可以執(zhí)行運(yùn)行時間處理,S卩,用于標(biāo)識輸入流中的圖樣的存在、或?qū)D樣與輸入流中的內(nèi)容進(jìn)行匹配的動作。內(nèi)容可以是互聯(lián)網(wǎng)協(xié)議(IP)數(shù)據(jù)報的有效載荷部分、或輸入流中的任何其他合適的有效載荷。DFA或NFA圖形的運(yùn)行時間處理可以被稱為根據(jù)有效載荷行走DFA或NFA圖形以確定圖樣匹配。被配置成用于生成DFA、NFA、或其組合的處理器在此可以被稱為編譯器。被配置成用于使用所生成的DFA、NFA、或其組合來實(shí)施有效載荷的運(yùn)行時間處理的處理器在此可以被稱為行走器。根據(jù)在此披露的實(shí)施例,網(wǎng)絡(luò)服務(wù)處理器100可以被配置成用于在安全裝置102中實(shí)現(xiàn)編譯器和行走器。
[0115]圖3A為安全裝置102的另一個實(shí)施例的框圖,在其中可以實(shí)施在此披露的實(shí)施例。如參照圖1G所披露的,安全裝置102可以操作性地耦合至一個或多個網(wǎng)絡(luò)并且可以包括存儲器104和可以包括加速單元106的網(wǎng)絡(luò)服務(wù)處理器100。參照圖3A,網(wǎng)絡(luò)服務(wù)處理器100可以被配置成用于實(shí)現(xiàn)生成二值圖像112的編譯器306和使用二值圖像112的行走器320。例如,編譯器306可以生成二值圖像112,該二值圖像包括行走器320用來對所接收到的數(shù)據(jù)包101a(圖1G中所示)執(zhí)行圖樣匹配方法的編譯規(guī)則數(shù)據(jù)。根據(jù)在此披露的實(shí)施例,基于如以下進(jìn)一步描述的至少一種啟發(fā)法,編譯器306可以通過確定用于DFA、NFA的編譯規(guī)則數(shù)據(jù)來生成二值圖像112。編譯器306可以確定有利地適用于DFA和NFA的規(guī)則數(shù)據(jù)。
[0116]根據(jù)在此披露的實(shí)施例,編譯器306可以通過處理規(guī)則集310來生成二值圖像112,該規(guī)則集可以包括一個或多個正則表達(dá)式圖樣的集合304和可選限定符308。從規(guī)則集310,編譯器306可以使用從一個或多個正則表達(dá)式圖樣的所有中選擇的子圖樣來生成統(tǒng)一 DFA 312和用于一個或多個正則表達(dá)式圖樣304集合中的至少一個圖樣的至少一個NFA 314以供行走器320在運(yùn)行時間處理過程中使用、以及包括映射信息的元數(shù)據(jù)(未示出),該映射信息用于將行走器320在統(tǒng)一 DFA312的狀態(tài)(未示出)與至少一個NFA 314的狀態(tài)之間進(jìn)行轉(zhuǎn)換。
[0117]統(tǒng)一 DFA 312和至少一個NFA 314可以用逐數(shù)據(jù)結(jié)構(gòu)的方式表示為圖形、或?yàn)槿魏纹渌线m的形式,并且元數(shù)據(jù)中的映射可以用逐數(shù)據(jù)結(jié)構(gòu)的方式表示為一個或多個表、或?yàn)槿魏纹渌线m的形式。根據(jù)在此披露的實(shí)施例,如果從圖樣中選擇的子圖樣為該圖樣,則不為該圖樣生成NFA。根據(jù)在此披露的實(shí)施例,所生成的每個NFA可以用于集合中的具體圖樣,而可以基于來自集合中所有圖樣的所有子圖樣來生成統(tǒng)一 DFA。
[0118]基于對段進(jìn)行消耗(S卩,處理),如來自所接收到的數(shù)據(jù)包1la中的有效載荷的字節(jié),行走器320通過轉(zhuǎn)換統(tǒng)一 DFA 312和至少一個NFA 314的狀態(tài)根據(jù)有效載荷來行走統(tǒng)一 DFA 312和至少一個NFA。如此,行走器320使該有效載荷走過統(tǒng)一 DFA 312和可以是針對單個正則表達(dá)式圖樣生成的每圖樣NFA的至少一個NFA 314。
[0119]規(guī)則集310可以包括一個或多個正則表達(dá)式圖樣的集合304并且可以是Perl兼容正則表達(dá)式(PCRE)的形式或任何其他合適的形式。PCRE已經(jīng)成為安全和聯(lián)網(wǎng)應(yīng)用中正則表達(dá)式語法的事實(shí)標(biāo)準(zhǔn)。隨著更多應(yīng)用需要深度數(shù)據(jù)包檢查已經(jīng)興起或更多威脅在互聯(lián)網(wǎng)中變得普遍,用于標(biāo)識病毒/攻擊的相應(yīng)特征/圖樣或應(yīng)用也已經(jīng)變得更加復(fù)雜。例如,特征數(shù)據(jù)庫已經(jīng)從具有簡單字符串圖樣演進(jìn)到具有通配字符/范圍/字符類和高級PCRE特征的正則表達(dá)式(regex)圖樣。
[0120]如圖3A中所示,可選限定符308每個可以與正則表達(dá)式圖樣集合304中的一個圖樣相關(guān)聯(lián)。例如,可選限定符322可以與圖樣316相關(guān)聯(lián)??蛇x限定符308每個可以是指定所希望的自定義、高級PCRE特征選項(xiàng)、或適用于處理與限定符相關(guān)聯(lián)的圖樣的其他合適選項(xiàng)的一個或多個限定符。例如,限定符322可以指示是否希望用于圖樣316的高級PCRE特征選項(xiàng)中的起始偏移(即,圖樣的第一匹配字符的有效載荷中的在有效載荷中進(jìn)行匹配的位置)選項(xiàng)。
[0121]根據(jù)在此披露的實(shí)施例,編譯器306可以使用從一個或多個正則表達(dá)式圖樣的集合304中的所有圖樣中選擇的子圖樣302生成統(tǒng)一 DFA 312。編譯器306可以基于如以下進(jìn)一步描述的至少一種啟發(fā)法來從一個或多個正則表達(dá)式圖樣的集合304中的每個圖樣中選擇子圖樣302。編譯器306還可以為該集合中的至少一個圖樣316生成至少一個NFA314,可以基于所選擇的子圖樣318的長度是否是固定的或可變的和所選擇的子圖樣318在至少一個圖樣316內(nèi)的位置來確定至少一個圖樣316的用于生成至少一個NFA 314的部分(未示出)和至少一個NFA314的運(yùn)行時間處理(即,行走)的至少一個行走方向。編譯器306可以將統(tǒng)一 DFA 312和至少一個NFA 314存儲在至少一個存儲器104內(nèi)。
[0122]編譯器可以確定所選擇的潛在子圖樣的長度是否是固定的或可變的。例如,如“cdef”子圖樣的長度可以被確定為具有一個固定長度4,因?yàn)椤癱def”為一個字符串,而包括運(yùn)算符的復(fù)雜子圖樣可以被確定為具有一個可變長度。例如,如“a.*cdr\n] {O, 10}.*y”復(fù)雜子圖樣根據(jù)所選擇的圖樣可以具有“cdr\n] {O, 10}”,其可以具有一個2到12的可變長度。
[0123]根據(jù)在此披露的實(shí)施例,子圖樣選擇可以基于至少一種啟發(fā)法。子圖樣為來自圖樣的一個或多個連續(xù)元素的集合,其中,為了與來自有效載荷的字節(jié)或字符匹配,來自圖樣的每個元素可以用DFA或NFA圖形中的節(jié)點(diǎn)來表示。如上所述的元素可以是由節(jié)點(diǎn)表示的單個文本字符或由節(jié)點(diǎn)表示的字符類。編譯器306可以基于子圖樣是否很可能引起如以上參照圖2A至圖2G所描述的過多DFA圖爆來確定圖樣中的哪些子圖樣更適用于NFA。例如,從包括連續(xù)文本字符的子圖樣生成DFA將不會引起DFA圖爆,而如上所述的復(fù)雜子圖樣可以包括多個運(yùn)算符和多個字符,并且從而可能引起DFA圖爆。例如,包括通配符字符或重復(fù)多次的較大字符類(例如,Γ\η]*或Γ\η]{16})的子圖樣可以在DFA中產(chǎn)生過多狀態(tài),并且因此可以更有利地適用于NFA。如此,編譯器306在此可以被稱為“智能編譯器”。
[0124]如以上所披露的,從一個或多個正則表達(dá)式集合304中的每個圖樣中選擇子圖樣可以基于至少一種啟發(fā)法。根據(jù)一個實(shí)施例,該至少一種啟發(fā)法可以包括使所選擇的唯一子圖樣的數(shù)量和所選擇的每個子圖樣的長度最大化。例如,如“ab.*cdef.*mn”圖樣可以具有多個潛在子圖樣,如113.*”、“(3(^”、和“.*11111”。編譯器可以選擇“cdef”作為該圖樣的子圖樣,因?yàn)槠涫菆D樣“ab.*cdef.*mn”中不太可能引起DFA圖爆的最大子圖樣。然而,如果已經(jīng)為另一個圖樣選擇了子圖樣“cdef”,則編譯器可以為圖樣“ab.*cdef.*mn”選擇替代子圖樣??商娲兀幾g器可以用其他圖樣的另一個子圖樣替換子圖樣“cdef”,從而能夠?yàn)閳D樣“ab.*cdef.*mn”選擇圖樣“cdef”。
[0125]如此,編譯器306可以基于圖樣304中每個圖樣的可能子圖樣的上下文為圖樣304選擇子圖樣,從而能夠使所選擇的唯一子圖樣的數(shù)量和所選擇的每個子圖樣的長度最大化。如此,編譯器306可以從所選擇的子圖樣302生成統(tǒng)一 DFA 312,該統(tǒng)一 DFA通過增加至少一個NFA314中的圖樣匹配的概率來使至少一個NFA 314的圖樣匹配中的誤報(即,沒有匹配或部分匹配)數(shù)量最小化。
[0126]通過使子圖樣長度最大化,可以避免NFA處理中的誤報。NFA處理中的誤報會引起非確定運(yùn)行時間處理,并且因此會降低運(yùn)行時間性能。進(jìn)一步地,通過使所選擇的唯一子圖樣的數(shù)量最大化,鑒于統(tǒng)一 DFA中(來自圖樣)子圖樣的匹配,編譯器306能夠?qū)崿F(xiàn)統(tǒng)一DFA到從集合中的圖樣生成的至少一個NFA 314之間的1:1轉(zhuǎn)換。
[0127]例如,如果多個圖樣共享所選擇的子圖樣,則統(tǒng)一 DFA的行走器將需要轉(zhuǎn)換至多個至少一個NFA,因?yàn)槊總€至少一個NFA是每圖樣NFA,并且來自統(tǒng)一 DFA的子圖樣匹配意味著針對該多個圖樣中每個圖樣的部分匹配。如此,使唯一子圖樣的數(shù)量最大化減少了DFAiNFA 1:N轉(zhuǎn)換的數(shù)量,從而減少了行走器320進(jìn)行的運(yùn)行時間處理。
[0128]為了能夠使唯一子圖樣的數(shù)量最大化,編譯器302可以計(jì)算所選擇的子圖樣318的散列值326并將所計(jì)算的散列值326與從其中選擇子圖樣318的圖樣316的標(biāo)識符(未示出)相關(guān)聯(lián)地一起存儲。例如,針對集合304中的每個圖樣,編譯器306可以計(jì)算所選擇的子圖樣的散列值。所計(jì)算的散列值324可以按照表的方式、或以任何合適的方式存儲在至少一個存儲器104中。所使用的散列法可以是任何合適的散列法。編譯器可以將所計(jì)算的散列值與為該集合中的其他圖樣選擇的子圖樣的散列值列表進(jìn)行比較,以便確定所選擇的子圖樣是否是唯一的。
[0129]如果在該列表發(fā)現(xiàn)所計(jì)算的散列值,則編譯器可以確定是否用來自圖樣的另一個子圖樣來替換(i)所選擇的子圖樣或用從該集合中的其他圖樣中選擇的替代子圖樣替換(?)為該集合中的另一個圖樣選擇的子圖樣。可以基于與該列表中所計(jì)算的散列值的關(guān)聯(lián)性來標(biāo)識該集合中的其他圖樣。確定是否替換(i)或(ii)可以基于對考慮替換的子圖樣的長度進(jìn)行比較以便如上所述最大化所選擇的唯一子圖樣的長度。替換所選擇的子圖樣可以包括選擇為給定圖樣標(biāo)識的下一個最長子圖樣、或下一個優(yōu)先次序第二高的子圖樣。例如,可以基于引起DFA爆炸或所預(yù)期的DFA爆炸量級的可能性來確定潛在子圖樣的優(yōu)先次序。
[0130]根據(jù)在此披露的實(shí)施例,至少一種啟發(fā)法可以包括標(biāo)識每個圖樣的子圖樣和如果給定子圖樣具有一個小于最小閾值的長度則忽視每個圖樣的所標(biāo)識的子圖樣中的給定子圖樣。例如,為了減少至少一個NFA中的誤報,編譯器可以忽視具有小于最小閾值的長度的子圖樣,因?yàn)榇祟愖訄D樣會引起至少一個NFA中的誤報的更高概率。
[0131]該至少一種啟發(fā)法可以包括訪問子圖樣的與使用指示符的歷史頻率相關(guān)聯(lián)的知識庫(未示出)和如果所訪問的知識庫中針對給定子圖樣的使用指示符的歷史頻率大于等于頻率使用閾值則忽視每個圖樣的所標(biāo)識的子圖樣中的給定圖樣。例如,特定用途或協(xié)議特定子圖樣可能具有高使用頻率,如針對超文本傳輸協(xié)議(HTTP)有效載荷、“回車換行”、或流量清零(如來自二進(jìn)制文件的多個連續(xù)O)、或任何其他頻繁使用的子圖樣。
[0132]該至少一種啟發(fā)法可以包括標(biāo)識每個圖樣的和用于每個圖樣的子圖樣、使通過基于具有所標(biāo)識的子圖樣的最大數(shù)量的連續(xù)文本字符的給定子圖樣和基于為一個或多個正則表達(dá)式集合選擇的所有子圖樣之間為唯一的給定子圖樣選擇所標(biāo)識的子圖樣中的給定子圖樣而選擇的子圖樣中的連續(xù)文本字符的數(shù)量最大化。如以上所披露的,使所選擇的子圖樣的長度最大化可以能夠?qū)崿F(xiàn)至少一個NFA中匹配的更高概率。
[0133]該至少一種啟發(fā)法可以包括基于給定子圖樣中的每個子圖樣的子圖樣類型和給定子圖樣的長度來確定每個圖樣的給定子圖樣的優(yōu)先次序。子圖樣類型可以是純文本、交替、單字符重復(fù)、或多字符重復(fù),并且子圖樣類型的從最高到最低的優(yōu)先次序可以是純文本、交替、單字符重復(fù)、以及多字符重復(fù)。如此,可以將為具有至少最小長度閾值長度的文本字符串的子圖樣的優(yōu)先次序確定為比可變長度的復(fù)雜子圖樣更高。
[0134]編譯器306可以使較長長度的子圖樣的優(yōu)先次序比較短長度的另一個子圖樣高。編譯器306可以基于確定優(yōu)先次序來選擇唯一子圖樣作為所選擇的子圖樣。如上所述,所選擇的唯一子圖樣可以具有至少最小長度閾值的長度。
[0135]如果給定子圖樣中沒有是唯一的并且具有一個至少最小長度閾值的長度,則編譯器306可以基于確定優(yōu)先次序來選擇非唯一子圖樣作為所選擇的子圖樣。如此,編譯器306可以從圖樣中選擇一個是從另一個圖樣中選擇的子圖樣的副本的子圖樣而不是選擇具有一個小于最小閾值的長度的子圖樣。為了方便子圖樣的最終確定,編譯器306可以多次忽略圖樣并且按長度對可能的子圖樣進(jìn)行分類。如此,可以在針對一個或多個正則表達(dá)式的集合304中的其他圖樣的子圖樣選擇的上下文中執(zhí)行針對一個或多個正則表達(dá)式的集合304中的給定圖樣的編譯器子圖樣選擇。
[0136]如上所述,限定符322可以指示希望報告起始偏移。然而,起始偏移可能不是容易可辨別的。例如,鑒于如“axycamb”有效載荷,因?yàn)閮蓚€圖樣可以匹配,“axycamb”和“amb”,在如“a.*b”或“a.*d”有效載荷匹配圖樣中發(fā)現(xiàn)起始偏移會是困難的。如此,可能需要按照潛在起始偏移跟蹤有效載荷中的“a”的兩個實(shí)例的偏移。根據(jù)在此披露的實(shí)施例,不需要跟蹤潛在起始偏移,因?yàn)橹钡酱_定已經(jīng)在有效載荷中發(fā)現(xiàn)整個圖樣的匹配才確定起始偏移。確定可以利用匹配來發(fā)現(xiàn)整個圖樣的匹配由統(tǒng)一 DFA、至少一個NFA、或其組合而產(chǎn)生。
[0137]根據(jù)在此披露的實(shí)施例,如果所接收到的數(shù)據(jù)包101中的有效載荷包括與從圖樣316中選擇的子圖樣318匹配的內(nèi)容,則行走器可以轉(zhuǎn)換以行走圖樣318的至少一個NFA。行走器320可以報告所選擇的子圖樣318的匹配和對匹配子圖樣的最后一個字符的所接收到的數(shù)據(jù)包中的位置進(jìn)行標(biāo)識的偏移,作為有效載荷中子圖樣的結(jié)束偏移。如果子圖樣是圖樣的子集,則子圖樣匹配可以是圖樣的部分匹配。如此,行走器320可以通過為圖樣行走至少一個NFA來繼續(xù)搜索有效載荷中的圖樣的剩余部分,以便確定圖樣的最終匹配。應(yīng)理解到,圖樣可以遍歷所接收到的數(shù)據(jù)包1la中的一個或多個有效載荷。
[0138]圖3B為可以在至少一個處理器中實(shí)施的方法的示例實(shí)施例的流程圖(350),該處理器操作性地耦合至安全裝置內(nèi)的至少一個存儲器,該安全裝置操作性地耦合至網(wǎng)絡(luò)。該方法可以開始(352)并基于至少一種啟發(fā)法來從一個或多個正則表達(dá)式圖樣的集合中的每個圖樣中選擇子圖樣(354)。該方法可以使用從該集合中的所有圖樣中選擇的子圖樣來生成統(tǒng)一確定有限自動機(jī)(DFA) (356)。該方法可以為該集合中的至少一個圖樣生成至少一個非確定有限自動機(jī)(NFA),基于所選擇的子圖樣的長度是否是固定的或可變的和所選擇的子圖樣在至少一個圖樣內(nèi)的位置來確定至少一個圖樣的用于生成至少一個NFA的部分和至少一個NFA的運(yùn)行時間處理的至少一個行走方向(358)。該方法可以將統(tǒng)一 DFA和所生成的至少一個NFA存儲在至少一個存儲器內(nèi)(360)。之后,在該示例實(shí)施例中,該方法結(jié)束(362)ο
[0139]如以上所披露的,編譯器306可以生成統(tǒng)一 DFA 312和至少一個NFA 314以使行走器320能夠搜索所接收到的數(shù)據(jù)包1la中的一個或多個正則表達(dá)式圖樣304的匹配。編譯器306可以基于至少一種啟發(fā)法來從一個或多個正則表達(dá)式圖樣的集合304中的每個圖樣中選擇子圖樣??梢允褂脧募?04中的所有圖樣中選擇的子圖樣302來生成統(tǒng)一 DFA312。編譯器306可以為集合304中的至少一個圖樣316生成至少一個NFA 314。如此,編譯器306可以被配置成用于將規(guī)則集310編譯成對來自規(guī)則集310的可能最適用于DFA或NFA處理的部分進(jìn)行標(biāo)識的二值圖像112。因此,二值圖像112可以包括至少兩個部分,其中一個用于DFA處理的第一部分和一個用于NFA處理的第二部分,如統(tǒng)一 DFA 312和至少一個 NFA 314。
[0140]如以上所披露的,二值圖像112可以包括用于DFA和NFA兩者的編譯規(guī)則數(shù)據(jù),或可以是將DFA編譯規(guī)則數(shù)據(jù)與NFA編譯規(guī)則數(shù)據(jù)分開的多張二值圖像。例如,NFA編譯規(guī)則可以與DFA編譯規(guī)則分開并且存儲在操作性地耦合至至少一個HNA處理器108的圖形存儲器內(nèi)。存儲器104可以是一個可以是多個存儲器的圖形存儲器,如以上參照圖1D和圖1E所披露的超級集群圖形存儲器156a、HNA片上圖形存儲器156b、以及HNA芯片外圖形存儲器 156c。
[0141]如以上所披露的,HNA處理器108和HFA處理器110可以是被配置成用于從執(zhí)行計(jì)算和內(nèi)存密集型圖樣匹配方法的沉重負(fù)擔(dān)分流網(wǎng)絡(luò)服務(wù)處理器100通用內(nèi)核(如以上披露的至少一個CPU內(nèi)核103)的協(xié)處理器。如此,HFA處理器110可以被配置成用于實(shí)施行走器320的與DFA處理相關(guān)的功能性,并且至少一個HNA處理器108可以被配置成用于實(shí)施行走器320的與NFA處理相關(guān)的功能性。如以上所披露的,至少一個HNA處理器108可以包括多個超級集群。每個超級集群可以包括多個集群。該多個集群中的每個集群可以包括多個HNA處理單元(HPU)。
[0142]圖4A為HNA處理單元(HPU) 425的示例實(shí)施例的框圖。根據(jù)在此披露的實(shí)施例,可以從HNA片上指令隊(duì)列154給HPU 425分配至少一個HNA指令153。至少一個HNA指令153可以包括至少一項(xiàng)HNA工作(未示出),該HNA工作可以基于圖1G的HFA處理器110針對圖3A的子圖樣302中的在輸入流中匹配的給定子圖樣所標(biāo)識的部分匹配結(jié)果來確定。
[0143]根據(jù)該示例實(shí)施例,HPU 425可以包括HNA處理內(nèi)核408。HNA處理內(nèi)核408可以操作性地耦合至以下參照圖7B、圖12、以及圖13A至圖13D進(jìn)一步披露的節(jié)點(diǎn)高速緩存451。HNA處理內(nèi)核408可以操作性地耦合至字符類高速緩存454、有效載荷緩沖區(qū)462、棧頂寄存器470、和運(yùn)行堆棧460、以及可以被配置成為統(tǒng)一存儲器的匹配結(jié)果緩沖區(qū)466和保存緩沖區(qū)464。HNA處理內(nèi)核408可以被配置成用于行走至少一個每圖樣NFA,其中,有效載荷段存儲在有效載荷緩沖區(qū)462內(nèi),以確定至少一個正則表達(dá)式圖樣的匹配。如此,多個超級集群121a和121b的多個集群123a-d的多個HPU 125a_f中的每個HPU可以進(jìn)一步包括HNA處理內(nèi)核408,該處理內(nèi)核操作性地耦合至節(jié)點(diǎn)高速緩存451、字符類高速緩存454、有效載荷緩沖區(qū)462、棧頂寄存器470、和運(yùn)行堆棧460、以及可以被配置成為統(tǒng)一存儲器的匹配結(jié)果緩沖區(qū)466和保存緩沖區(qū)464。運(yùn)行堆棧460、保存緩沖區(qū)464和結(jié)果寫入緩沖區(qū)466可以包括ECC保護(hù)(單個錯誤校正/雙錯誤檢測)。
[0144]該多個超級集群121a和121b的該多個集群123a_d的該多個HPU 125a_f中的每個HPU可以包括節(jié)點(diǎn)高速緩存451,該節(jié)點(diǎn)高速緩存可以被配置成用于高速緩存來自如以下參照圖7B所披露的超級集群圖形存儲器156a、HNA片上圖形存儲器156b、或HNA芯片外圖形存儲器156c的一個或多個節(jié)點(diǎn)。該多個超級集群121a和121b的該多個集群123a_d的該多個HPU 125a-f中的每個HPU可以進(jìn)一步包括字符類高速緩存454,該字符類高速緩存可以被配置成用于高速緩存來自超級集群字符類存儲器135的一個或多個正則表達(dá)式圖樣字符類定義。該多個超級集群121a和121b的該多個集群123a-d的該多個HPU 125a-f中的每個HPU可以進(jìn)一步包括有效載荷緩沖區(qū)462,該有效載荷緩沖區(qū)可以被配置成用于存儲來自HNA數(shù)據(jù)包數(shù)據(jù)存儲器165的給定有效載荷。來自HNA片上指令隊(duì)列154的至少一個HNA指令153可以包括一個用于HNA數(shù)據(jù)包數(shù)據(jù)存儲器165中的給定有效載荷中的位置的標(biāo)識符。該多個超級集群121a和121b的該多個集群123a-d的該多個HPU 125a_f?中的每個HPU可以進(jìn)一步包括棧頂寄存器470,該棧頂寄存器可以被配置成用于存儲單項(xiàng)HNA工作。運(yùn)行堆棧460可以被配置成用于存儲多項(xiàng)HNA工作,并且該統(tǒng)一存儲器可以被配置成用于存儲保存堆棧464的第一內(nèi)容和匹配結(jié)果緩沖區(qū)466的第二內(nèi)容。該第一內(nèi)容可以包括運(yùn)行堆棧460中所存儲的一項(xiàng)或多項(xiàng)HNA工作,并且該第二內(nèi)容可以包括一個或多個最終匹配結(jié)果。HNA工作在此還可以可互換地被稱為上下文或未探宄的上下文。
[0145]該至少一項(xiàng)HNA工作中的給定HNA工作可以指示至少一個NFA 314中的給定NFA、該給定NFA的至少一個給定節(jié)點(diǎn)、給定有效載荷中的至少一個給定偏移、以及至少一個行走方向,每個至少一個行走方向與該至少一個給定節(jié)點(diǎn)中的一個節(jié)點(diǎn)相對應(yīng)。每項(xiàng)至少一項(xiàng)HNA工作可以包括由HFA處理器110進(jìn)行的處理的結(jié)果,從而使至少一個HNA處理器108能夠?qū)⒂糜谥辽僖粋€圖樣304中的給定圖樣的給定NFA中的與給定子圖樣的匹配提前。如此,每項(xiàng)HNA工作表示HFA協(xié)處理器110所確定的部分匹配結(jié)果,以便通過至少一個HNA處理器108經(jīng)由所分配的HPU 425將給定圖樣的匹配提前。所分配的HPU可以包括HNA處理內(nèi)核408。
[0146]HNA處理內(nèi)核408可以對至少一個HNA指令153進(jìn)行以下處理:讀取至少一個指針(未示出)、或其中存儲的其他合適的指令信息。該至少一個指針可以包括一個指向至少一個系統(tǒng)存儲器151的輸入堆棧分區(qū)161內(nèi)的輸入緩沖區(qū)458的輸入緩沖區(qū)指針(未不出)。至少一個HNA指令153還可以包括一個指向至少一個系統(tǒng)存儲器151的HNA數(shù)據(jù)包數(shù)據(jù)存儲器165中所存儲的有效載荷(未示出)的有效載荷指針(未示出),并且可以將該有效載荷提取到HPU 425的有效載荷緩沖區(qū)462。至少一個HNA指令153可以進(jìn)一步包括一個指向HNA芯片外結(jié)果緩沖區(qū)分區(qū)171中的給定結(jié)果緩沖區(qū)的結(jié)果緩沖區(qū)指針(未示出)以使HPU 425的HNA處理內(nèi)核408能夠傳輸HPU 425的匹配結(jié)果緩沖區(qū)466中所存儲的至少一個匹配結(jié)果條目。至少一個HNA指令153可以進(jìn)一步包括一個指向至少一個系統(tǒng)存儲器151的HNA芯片外保存緩沖區(qū)分區(qū)171中的給定保存緩沖區(qū)的保存緩沖區(qū)指針(未示出)以使HNA處理內(nèi)核408能夠從HPU 425的保存緩沖區(qū)464傳輸至少一個保存緩沖區(qū)條目。至少一個HNA指令153可以進(jìn)一步包括一個指向至少一個系統(tǒng)存儲器151的HNA芯片外運(yùn)行堆棧分區(qū)167的給定運(yùn)行堆棧的運(yùn)行堆棧指針(未示出)以使HNA處理內(nèi)核408能夠從HPU 425的運(yùn)行堆棧460傳輸至少一個運(yùn)行堆棧條目或?qū)⑵鋫鬏斨猎撨\(yùn)行堆棧。
[0147]盡管輸入緩沖區(qū)458、運(yùn)行堆棧460、和保存緩沖區(qū)464可能展現(xiàn)或可能不展現(xiàn)出堆棧的后進(jìn)先出(LIFO)特性,但輸入緩沖區(qū)458、運(yùn)行堆棧460、和保存緩沖區(qū)464在此可以分別被稱為輸入堆棧、運(yùn)行堆棧、和保存堆棧。輸入緩沖區(qū)458、運(yùn)行堆棧460、和保存緩沖區(qū)464可以位于同一或不同物理緩沖區(qū)內(nèi)。如果位于同一物理緩沖區(qū)內(nèi),輸入堆棧458、運(yùn)行堆棧460、和保存堆棧464的條目基于條目的字段設(shè)置可以不同,或以任何其他合適的方式而不同。輸入堆棧458和運(yùn)行堆棧460可以位于可以是片上的同一物理緩沖區(qū)內(nèi),并且保存堆棧464可以位于可以是芯片外的另一個物理緩沖區(qū)內(nèi)。
[0148]至少一個HNA指令153的至少一項(xiàng)HNA工作可以存儲在輸入堆棧458內(nèi)以便由HNA處理內(nèi)核408進(jìn)行處理。該至少一個HNA指令的該至少一項(xiàng)HNA工作每個可以屬于同一給定有效載荷,如被傳輸至有效載荷緩沖區(qū)462的被HFA處理器110處理的有效載荷。
[0149]HNA處理內(nèi)核408可以被配置成用于基于輸入緩沖區(qū)指針從輸入緩沖區(qū)458加載(即,提取或取回)至少一項(xiàng)HNA工作。HNA處理內(nèi)核408可以將該至少一項(xiàng)HNA工作推送(即,存儲)至運(yùn)行堆棧460。HNA處理內(nèi)核408可以從運(yùn)行堆棧460彈出(即,讀取、提取、加載等)給定HNA工作并對該給定HNA工作進(jìn)行處理。每項(xiàng)至少一項(xiàng)HNA工作可以包括對有效載荷緩沖區(qū)462中所存儲的有效載荷的段(未示出)的有效載荷偏移、和指向可以是至少一個有限自動機(jī)(如圖3A的至少一個NFA 314)中的至少一個有限自動機(jī)的圖形(未示出)的指針。
[0150]HNA處理內(nèi)核408可以加載(S卩,提取)可能將節(jié)點(diǎn)分布在超級集群存儲器156a、HNA芯上圖形存儲器156b、或HNA芯片外圖形存儲器156c中的任何一個或多個之中的圖形,并且可以開始使用與有效載荷緩沖區(qū)462中的有效載荷的對應(yīng)有效載荷偏移相對應(yīng)的有效載荷段來遍歷所提取的節(jié)點(diǎn)。圖形的部分匹配路徑可以包括圖形的使有效載荷的連續(xù)段與用于生成該圖形的給定圖樣匹配的至少兩個節(jié)點(diǎn)。該部分匹配路徑在此可以被稱為線程或活動線程。
[0151]隨著HNA處理內(nèi)核408可以使用來自有效載荷緩沖區(qū)462的有效載荷段來對圖形進(jìn)行處理,將條目推送和彈出至運(yùn)行堆棧460或?qū)⑵鋸脑撨\(yùn)行堆棧推出或彈出來保存和恢復(fù)其在圖形中的位置。例如,如果行走過的節(jié)點(diǎn)為有待行走的下一個節(jié)點(diǎn)呈現(xiàn)多個選項(xiàng),則HNA處理內(nèi)核408可能需要將其位置保存在圖形內(nèi)。例如,HNA處理內(nèi)核408可以行走呈現(xiàn)多個處理路徑選項(xiàng)的節(jié)點(diǎn),如以圖形表示的岔路。根據(jù)在此披露的實(shí)施例,DFA或NFA的節(jié)點(diǎn)可以與節(jié)點(diǎn)類型相關(guān)聯(lián)。與分離類型相關(guān)聯(lián)的節(jié)點(diǎn)可以呈現(xiàn)多個處理路徑選項(xiàng)。以下參照圖5A進(jìn)一步披露了分離節(jié)點(diǎn)類型。
[0152]根據(jù)在此披露的實(shí)施例,HNA處理內(nèi)核408可以被配置成用于選擇該多條處理路徑中的給定路徑,并將條目推送至運(yùn)行堆棧460,基于確定沿著所選擇的路徑行走過的節(jié)點(diǎn)處的失配(即,否定)結(jié)果,該運(yùn)行堆??梢允笻NA處理內(nèi)核408能夠沿著該多條處理路徑中的未選擇的路徑返回和繼續(xù)進(jìn)行。如此,推送運(yùn)行堆棧460上的條目可以保存圖形中表示未探宄的上下文的位置。未探宄的上下文可以指示圖形的給定節(jié)點(diǎn)和相應(yīng)的有效載荷偏移以使HNA處理內(nèi)核408能夠返回至給定節(jié)點(diǎn)并根據(jù)來自有效載荷緩沖區(qū)462的有效載荷的給定段來行走給定節(jié)點(diǎn),因?yàn)樵摻o定段可以位于有效載荷中的相應(yīng)有效載荷偏移處。如此,運(yùn)行堆棧460可以用于使HNA處理內(nèi)核408能夠記住和稍后行走圖形的未探宄的路徑。推送或存儲指示給定節(jié)點(diǎn)和給定有效載荷中的相應(yīng)偏移的條目在此可以被稱為存儲未探宄的上下文、線程或非活動線程。彈出、提取、或加載指示給定節(jié)點(diǎn)和給定有效載荷中的相應(yīng)偏移的條目以便根據(jù)位于給定有效載荷中的相應(yīng)偏移處的段來行走給定節(jié)點(diǎn)在此可以被稱為激活線程。丟棄指示給定節(jié)點(diǎn)和給定有效載荷中的相應(yīng)偏移的條目在此可以被稱為清空條目或止用線程。
[0153]當(dāng)以圖形形式行走有效載荷段時,在到達(dá)有效載荷緩沖區(qū)462中的有效載荷的邊界的情況下,保存緩沖區(qū)464可以使HNA處理內(nèi)核408能夠?qū)⑵湮恢帽4嬖趫D形中。例如,HNA處理內(nèi)核408可以確定有效載荷緩沖區(qū)462中的有效載荷或有效載荷的一部分與給定圖樣部分匹配并且確定有效載荷的當(dāng)前有效載荷偏移為有效載荷的結(jié)束偏移。如此,HNA處理內(nèi)核408可以確定僅發(fā)現(xiàn)了給定圖樣的部分匹配并且對整個有效載荷進(jìn)行了處理。如此,HNA處理內(nèi)核408可以將運(yùn)行堆棧460內(nèi)容保存到保存緩沖區(qū)464以繼續(xù)行走與所處理的有效載荷相同的流相對應(yīng)的下一個有效載荷。保存緩沖區(qū)464可以被配置成用于存儲運(yùn)行堆棧460的至少一個運(yùn)行堆棧條目,從而在處理整個有效載荷的情況下,反映運(yùn)行堆棧460的運(yùn)行狀態(tài)。
[0154]基于發(fā)現(xiàn)圖樣的最終(即,整個或完整)匹配,HNA可以彈出和丟棄運(yùn)行堆棧460中的與當(dāng)前HNA工作(例如,從輸入緩沖區(qū)加載的HNA)相關(guān)聯(lián)的條目并將匹配結(jié)果(未示出)保存到匹配結(jié)果緩沖區(qū)466。可替代地,當(dāng)可能對所有可能的匹配路徑感興趣時,HNA處理內(nèi)核408可以繼續(xù)處理運(yùn)行堆棧460的與當(dāng)前HNA工作相關(guān)聯(lián)的條目。
[0155]匹配結(jié)果可以包括與確定圖樣的最終匹配所在的節(jié)點(diǎn)相關(guān)聯(lián)的節(jié)點(diǎn)地址。確定圖樣的最終匹配所在的節(jié)點(diǎn)在此可以被稱為標(biāo)記節(jié)點(diǎn)。節(jié)點(diǎn)地址、或圖形中最終匹配位置的其他標(biāo)識符、匹配圖樣的標(biāo)識符、匹配圖樣的長度、或任何其他合適的匹配結(jié)果或以上的組合可以被包括在匹配結(jié)果內(nèi)。
[0156]基于處理與當(dāng)前HNA工作相關(guān)聯(lián)的所有運(yùn)行堆棧條目,HNA處理內(nèi)核408可以從運(yùn)行堆棧460加載之前已經(jīng)從輸入緩沖區(qū)458加載過的下一個HNA工作,因?yàn)镠NA處理內(nèi)核408可以被配置成用于順序地處理至少一個HNA指令153的HNA工作。如此,HNA處理內(nèi)核408可以從超級集群圖形存儲器156a、HNA片上圖形存儲器156b、或HNA芯片外圖形存儲器156c提取下一個圖形(未示出)和根據(jù)來自下一項(xiàng)HNA工作所標(biāo)識的下一個有效載荷的一個或多個有效載荷段來行走下一個圖形,并且繼續(xù)處理附加HNA工作,直到運(yùn)行堆棧460為空。
[0157]基于當(dāng)根據(jù)有效載荷行走圖形時發(fā)現(xiàn)有效載荷的失配,HNA處理內(nèi)核408可以從運(yùn)行堆棧460彈出與當(dāng)前HNA工作相關(guān)聯(lián)的條目并基于所彈出的條目的內(nèi)容根據(jù)下一個有效載荷的下一段來行走下一個節(jié)點(diǎn)。如果運(yùn)行堆棧460不包括與當(dāng)前HNA工作相關(guān)聯(lián)的條目,則HNA處理內(nèi)核408可以完成當(dāng)前HNA工作并且可以從運(yùn)行堆棧460加載之前已經(jīng)從輸入緩沖區(qū)458加載過的下一項(xiàng)HNA工作。如此,HNA處理內(nèi)核408可以被配置成用于基于所加載的下一項(xiàng)HNA工作來行走另外下一個圖形,并繼續(xù)處理附加工作,直到運(yùn)行堆棧460為空。
[0158]在此披露的實(shí)施例可以使用棧頂寄存器470來提高匹配性能。棧頂寄存器470在此可以被可互換地稱為補(bǔ)充存儲器470、T0S寄存器470或TOS 470。棧頂寄存器470可以是操作性地耦合至一個第二存儲器的一個第一存儲器,如運(yùn)行堆棧460。HPU 425的HNA處理內(nèi)核408可以操作性地耦合至棧頂寄存器470和運(yùn)行堆棧460。棧頂寄存器470可以被配置成用于存儲至少一個有限自動機(jī)中的給定有限自動機(jī)的多個節(jié)點(diǎn)的可以被HNA處理內(nèi)核408推送用于行走給定節(jié)點(diǎn)的HNA工作(即,上下文),如堆棧條目(也被可互換地稱為上下文或未探宄的上下文)。例如,可以推送或彈出上下文用于行走給定節(jié)點(diǎn)。該上下文可以對從網(wǎng)絡(luò)接收到的輸入流的有效載荷中的段的給定節(jié)點(diǎn)和偏移進(jìn)行標(biāo)識。該上下文可以使HNA處理內(nèi)核408能夠根據(jù)該偏移標(biāo)識的段行走通過該上下文標(biāo)識的給定節(jié)點(diǎn)。
[0159]棧頂寄存器470可以與可以包括有效性狀態(tài)信息(也被可互換地稱為有效性指示符)的上下文狀態(tài)信息相關(guān)聯(lián)。有效性狀態(tài)可以為棧頂寄存器470指示有效或無效狀態(tài)。該有效狀態(tài)可以指示棧頂寄存器470存儲了未決上下文。未決上下文可以是所存儲的還沒有被HNA處理內(nèi)核408處理的上下文。
[0160]無效狀態(tài)可以指示棧頂寄存器470沒有存儲未決上下文,例如,存儲到棧頂寄存器470的條目已經(jīng)被HNA處理內(nèi)核408彈出以根據(jù)段來行走給定節(jié)點(diǎn)或以另外的方式被HNA處理內(nèi)核408丟棄。如此,HNA處理內(nèi)核408可以使用上下文狀態(tài)信息來辨別棧頂寄存器470是否具有未決上下文。
[0161]根據(jù)在此披露的實(shí)施例,有效性狀態(tài)可以被實(shí)現(xiàn)為棧頂寄存器470的位、棧頂寄存器470的多位字段、與棧頂寄存器470分開存儲的指示符、或以傳達(dá)關(guān)于棧頂寄存器470寄存器是否存儲未決上下文的狀態(tài)的任何其他合適的方式來實(shí)現(xiàn)。
[0162]HNA處理內(nèi)核408使用運(yùn)行堆棧460來保存上下文,如行走NFA圖形的節(jié)點(diǎn)過程中NFA圖形的節(jié)點(diǎn)的狀態(tài)。TOS 470寄存器的訪問(g卩,讀取/寫入)可以比運(yùn)行堆棧460快多倍。與ECC保護(hù)存儲器相比,針對該存儲器,推送或彈出操作可以進(jìn)行三個、四個、或更多個時鐘周期,如果在TOS 470寄存器上執(zhí)行,則推送或彈出操作可以進(jìn)行一個時鐘周期。TOS 470寄存器可以將最近推送的堆棧條目與早前推送的可以通過TOS 470寄存器被推送至運(yùn)行堆棧460的條目保持分開。將最近推送的條目保持在TOS 470寄存器中可以提高行走性能,因?yàn)樽罱扑偷臈l目可能是最頻繁訪問的條目,即,在推送另一個條目之前很可能彈出最近推送的條目。
[0163]存儲上下文(如通過推送一個第一上下文)可以包括基于與TOS 470寄存器相關(guān)聯(lián)的上下文狀態(tài)信息存儲訪問TOS 470寄存器而不訪問運(yùn)行堆棧460或訪問TOS 470寄存器和運(yùn)行堆棧460的存儲確定。訪問TOS 470寄存器而不訪問運(yùn)行堆棧460的存儲確定可以基于對T0S470寄存器的無效狀態(tài)進(jìn)行指示的上下文狀態(tài)信息。訪問TOS 470寄存器和運(yùn)行堆棧460的存儲確定可以基于對TOS 470寄存器的有效狀態(tài)進(jìn)行指示的上下文狀態(tài)信息。
[0164]TOS堆棧470可以配置有用于存儲單個上下文(S卩,HNA工作)的單個條目,并且運(yùn)行堆棧460可以配置有用于存儲多個上下文的多個條目。在HNA處理內(nèi)核408彈出上下文(即,堆棧條目)例如以取回所存儲的上下文的情況下,關(guān)于上下文狀態(tài)信息是否指示TOS 470寄存器的有效或無效狀態(tài),可以進(jìn)行檢查。如果上下文狀態(tài)信息指示有效狀態(tài),可以從TOS 470寄存器彈出478最近推送的上下文,并且當(dāng)TOS 470寄存器不再存儲未決上下文時,下文狀態(tài)信息可以被更新成用于指示TOS 470寄存器的當(dāng)前無效狀態(tài)。
[0165]然而,如果檢查確定上下文狀態(tài)信息指示無效狀態(tài),則反而可以從運(yùn)行堆棧460彈出480(即,取回)未決上下文。如此,基于上下文狀態(tài)信息的與TOS 470寄存器相關(guān)聯(lián)的無效狀態(tài),可以從運(yùn)行堆棧460取回未決上下文,并且不將運(yùn)行堆棧460所存儲的未決上下文寫入到TOS 470寄存器。
[0166]圖4B為根據(jù)在此披露的實(shí)施例的可以如通過推送或彈出堆棧條目而被存儲或取回的上下文4401(即,HNA工作)的示例實(shí)施例的框圖4400。上下文4401可以包括多個字段4402-4418。該多個字段可以包括可以基于多種節(jié)點(diǎn)類型中的一種節(jié)點(diǎn)類型的上下文條目類型字段4402。上下文條目類型字段4402可以表示該多個字段4402-4418中的哪些字段可以針對節(jié)點(diǎn)類型而相關(guān)。
[0167]上下文4401可以進(jìn)一步包括可以基于上下文條目類型字段4402而相關(guān)的匹配類型字段4404。匹配類型字段4404可以基于節(jié)點(diǎn)類型并且可以用于確定給定節(jié)點(diǎn)是否被配置成與從網(wǎng)絡(luò)接收到的數(shù)據(jù)流中的給定元素的單個實(shí)例或多個連續(xù)實(shí)例匹配。
[0168]上下文4401可以進(jìn)一步包括無論上下文條目類型字段4402如何都可以相關(guān)的并且可以對用于在給定節(jié)點(diǎn)處進(jìn)行匹配的給定元素進(jìn)行標(biāo)識的元素字段4408。
[0169]上下文4401可以進(jìn)一步包括無論上下文條目類型字段如何都可以相關(guān)的并且可以對與給定節(jié)點(diǎn)相關(guān)聯(lián)的下一個節(jié)點(diǎn)進(jìn)行標(biāo)識的下一個節(jié)點(diǎn)地址字段4410。例如,基于給定節(jié)點(diǎn)處的肯定匹配,可以通過下一個節(jié)點(diǎn)地址字段4410來標(biāo)識用于行走下一個段的下一個節(jié)點(diǎn)。
[0170]上下文4401可以進(jìn)一步包括可以基于上下文條目類型字段4402而相關(guān)的計(jì)數(shù)字段4412。計(jì)數(shù)字段4412可以標(biāo)識剩余的用于與元素字段4408在給定節(jié)點(diǎn)處所標(biāo)識的給定元素進(jìn)行匹配的連續(xù)實(shí)例的數(shù)量的計(jì)數(shù)值。
[0171]上下文4401可以進(jìn)一步包括無論上下文條目類型字段4402如何都可以相關(guān)的并且在輸入流中檢測到至少一個正則表達(dá)式的完整匹配的情況下可以對是否丟棄上下文4401或行走下一個節(jié)點(diǎn)地址字段4410所標(biāo)識的下一個節(jié)點(diǎn)進(jìn)行標(biāo)識的丟棄未探宄的上下文(DUP)字段 4414。
[0172]上下文4401可以進(jìn)一步包括無論上下文條目類型字段4402如何都可以相關(guān)的并且可以對逆向或正向行走方向進(jìn)行標(biāo)識的逆向行走方向字段4416。
[0173]上下文4401可以進(jìn)一步包括無論上下文條目類型字段4402如何都可以相關(guān)的并且可以對輸入流中的有效載荷段的用于與具體元素進(jìn)行匹配的偏移進(jìn)行標(biāo)識的偏移字段4418。可以基于上下文條目類型字段4402標(biāo)識該具體元素。
[0174]推送上下文可以包括對包括上下文4401的堆棧條目進(jìn)行配置,并且該堆棧條目可以存儲在如以上披露的圖4A的運(yùn)行堆棧460的堆棧上。上下文4401的字段的第一子集可以基于與給定節(jié)點(diǎn)相關(guān)聯(lián)的給定元數(shù)據(jù)來進(jìn)行配置、基于之前已經(jīng)提取給定節(jié)點(diǎn)來獲得,如匹配類型字段4404、元素字段4408、和下一個節(jié)點(diǎn)地址字段4410字段。上下文4401的字段的第二子集可以由HNA處理內(nèi)核408基于行走的運(yùn)行時間信息進(jìn)行配置,如為給定節(jié)點(diǎn)保持的當(dāng)前行走方向或計(jì)數(shù)值。例如,該第二子集可以包括逆向行走方向字段4416、計(jì)數(shù)字段4412、以及丟棄未探宄的上下文(DUP)字段4414。
[0175]HNA處理內(nèi)核408可以基于上下文條目類型字段4402中所包括的上下文狀態(tài)設(shè)置(未示出)來解釋上下文4401。上下文狀態(tài)設(shè)置可以指示上下文4401是否完整或不完整?;谒鶑棾龅亩褩l目的上下文4401的上下文條目類型字段4402的指示上下文4401是否不完整的上下文狀態(tài)設(shè)置,HNA處理內(nèi)核408可以被配置成用于提取通過下一個節(jié)點(diǎn)地址字段4410標(biāo)識的下一個節(jié)點(diǎn)并基于下一個節(jié)點(diǎn)所存儲的元數(shù)據(jù)和當(dāng)前運(yùn)行時間配置(如行走方向)來繼續(xù)進(jìn)行行走,而不是基于所彈出的堆棧條目的上下文4401的字段配置來繼續(xù)進(jìn)行行走。
[0176]圖5A為行走器320可以用于對輸入流(未示出)中的正則表達(dá)式圖樣502進(jìn)行匹配的每圖樣NFA圖形504的示例實(shí)施例的框圖500。如以上所披露的,至少一個HNA處理器108可以被配置成用于實(shí)施行走器320的與NFA處理相關(guān)的功能性,并且至少一個HNA處理器108可以包括多個超級集群。每個超級集群可以包括多個集群。該多個集群中的每個集群可以包括每個可以包括一個如以上參照圖4A所披露的HNA處理內(nèi)核408的多個HNA處理單元(HPU)。如此,至少一個HPU 425的至少一個HNA處理內(nèi)核408可以基于HNA調(diào)度器129進(jìn)行的HNA指令的調(diào)度來實(shí)施行走器320與NFA處理相關(guān)的功能性。
[0177]在行走器320可以使用的每圖樣NFA圖形504的示例實(shí)施例中,輸入流可以包括一個帶有有效載荷542的數(shù)據(jù)包(未示出)。正則表達(dá)式圖樣502為指定字符“h”后跟著無限數(shù)量的與換行字符(即,Γ\η]*)不匹配的連續(xù)字符的圖樣“h[~\n]*ab”。該無限數(shù)量可以是零或更多。圖樣502進(jìn)一步包括后面連續(xù)跟著無限數(shù)量的與換行字符不匹配的字符的字符“a”和“b”。在該示例實(shí)施例中,有效載荷542包括有效載荷542中的帶有對應(yīng)偏移520a-d(即,0、1、2、和 3)的段 522a_d(即,h、x、a、和 b)。
[0178]應(yīng)理解到,正則表達(dá)式圖樣502、NFA圖形504、有效載荷542、段522a_d、以及偏移520a-d表示用于說明性目的的示例,并且在此披露的系統(tǒng)、方法、以及相應(yīng)的裝置可以適用于任何合適的正則表達(dá)式圖樣、NFA圖形、有效載荷、段、以及偏移。進(jìn)一步地,應(yīng)理解到,NFA圖形504可以是更大的NFA圖形(未示出)的一個子部分。此外,有效載荷542可以是更大的有效載荷(未示出)的一部分并且該部分可以在更大的有效載荷的開始、結(jié)束、或任何位置,從而產(chǎn)生與該示例實(shí)施例中的那些偏移不同的偏移。
[0179]在該示例實(shí)施例中,NFA圖形504是被配置成用于使正則表達(dá)式圖樣502與輸入流進(jìn)行匹配的每圖樣NFA圖形。例如,NFA圖形504可以包括編譯器306所生成的多個節(jié)點(diǎn)的圖形,如節(jié)點(diǎn)N0506、N1508、N2510、N3512、N4514、和N5515。節(jié)點(diǎn)N0506可以表示圖樣502的起始節(jié)點(diǎn),并且節(jié)點(diǎn)N5515可以表示圖樣502的標(biāo)記節(jié)點(diǎn)。標(biāo)記節(jié)點(diǎn)N5515可以與反映與輸入流進(jìn)行匹配的圖樣502的最終(即,整個或完整)匹配的指示符(未示出)相關(guān)聯(lián)。如此,行走器302可以基于遍歷標(biāo)記節(jié)點(diǎn)N5515和檢測該指示符來確定圖樣502在輸入流中匹配。指示符可以是與標(biāo)記節(jié)點(diǎn)相關(guān)聯(lián)的元數(shù)據(jù)的(未示出)標(biāo)記或字段設(shè)置或任何其他合適的指示符。
[0180]根據(jù)在此披露的實(shí)施例,行走器320可以使有效載荷542的段522a_d中的一個段一次走過NFA圖形504以將正則表達(dá)式圖樣502與輸入流匹配??梢曰谄?18中的給定段的為有效載荷542內(nèi)的當(dāng)前偏移的對應(yīng)偏移來確定用于行走給定節(jié)點(diǎn)的段516中的給定段。根據(jù)在此披露的實(shí)施例,行走器320可以對當(dāng)前偏移進(jìn)行以下更新:使當(dāng)前偏移增量或減量。例如,行走器320可以使NFA圖形504在正向或逆向方向上行走,并且因此,可以通過分別使偏移增量或減量在正向543或逆向546方向上走過來自有效載荷542的段。
[0181]節(jié)點(diǎn)N0506、N2510、N3512、以及N4514可以被配置成用于使對應(yīng)的元素與有效載荷542的給定段匹配,而節(jié)點(diǎn)N1508和N5515可以是指示沒有匹配功能性的節(jié)點(diǎn)類型的節(jié)點(diǎn),并且因此,將不從有效載荷542進(jìn)行處理。在該示例實(shí)施例中,節(jié)點(diǎn)N1508為向行走器320呈現(xiàn)多個轉(zhuǎn)換路徑選項(xiàng)的分離節(jié)點(diǎn)。例如,行走分離節(jié)點(diǎn)N1508呈現(xiàn)ε路徑530a和530b。根據(jù)在此披露的實(shí)施例,行走器320可以基于與行走器306的相互協(xié)議中的隱含設(shè)置來選擇該多條路徑530a和530b中的給定路徑。例如,編譯器306可以基于行走器320沿著確定性路徑的隱含理解、例如根據(jù)行走器320基于行走分離節(jié)點(diǎn)508而選擇上部ε路徑530a的隱含理解來生成NFA圖形504。根據(jù)在此披露的實(shí)施例,可以將上部ε路徑530a選擇成上部ε路徑530a表示懶惰路徑。該懶惰路徑可以是表示最短可能的元素匹配的路徑。
[0182]根據(jù)在此披露的實(shí)施例,分離節(jié)點(diǎn)508可以與呈現(xiàn)該多個路徑選項(xiàng)的分離節(jié)點(diǎn)元數(shù)據(jù)(未示出)相關(guān)聯(lián)。例如,在該示例實(shí)施例中,該分離節(jié)點(diǎn)元數(shù)據(jù)可以或者直接或者間接地指示多個下一個節(jié)點(diǎn),如節(jié)點(diǎn)N2510和N3512。如果直接指示該多個下一個節(jié)點(diǎn),則該元數(shù)據(jù)可以包括到下一個節(jié)點(diǎn)N2510和N3512的絕對地址或指示符。如果間接地指示該多個下一個節(jié)點(diǎn),則該元數(shù)據(jù)可以包括可以用于解析下一個節(jié)點(diǎn)N2510和N3512的絕對地址或下一個節(jié)點(diǎn)N2510和N3512的指示符的索引或偏移。可替代地,可以使用用于直接或間接地指示該多個下一個節(jié)點(diǎn)的下一個節(jié)點(diǎn)地址的其他合適的形式。
[0183]該隱含理解可以包括將行走器320配置成用于基于分離節(jié)點(diǎn)元數(shù)據(jù)內(nèi)的具體條目位置中所包括的節(jié)點(diǎn)元數(shù)據(jù)來選擇多個下一個節(jié)點(diǎn)中的下一個給定節(jié)點(diǎn)。編譯器306可以被配置成用于生成在所指定的條目位置處包括下一個給定節(jié)點(diǎn)的指示的分離節(jié)點(diǎn)元數(shù)據(jù)。如此,生成NFA圖形504的編譯器306可以使用行走器320將在分離節(jié)點(diǎn)N1508處選擇給定路徑(如上部ε路徑530a)的隱含理解。
[0184]圖5B為根據(jù)有效載荷542來行走圖5A的每圖樣NFA的處理周期的示例實(shí)施例的表538。應(yīng)理解到,處理周期可以包括一個或多個時鐘周期。
[0185]如表538中所示,處理周期540a_h可以包括根據(jù)來自有效載荷542的在當(dāng)前偏移532處的段來行走當(dāng)前節(jié)點(diǎn)530以確定匹配結(jié)果534和基于匹配結(jié)果534的行走器動作536。在該示例實(shí)施例中,節(jié)點(diǎn)N0506可以具有字符節(jié)點(diǎn)類型。例如,節(jié)點(diǎn)N0506可以是被配置成用于與輸入流中的字符“h”匹配的字符節(jié)點(diǎn)。在該示例實(shí)施例中,行走器320可以在處理周期540a中根據(jù)當(dāng)前偏移520a處的段522a(即,“h”)來行走起始節(jié)點(diǎn)N0506。
[0186]當(dāng)段522a與起始節(jié)點(diǎn)N0506處的“h”匹配時,行走器320可以確定匹配結(jié)果534為肯定匹配結(jié)果。如編譯器306通過與起始節(jié)點(diǎn)N0506相關(guān)聯(lián)的元數(shù)據(jù)(未示出)所指定的,行走器320可以在正向方向上行走并提取與節(jié)點(diǎn)N0506相關(guān)聯(lián)的元數(shù)據(jù)所指示的下一個節(jié)點(diǎn)并且可以使當(dāng)前偏移從520a(即,“O”)增量到到520b(即,“I”)。在該示例實(shí)施例中,節(jié)點(diǎn)N0506所指示的下一個節(jié)點(diǎn)為分離節(jié)點(diǎn)N1508。如此,行走器320在處理周期540a中采取動作536,該動作包括在有效載荷542中將當(dāng)前偏移更新成“I”并轉(zhuǎn)換至分離節(jié)點(diǎn)N1508。轉(zhuǎn)換可以包括提取(在此也被稱為加載)分離節(jié)點(diǎn)N1508。
[0187]當(dāng)分離節(jié)點(diǎn)N1508呈現(xiàn)多個轉(zhuǎn)換路徑選項(xiàng)時,如ε路徑530a和530b,處理周期540b中的動作536可以包括選擇上部ε路徑530a并提取與有效載荷542無關(guān)的節(jié)點(diǎn)N2510而不從有效載荷542消耗(即,處理)。由于分離節(jié)點(diǎn)N1508沒有執(zhí)行匹配函數(shù),當(dāng)前偏移/段532沒有改變,并且因此,在處理周期540b中沒有消耗(即,處理)有效載荷。
[0188]由于分離節(jié)點(diǎn)N1508呈現(xiàn)多個路徑選項(xiàng),動作536可以包括存儲未探宄的上下文,如通過存儲節(jié)點(diǎn)N3512的間接或直接標(biāo)識符和當(dāng)前偏移520b (即,“I”)。所選擇的轉(zhuǎn)換路徑在此可以被稱為當(dāng)前或活動線程,并且所存儲的每個未被遍歷的轉(zhuǎn)換路徑在此可以被稱為存儲線程。有效載荷中的相應(yīng)的節(jié)點(diǎn)標(biāo)識符和偏移可以標(biāo)識每個線程。如此,未探宄的上下文可以標(biāo)識未探宄的線程(即,路徑)。
[0189]在沿著所選擇的部分匹配路徑出現(xiàn)否定匹配結(jié)果的情況下,例如,如果沿著從節(jié)點(diǎn)N2510延伸的路徑在節(jié)點(diǎn)N2510或多個節(jié)點(diǎn)處確定否定匹配結(jié)果,則存儲未探宄的上下文可以使行走器320能夠記住返回至節(jié)點(diǎn)N3512以根據(jù)有效載荷542中的偏移520b “I”處的段行走節(jié)點(diǎn)N3512。根據(jù)在此披露的實(shí)施例,在沿著所選擇的轉(zhuǎn)換路徑標(biāo)識圖樣502的最終匹配的情況下,可以用丟棄未探宄的處理(DUP)指示符來標(biāo)記未探宄的上下文,該指示符向行走器320指示是否丟棄或處理未探宄的上下文。
[0190]例如,基于到達(dá)指示輸入流中的圖樣502的最終(S卩,完整或整個)匹配的標(biāo)記節(jié)點(diǎn)N5515,行走器320可以利用DUP指示符來確定是否通過根據(jù)在偏移520b根據(jù)段“x”行走節(jié)點(diǎn)N3512來處理未探宄的上下文以便確定NFA圖形504的對圖樣502進(jìn)行匹配的另一條路徑,或是否丟棄未探宄的上下文。用DUP指示符標(biāo)記未探宄的上下文可以包括以任何合適的方式標(biāo)記未探宄的上下文,如通過將與未探宄的上下文相關(guān)聯(lián)的位或字段設(shè)置為真,以表示希望處理堆棧條目,或設(shè)置為假,以表示希望丟棄該堆棧條目。
[0191]編譯器306可以確定是否遍歷存儲線程。例如,編譯器306可以通過配置每個節(jié)點(diǎn)的相應(yīng)元數(shù)據(jù)中的設(shè)置來控制是否設(shè)置DUP指示符??商娲兀幾g器306可以對與有限自動機(jī)相關(guān)聯(lián)的全局元數(shù)據(jù)中所包括的、對要遍歷所有存儲的線程進(jìn)行指定的全局設(shè)置進(jìn)行配置,從而能夠標(biāo)識所有可能的匹配。
[0192]在該示例實(shí)施例中,ε轉(zhuǎn)換路徑530a的選擇會引起在節(jié)點(diǎn)Ν2510處或當(dāng)前線程的后續(xù)節(jié)點(diǎn)(如,節(jié)點(diǎn)N4514)處檢測到匹配失敗。如此,如果檢測到匹配失敗,則可以遍歷針對ε轉(zhuǎn)換路徑530b的存儲線程??商娲兀绻删幾g器306指定,則不管遍歷ε轉(zhuǎn)換路徑530b是否引起檢測到匹配失敗,都可以遍歷ε轉(zhuǎn)換路徑530b。
[0193]存儲未遍歷的轉(zhuǎn)換路徑可以包括通過與條目中的當(dāng)前偏移522b的指示相關(guān)聯(lián)地存儲下一個節(jié)點(diǎn)N3513的標(biāo)識符來將該條目存儲在堆棧上,如圖4A的運(yùn)行堆棧460。下一個節(jié)點(diǎn)N3513的標(biāo)識符可以是值、指針、或下一個節(jié)點(diǎn)的任何其他合適的指示符。偏移值可以是數(shù)字值、指針、或?qū)τ行лd荷542內(nèi)的段516的位置進(jìn)行標(biāo)識的任何其他合適的值。
[0194]根據(jù)該示例實(shí)施例,基于選擇上部路徑(即,ε轉(zhuǎn)換路徑530a),在處理周期540c中,行走器320可以提取節(jié)點(diǎn)N2510并且試圖將當(dāng)前偏移520b (即,“I”)處的段522b (即,“X”)與節(jié)點(diǎn)N2510的元素“a”進(jìn)行匹配。由于“X”與節(jié)點(diǎn)N2510處的元素“a”不匹配,處理周期540c中的動作536可以包括從運(yùn)行堆棧460彈出條目。所彈出的條目544b可以是最近推送的條目,如在該示例實(shí)施例中指示節(jié)點(diǎn)N3512和偏移520b (即,“ I”)的存儲條目544a0
[0195]行走器320并且可以根據(jù)位于有效載荷542中的偏移520b處的段“x”轉(zhuǎn)換和行走節(jié)點(diǎn)N3512。如此,處理周期540d顯示在處理周期540d中匹配結(jié)果534為肯定的。處理周期540d中的動作536可以包括將當(dāng)前偏移更新成偏移520c并轉(zhuǎn)換回可以是節(jié)點(diǎn)N3512指示的下一個節(jié)點(diǎn)的分離節(jié)點(diǎn)N1508。
[0196]由于從分離節(jié)點(diǎn)508轉(zhuǎn)換的所有圓弧為ε轉(zhuǎn)換,當(dāng)在處理周期540e中沒有更新當(dāng)前偏移時,行走器320可以再次選擇該多個路徑選項(xiàng)中的一條路徑并且不消耗(即,處理)來自有效載荷542的段。在該示例實(shí)施例中,行走器320再次選擇ε轉(zhuǎn)換路徑530a。如此,行走器320通過推送節(jié)點(diǎn)N3512和當(dāng)前偏移(現(xiàn)在為520c (即,“2”))再次將線程存儲在運(yùn)行堆棧460上。如處理周期540f中所示,行走器320提取節(jié)點(diǎn)N2510并將偏移520c(即,“2”)處的段522c(即,“a”)與節(jié)點(diǎn)N2510的元素“a”匹配。由于“a”在節(jié)點(diǎn)N2510處匹配,行走器320將當(dāng)前偏移更新成520d(即,“3”)并轉(zhuǎn)換至如編譯器306配置的節(jié)點(diǎn)N2510元數(shù)據(jù)(未示出)所指定的節(jié)點(diǎn)N4514。例如,節(jié)點(diǎn)N2510元數(shù)據(jù)可以指定通過與給定節(jié)點(diǎn)N2510相關(guān)聯(lián)的下一個節(jié)點(diǎn)地址(未示出)從給定節(jié)點(diǎn)(如節(jié)點(diǎn)N2510)到下一個節(jié)點(diǎn)(如節(jié)點(diǎn)N4514)的轉(zhuǎn)換511。根據(jù)在此披露的實(shí)施例,下一個節(jié)點(diǎn)地址可以被配置成用于標(biāo)識下一個節(jié)點(diǎn)和多個存儲器中的給定存儲器,如編譯器306將下一個節(jié)點(diǎn)分布到其上以便存儲的超級集群圖形存儲器156a、HNA片上圖形存儲器156b、或HNA芯片外圖形存儲器156c。
[0197]如此,在處理周期540g中,行走器320可以提取下一個節(jié)點(diǎn)N4514和偏移520d處的下一個段522d(即,“b”)。由于“b”在節(jié)點(diǎn)N4514處進(jìn)行匹配,行走器320可以轉(zhuǎn)換至下一個節(jié)點(diǎn)N5515。節(jié)點(diǎn)N5515為一個與表示輸入流中的正則表達(dá)式圖樣542的最終(S卩,完整或整個)匹配的指示符相關(guān)聯(lián)的標(biāo)記節(jié)點(diǎn)。因此,在處理周期540h中,行走器320可以中斷沿著當(dāng)前路徑的行走并通過將條目存儲在匹配結(jié)果緩沖區(qū)466中來報告最終匹配。然后,行走器320可以對運(yùn)行堆棧460進(jìn)行存儲線程檢查并且按照相應(yīng)DUP指示符所指示的那樣或者丟棄存儲線程或?qū)⑺鼈兗せ钊绱耍凶咂?20彈出對節(jié)點(diǎn)N3512和偏移520 (即,“2”)進(jìn)行標(biāo)識的條目,并確定是否通過根據(jù)偏移520c處的段522c行走節(jié)點(diǎn)N3512來激活存儲線程或根據(jù)與所彈出的條目相關(guān)聯(lián)的DUP指示符來丟棄存儲線程。
[0198]由于以上披露的DFA和NFA組合式處理,在此披露的實(shí)施例可以能夠優(yōu)化匹配性能。例如,由于NFA可以基于通過DFA處理標(biāo)識的部分匹配,以上披露的實(shí)施例可以減少NFA處理中的誤報的數(shù)量。進(jìn)一步地,因?yàn)樵诖伺兜膶?shí)施例包括可以通過DFA處理標(biāo)識的每規(guī)則(即,每圖樣)NFA,在此披露的實(shí)施例進(jìn)一步優(yōu)化了匹配性能。
[0199]如以上所披露的,DFA 312為統(tǒng)一 DFA,并且每個至少一個NFA 314為每圖樣NFA。HFA處理器110使有效載荷走過統(tǒng)一 DFA 312可以被認(rèn)為是標(biāo)記圖樣的起點(diǎn)(中間匹配)并向可以繼續(xù)從該標(biāo)記行走以確定最終匹配的至少一個NFA 314提供起點(diǎn)的第一解析塊。例如,基于將輸入流的有效載荷的段處理經(jīng)過統(tǒng)一 DFA 312所確定的部分匹配結(jié)果,行走器320可以確定需要進(jìn)一步處理規(guī)則集310中的給定數(shù)量的規(guī)則(即,圖樣),并且當(dāng)每個至少一個NFA 314為每圖樣NFA時,HFA處理器110可以產(chǎn)生可以被轉(zhuǎn)換成給定數(shù)量的NFA行走的圖樣匹配結(jié)果。
[0200]圖6為行走器320的環(huán)境600的示例實(shí)施例的框圖600。可以接收602數(shù)據(jù)包1la的輸入流并且其可以包括可以是來自不同流的數(shù)據(jù)包的數(shù)據(jù)包616a_f,如一個第一流614a和一個第二流614b。例如,數(shù)據(jù)包P1616a、P4616d、和P6616f可以是第一流614a中的數(shù)據(jù)包,而數(shù)據(jù)包P2616b、P3616c、和P5616e可以屬于第二流614b。處理內(nèi)核603可以是安全裝置102的可以被配置成用于執(zhí)行數(shù)據(jù)包1la的高層協(xié)議處理并且可以被配置成用于將圖樣匹配方法分流至HFA處理器110和至少一個HNA處理器108的通用處理內(nèi)核,如以上參照圖1A和圖1G披露的至少一個CPU內(nèi)核103。
[0201]可以將數(shù)據(jù)包1la轉(zhuǎn)發(fā)604至HFA處理器110,并且行走器320可以通過使數(shù)據(jù)包1la的段走過統(tǒng)一 DFA(如圖3A的統(tǒng)一 DFA312)以確定輸入流中的正則表達(dá)式圖樣304的部分匹配。行走器320可以被配置成用于轉(zhuǎn)發(fā)606部分匹配結(jié)果,這些部分匹配結(jié)果可以標(biāo)識數(shù)據(jù)包1la的段的偏移和每圖樣NFA(如至少一個NFA 314)的節(jié)點(diǎn),以便由可以基于HFA處理器110的DFA處理的部分匹配結(jié)果行走至少一個NFA 314的至少一個HNA處理器108的給定超級集群的給定集群的給定HPU使這些部分匹配前進(jìn),因?yàn)檫@些匹配結(jié)果可以與數(shù)據(jù)包1la中的相應(yīng)數(shù)據(jù)包一起被轉(zhuǎn)發(fā)608至至少一個HNA處理器108。
[0202]至少一個HNA處理器108的給定超級集群的給定集群的給定HPU可以能夠確定部分匹配618c、618b、和618a,形成與輸入流中的正則表達(dá)式圖樣304中的給定正則表達(dá)式圖樣的最終(即,完整)匹配。例如,或者通過經(jīng)由處理內(nèi)核603間接地、或者直接從HFA處理器110轉(zhuǎn)發(fā)605來將HFA部分匹配結(jié)果從HFA處理器110轉(zhuǎn)發(fā)606至至少一個HNA處理器108,HFA處理器110部分匹配的每個數(shù)據(jù)包可以使至少一個HNA處理器108的給定超級集群的給定集群的給定HPU能夠使部分匹配提前,因?yàn)樾凶咂?20可以用來自HFA處理器110的“提示”或起始信息使數(shù)據(jù)包1la的段走過至少一個NFA 314。
[0203]例如,如以上參照圖4A所披露的,輸入堆棧458可以包括至少一個HNA指令153的至少一項(xiàng)HNA工作,以便由所選擇的HPU 425的分配有至少一個HNA指令153的HNA處理內(nèi)核408來進(jìn)行處理。至少一個HNA指令153的每個至少一項(xiàng)HNA工作可以屬于被HFA處理器110處理的同一給定有效載荷。此類可以基于HFA處理器110進(jìn)行的數(shù)據(jù)包“預(yù)篩選”的“提示”或起始信息可以包括具有有效載荷段的相應(yīng)偏移、用于根據(jù)如上所披露的每圖樣NFA行走的NFA起始節(jié)點(diǎn)。如此,行走器320可以確定可以從至少一個HNA處理器108被轉(zhuǎn)發(fā)至處理內(nèi)核603的數(shù)據(jù)包1la的最終匹配結(jié)果610,并且然后,在網(wǎng)絡(luò)中,數(shù)據(jù)包1la可以與數(shù)據(jù)包1lb —樣適當(dāng)被轉(zhuǎn)發(fā)612。
[0204]除了可以減少NFA處理的誤報數(shù)量的HFA處理器110進(jìn)行的此類數(shù)據(jù)包預(yù)篩選以夕卜,在此披露的實(shí)施例可以通過基于節(jié)點(diǎn)局部性將每個每圖樣NFA的節(jié)點(diǎn)分布到存儲器層次中的多個存儲器來進(jìn)一步優(yōu)化匹配性能。由于每個NFA可以是每圖樣NFA,在此披露的實(shí)施例可以基于以下理解來有利地將每個每圖樣NFA的節(jié)點(diǎn)分布到層次中的多個存儲器:規(guī)則(即,圖樣)越長,則越不太可能訪問(即,行走或遍歷)從規(guī)則(即,圖樣)的末端處的部分生成的節(jié)點(diǎn)。通過將每個每圖樣NFA的早前的節(jié)點(diǎn)存儲在相對更快(即,性能更高)的存儲器內(nèi),在此披露的實(shí)施例可以進(jìn)一步優(yōu)化匹配性能。應(yīng)理解到,因?yàn)榇祟惞?jié)點(diǎn)分布可以基于存儲器映射的層級,可以基于所映射的層級來有利地分布節(jié)點(diǎn),從而能夠?qū)崿F(xiàn)對有待利用的匹配性能進(jìn)行優(yōu)化的任何合適的分布。
[0205]如以上所披露的,至少一個NFA 314(如圖5A的每圖樣NFA504)可以存儲在至少一個存儲器內(nèi),如超級集群圖形存儲器156a、HNA片上圖形存儲器156b、或HNA芯片外圖形存儲器156c。根據(jù)在此披露的實(shí)施例,可以基于跨可以包括多個圖形存儲器(如超級集群圖形存儲器156a、HNA片上圖形存儲器156b、或HNA芯片外圖形存儲器156c)的至少一個存儲器來分布每圖樣NFA 504的節(jié)點(diǎn)的智能編譯器306來優(yōu)化行走器320的匹配性能,這些圖形存儲器可以在存儲器層次中。超級集群圖形存儲器156a、HNA片上圖形存儲器156b、或HNA芯片外圖形存儲器156c可以是每個針對每個每圖樣NFA預(yù)加載的靜態(tài)存儲器,以便進(jìn)行更快速的處理?;谠摱鄠€圖形存儲器的不同訪問時間,應(yīng)用性能可以到達(dá)20+Gbps搜索速率以上。
[0206]可以基于將如圖5A的每圖樣NFA 504的部分509的節(jié)點(diǎn)N0506、N1508、N2510、和N3512的連續(xù)節(jié)點(diǎn)存儲在性能更快的存儲器中來優(yōu)化行走器320的匹配性能,該性能更快的存儲器相對于可以被映射到存儲器層次中的較低層級的、存儲連續(xù)節(jié)點(diǎn)N4514和N5515的另一個存儲器被映射到更高的層級。由于NFA 504為從單個圖樣(如圖樣502)生成的每圖樣NFA,NFA 504與從其他圖樣生成的其他NFA分開,并且因此,在此披露的實(shí)施例可以基于每圖樣NFA的節(jié)點(diǎn)的對于統(tǒng)一 NFA的節(jié)點(diǎn)而言不存在的所識別的局部性。
[0207]在此披露的實(shí)施例可以基于以下理解:每圖樣NFA圖形(如每圖樣NFA圖形504)的早前的節(jié)點(diǎn)(如節(jié)點(diǎn)N0506、N1508、N2510和N3512)可以比節(jié)點(diǎn)N4514和N5515具有被遍歷的更高可能性,因?yàn)楣?jié)點(diǎn)N4514和N5515被定位成朝向規(guī)則(即,圖樣)502的末端,并且因此,需要匹配有效載荷的更多部分以便被行走(即,遍歷)。如此,每圖樣NFA(如NFA504)或任何其他合適的每圖樣NFA圖形的早前節(jié)點(diǎn)可以被認(rèn)為是由于誤報而在比“低觸摸(low touch) ”節(jié)點(diǎn)更高頻率基礎(chǔ)上訪問的“高觸摸(high touch) ”節(jié)點(diǎn),僅在出現(xiàn)圖樣的完整匹配的情況下,才更有可能訪問“低觸摸”節(jié)點(diǎn)。
[0208]根據(jù)在此披露的實(shí)施例,基于對每個每圖樣NFA中的哪些節(jié)點(diǎn)被認(rèn)為是“高觸摸”節(jié)點(diǎn)和哪些節(jié)點(diǎn)被認(rèn)為是“低觸摸”節(jié)點(diǎn)的理解,編譯器306可以將每個每圖樣NFA中的節(jié)點(diǎn)分布到層次中的多個存儲器。此類理解可以用于通過將每個每圖樣NFA的節(jié)點(diǎn)分布到存儲器層次中的多個存儲器來“預(yù)高速緩存”(即,靜態(tài)地存儲)這些節(jié)點(diǎn),從而能夠提高匹配性能。例如,可以基于以下理解將“高觸摸”節(jié)點(diǎn)分布到更快的存儲器:由于其在每圖樣NFA內(nèi)的局部性,可以更頻繁地訪問(即,行走或遍歷)這些“高觸摸”節(jié)點(diǎn)。
[0209]通常,統(tǒng)一 NFA的基于正則表達(dá)式圖樣集合生成的正則表達(dá)式訪問圖樣可以是隨機(jī)的,因?yàn)榇祟悎D樣可以基于具體有效載荷。因此,正則表達(dá)式訪問圖樣的歷史不能用于預(yù)測進(jìn)一步的正則表達(dá)式訪問圖樣。例如,高速緩存統(tǒng)一 NFA的最近遍歷的節(jié)點(diǎn)可能不會向行走器提供性能益處,因?yàn)榻y(tǒng)一 NFA內(nèi)的所訪問的下一個節(jié)點(diǎn)可能不是所高速緩存的節(jié)點(diǎn)。
[0210]圖7A為編譯器306的環(huán)境700的實(shí)施例的框圖。如以上所披露的,編譯器306在此可以被稱為可以被配置成用于通過對來自規(guī)則集310的可能最適用于DFA或NFA處理的部分進(jìn)行標(biāo)識來將規(guī)則集310編譯成二值圖像112的智能編譯器。因此,二值圖像112可以包括至少兩個部分,其中,一個用于DFA處理的第一部分和一個用于NFA處理的第二部分,如以上參照圖3A所披露的統(tǒng)一 DFA 312和至少一個NFA314。根據(jù)在此披露的實(shí)施例,至少一個HNA處理器108可以操作性地耦合至多個存儲器,這些存儲器可以包括多個圖形存儲器,像如上所披露的超級集群圖形存儲器156a、HNA片上圖形存儲器156b、或HNA芯片外圖形存儲器156c。根據(jù)在此披露的實(shí)施例,編譯器306可以被配置成用于確定圖形存儲器中的統(tǒng)一 DFA 312和至少一個NFA 314的節(jié)點(diǎn)的位置,如超級集群圖形存儲器156a、HNA片上圖形存儲器156b、或HNA芯片外圖形存儲器156c。
[0211]根據(jù)在此披露的實(shí)施例,統(tǒng)一 DFA 312可以靜態(tài)地存儲在DFA圖形存儲器中的給定存儲器中,而至少一個NFA 314可能已經(jīng)分布了節(jié)點(diǎn)并且將其跨這些圖形存儲器靜態(tài)地存儲,如超級集群圖形存儲器156a、HNA片上圖形存儲器156b、或HNA芯片外圖形存儲器156c,因?yàn)榫幾g器306可以確定具體NFA的分布目標(biāo)以便存儲在具體存儲器內(nèi),以便優(yōu)化行走器匹配性能。根據(jù)在此披露的實(shí)施例,如超級集群圖形存儲器156a、HNA片上圖形存儲器156b、或HNA芯片外圖形存儲器156c的圖形存儲器可以在存儲器層次743中,該存儲器層次可以包括多個層級708a_c。該多個層級708a_c可以被映射到可以包括存儲器756a_c的該多個圖形存儲器,這些圖形存儲器可以分別是超級集群圖形存儲器156a、HNA片上圖形存儲器156b、和HNA芯片外圖形存儲器156c。
[0212]編譯器306可以用任何合適的方式映射層級708a_c,并且可以按遞減次序712對這些層級708a_c進(jìn)行排名,從而使得層級708a可以是排名最高的層級708a,并且層級708c可以是排名最低的層級。圖形存儲器756a-c可以包括可以是性能最高的存儲器的隨機(jī)存取存儲器(RAM),該存儲器可以與片上搜索存儲器(OSM) —起共同位于網(wǎng)絡(luò)服務(wù)處理器100上。圖形存儲器756a-c可以包括可以被包括在至少一個系統(tǒng)存儲器151內(nèi)的HNA芯片外圖形存儲器156c,該系統(tǒng)存儲器可以是外部的并且操作性地耦合至網(wǎng)絡(luò)服務(wù)處理器100。
[0213]基于根據(jù)存儲器的性能(S卩,讀取和寫入訪問時間)的映射,RAM存儲器可以被映射到排名最高的層級708a,OSM可以被映射到排名第二高的層級708b,并且該系統(tǒng)存儲器可以被映射到排名最低的層級708c。然而,應(yīng)理解到,可以用任何合適的方式進(jìn)行多個層級708a-c與圖形存儲器756a-c之間的映射。例如,該映射可以基于對與規(guī)則集310相關(guān)聯(lián)的應(yīng)用的了解,可以從該規(guī)則集生成被分布到存儲器756a-c的節(jié)點(diǎn),從而性能最高的存儲器不能被映射到排名最高的層級。進(jìn)一步地,應(yīng)理解到,存儲器層次743中的層級的數(shù)量和所示圖形存儲器756a-c的數(shù)量出于說明性目的并且可以是任何合適的層級和存儲器數(shù)量。
[0214]如以上所披露的,通過將從給定圖樣的早前的部分生成的NFA節(jié)點(diǎn)存儲在更快的存儲器內(nèi),智能編譯器306可以利用每圖樣NFA的節(jié)點(diǎn)的局部性。進(jìn)一步地,由于自HFA處理器110的DFA處理確定給定圖樣的部分匹配以來,給定圖樣的匹配的概率已經(jīng)較高,此類實(shí)施例組合以優(yōu)化匹配性能。
[0215]例如,如以上所披露的,DFA處理可以用于減少NFA處理發(fā)現(xiàn)的誤報的數(shù)量。由于每個NFA可以是每圖樣NFA,可以基于多個存儲器到存儲器層次743的層級的映射跨該多個存儲器有利地分布每個每圖樣NFA的節(jié)點(diǎn)。例如,從長度相對較短的圖樣生成的較小的NFA可以將所有節(jié)點(diǎn)分布到一個第一級并存儲在被映射到該第一級的第一存儲器,而從相對較長的圖樣生成的較大的NFA可以將節(jié)點(diǎn)的第一部分分布到該第一級并且將剩余部分分布在剩余級之間。該第一級可以被映射到性能最尚的存儲器的排名最尚的級。
[0216]如此,每圖樣NFA的早前的節(jié)點(diǎn)可以存儲在性能最高的存儲器內(nèi)。由于早前的節(jié)點(diǎn)因?yàn)檎`報而可能具有被遍歷的更高可能性,在此披露的實(shí)施例可以通過對被映射到存儲器層次743中的較高級的存儲器的訪問能夠處理大多數(shù)誤報。根據(jù)在此披露的實(shí)施例,可以通過使對被映射到排名最高的層級(如存儲器層次743中的層級708a)的存儲器756a的訪問數(shù)量比對可以被映射到排名最低的層級708c的存儲器756c的方式數(shù)量相對較高來優(yōu)化匹配性能。
[0217]存儲器756a可以是能夠支持例如13億項(xiàng)事務(wù)每秒的性能最高的存儲器,而存儲器756b可以具有能夠支持1.5億項(xiàng)事務(wù)每秒的較低性能,并且存儲器756c可以具有能夠支持1200萬項(xiàng)事務(wù)每秒的性能最低的存儲器。進(jìn)一步地,根據(jù)在此披露的實(shí)施例,此類被映射到排名較高的層級的性能較高的存儲器的存儲量大小可以比被映射到排名最低的層級708c的性能較低的存儲器(如存儲器756c)相對較小,該存儲器相比可以是相對大的存儲器。例如,存儲器756c可以是包括在至少一個系統(tǒng)存儲器151內(nèi)的HNA芯片外圖形存儲器156c,該至少一個系統(tǒng)存儲器可以是外部的并且提供受到物理附接的存儲器的量限制的相對大量的存儲容量。
[0218]根據(jù)在此披露的實(shí)施例,每圖樣NFA存儲分配設(shè)置710a_c可以被配置成用于層級708a-c。每圖樣NFA存儲分配設(shè)置710a_c可以表示用于從每個每圖樣NFA分布到層級708a_c的對應(yīng)層級的目標(biāo)數(shù)量的唯一節(jié)點(diǎn)以便存儲在被映射到對應(yīng)層級的給定存儲器內(nèi)。在針對規(guī)則集310中的一個或多個圖樣中的每個圖樣生成每圖樣NFA的情況下,編譯器306可以被配置成用于以一種使被映射到層級708a_c的存儲器756a_c能夠提供足夠的存儲容量的方式來確定每圖樣NFA存儲分配設(shè)置710a-c。
[0219]每圖樣NFA存儲分配設(shè)置710a_c可以表示每個每圖樣NFA的節(jié)點(diǎn)集合中的用于分布到對應(yīng)層級的目標(biāo)數(shù)量的唯一節(jié)點(diǎn),以便存儲到被映射到該對應(yīng)層級的給定存儲器。例如,基于被配置成用于層級708a的每圖樣NFA存儲分配設(shè)置710a,編譯器306可以分布每圖樣NFA714a的對應(yīng)節(jié)點(diǎn)集合702a的第一部分704a和每圖樣NFA 714b的對應(yīng)節(jié)點(diǎn)集合702b的第二部704b分,以便存儲在被映射到層級708a的存儲器756a內(nèi)。
[0220]基于被配置成用于層級708b的每圖樣NFA存儲分配設(shè)置710b,編譯器306可以分布每圖樣NFA 714a的對應(yīng)點(diǎn)集合702a的第三部分706a和每圖樣NFA 714b的對應(yīng)節(jié)點(diǎn)集合702b的第四部706b分,以便存儲在被映射到層級708b的存儲器756b內(nèi)。這種分布為目標(biāo)分布,因?yàn)榻o定對應(yīng)的節(jié)點(diǎn)集合中的節(jié)點(diǎn)的數(shù)量可以不包括如少于可能已經(jīng)生成的目標(biāo)數(shù)量或少于可以保持在對應(yīng)集合內(nèi)用于分布的目標(biāo)數(shù)量的目標(biāo)數(shù)量。
[0221 ] 在該示例實(shí)施例中,每圖樣NFA存儲分配設(shè)置710c可以被配置成用于存儲器層次743的排名最低的級708c并且可以用表示無限數(shù)量的方式來指定。在該示例實(shí)施例中,被映射到排名最低的層級708c的存儲器756c可以是包括在至少一個系統(tǒng)存儲器151內(nèi)的HNA芯片外圖形存儲器156c,該至少一個系統(tǒng)存儲器具有相對大的存儲量。如此,編譯器306可以將節(jié)點(diǎn)分布到該系統(tǒng)存儲器,包括對針對每圖樣NFA714a-b中的每個生成的每個對應(yīng)點(diǎn)集合中的任何剩余未分布的節(jié)點(diǎn)進(jìn)行分布,以便存儲在系統(tǒng)存儲器756c內(nèi)。
[0222]應(yīng)理解到,編譯器可以內(nèi)在地了解層級到存儲器映射,并且如此,可以排除特定層級708a-c。例如,編譯器306可以對每圖樣NFA存儲分配設(shè)置710a_c進(jìn)行配置并且基于對存儲器層次743中的存儲器756a-c中的每個存儲器的層級映射的內(nèi)在了解來將這些設(shè)置直接映射到存儲器756a-c。還應(yīng)理解到,圖7A中所示的每圖樣NFA、每圖樣NFA的節(jié)點(diǎn)、和分布數(shù)量是出于說明性目的并且可以是任何合適的每圖樣NFA、節(jié)點(diǎn)、或分布數(shù)量。
[0223]圖7B為HNA處理內(nèi)核408的示例實(shí)施例的框圖721,該處理內(nèi)核操作性地耦合至多個存儲器756a-c,這些存儲器可以被映射到圖7A的存儲器層次743中的層級708a_c、和圖4A的節(jié)點(diǎn)高速緩存451。相對于存儲器756b和756c,存儲器756a可以是性能最快的存儲器。存儲器756a可以被映射到存儲器層次743中的排名最高的層級708a。相對于也操作性地耦合至HNA處理內(nèi)核408的其他存儲器708a和708b,存儲器756c可以是性能最低的存儲器。
[0224]排名最高的存儲器756a可以是與HNA處理內(nèi)核408 —起共同位于722芯片上的第一存儲器。存儲器756b可以是一個排名第二高的存儲器,該存儲器為與HNA處理內(nèi)核408一起共同位于722芯片上的第二存儲器。相對于操作性地耦合至HNA處理內(nèi)核408的其他存儲器756b和756c,排名最高的存儲器756a可以是性能最高的存儲器。性能最高的存儲器756a可以具有最快的讀取和寫入訪問時間。存儲器756c可以是性能最低的存儲器,其可以是最大的存儲器,如不與HNA處理內(nèi)核408 —起位于芯片上的外部存儲器。
[0225]對應(yīng)的層次節(jié)點(diǎn)事務(wù)大小723a_c可以與層級708a_c中的每個相關(guān)聯(lián)。每個對應(yīng)的層次節(jié)點(diǎn)事務(wù)大小可以表示從映射到對應(yīng)層級的給定存儲器提取的用于對給定存儲器的讀取訪問的最大節(jié)點(diǎn)數(shù)量。例如,層次節(jié)點(diǎn)事務(wù)大小723a可以與最高層級708a相關(guān)聯(lián)。由于存儲器756a處于最高層級708a,層次節(jié)點(diǎn)事務(wù)大小723a可以表示從存儲器756a提取的最大節(jié)點(diǎn)數(shù)量。類似地,由于存儲器756b處于第二高層級708b,層次節(jié)點(diǎn)事務(wù)大小723b可以表示從存儲器756b提取的最大節(jié)點(diǎn)數(shù)量,并且由于存儲器756c處于下一個最低層級708c,層次節(jié)點(diǎn)事務(wù)大小723c可以表示從存儲器756c提取的最大節(jié)點(diǎn)數(shù)量。
[0226]圖8為多個每圖樣NFA的節(jié)點(diǎn)分布的示例實(shí)施例的框圖800。在該示例實(shí)施例中,針對一個或多個圖樣804中的圖樣816a生成一個第一 NFA 814a,針對一個或多個圖樣804中的第二圖樣816b生成一個第二 NFA 814b,針對一個或多個圖樣804中的第三圖樣816c生成一個第三NFA 814c。
[0227]第一每圖樣NFA 814a的節(jié)點(diǎn)804a的第一部分被分布到被映射到存儲器層次812中的第一存儲器856a的層級808a,并且節(jié)點(diǎn)806a的第二部分被分布到被映射到第二存儲器856b的第二層級808b。在該示例實(shí)施例中,層級808a為排名最高的級,并且層級808b為排名最低的層級。第二每圖樣NFA 814b的節(jié)點(diǎn)804b的第三部分被分布到映射到存儲器層次812中的第一存儲器856a的層級808a,并且節(jié)點(diǎn)806b的第四部分被分布到映射到第二存儲器856b的第二層級808b。第三每圖樣NFA 814c的節(jié)點(diǎn)804c的第五部分被分布到映射到存儲器層次812中的第一存儲器856a的層級808a,并且節(jié)點(diǎn)806c的第六部分被分布到映射到第二存儲器856b的第二層級808b。
[0228]如圖8中所示,第二 NFA 814b的被分布用于存儲在被映射到層級808a的存儲器856a內(nèi)的第二節(jié)點(diǎn)部分804b可以分別小于第一 NFA814a和第一節(jié)點(diǎn)部分804a和第三NFA814c的第五節(jié)點(diǎn)部分804c。例如,如果每圖樣NFA 814b的節(jié)點(diǎn)的數(shù)量小于層級808a的每NFA存儲分配設(shè)置(未示出)所表示的唯一目標(biāo)節(jié)點(diǎn)的數(shù)量,則情況可以是這樣。進(jìn)一步地,由于層級808b為存儲器層次812中的排名最低的層級,層級808b的下一個每圖樣NFA存儲分配設(shè)置(未示出)可以非常大,從而在已經(jīng)分布到比層級808b更高的每個層級后,能夠分布所有未分布的節(jié)點(diǎn)以便存儲在被映射到層級808b的存儲器856a內(nèi)。如此,在該示例實(shí)施例中,第二節(jié)點(diǎn)部分806a可以包括比第六部分806c更多的節(jié)點(diǎn),因?yàn)閳D樣816a可以是比圖樣816c更長的規(guī)則。進(jìn)一步地,第四節(jié)點(diǎn)部分806b可以是空的,因?yàn)閳D樣816b可以相對短,具有很少的針對每圖樣NFA 814b生成的節(jié)點(diǎn),從而引起每圖樣NFA 814b的所有節(jié)點(diǎn)被分布到層級808a以便存儲在存儲器856a內(nèi)。
[0229]編譯器306可以分布每個每圖樣NFA的節(jié)點(diǎn)作為生成每個每圖樣NFA的一部分。如以上所披露的,可以通過經(jīng)由下一個節(jié)點(diǎn)地址對第二節(jié)點(diǎn)進(jìn)行標(biāo)識的第一節(jié)點(diǎn)元數(shù)據(jù)來指定NFA中從一個第一節(jié)點(diǎn)到一個第二節(jié)點(diǎn)的轉(zhuǎn)換。根據(jù)在此披露的實(shí)施例,編譯器306可以將下一個節(jié)點(diǎn)地址配置成包括一個對多個存儲器中的已經(jīng)分布該第二節(jié)點(diǎn)以便存儲到其中的給定存儲器進(jìn)行指示的部分。
[0230]圖9為可以在至少一個處理器中實(shí)施的方法900的示例實(shí)施例的流程圖,該處理器操作性地耦合至被映射到安全裝置內(nèi)的存儲器層次中的多個層級的存儲器,該安全裝操作性地耦合至網(wǎng)絡(luò)。該方法可以開始(902)并生成至少一個非確定有限自動機(jī)(NFA)(904)??梢葬槍蝹€正則表達(dá)式圖樣生成每個每圖樣NFA并且其可以包括對應(yīng)的節(jié)點(diǎn)集合。在該示例實(shí)施例中,該方法可以分布每個每圖樣NFA的對應(yīng)節(jié)點(diǎn)集合中的節(jié)點(diǎn)以便存儲在基于所映射的層級和被配置用于這些層級的每圖樣NFA存儲分配設(shè)置的多個存儲器內(nèi)(908),并且之后,該方法結(jié)束(908)。
[0231]圖10為多個每圖樣NFA的節(jié)點(diǎn)的另一節(jié)點(diǎn)分布的示例實(shí)施例的框圖1000。在該示例實(shí)施例中,示出了針對存儲在一個第一存儲器1056a —個第二存儲器1056b內(nèi)的節(jié)點(diǎn)分布1004和1006。每個每圖樣NFA 1014a_c的分布1004可以基于分別被配置成用于層級1008a和1008b的每圖樣NFA存儲分配設(shè)置1lOa和1010b。在該示例實(shí)施例中,層級1008a和1008b被分別映射到第一存儲器1056a和第二存儲器1056b。
[0232]圖11為一種用于對至少一個每圖樣NFA的節(jié)點(diǎn)進(jìn)行分布的方法的示例實(shí)施例的流程圖1100。根據(jù)在此披露的實(shí)施例,對所生成的每個每圖樣NFA的對應(yīng)節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行分布可以包括以一種包括對應(yīng)節(jié)點(diǎn)集合中的節(jié)點(diǎn)的第一分布以便存儲在多個存儲器中的第一存儲器內(nèi)的連續(xù)方式對應(yīng)節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行分布。該第一存儲器可以被映射到層級中的排名最高的層級。基于之前的分布之后該對應(yīng)節(jié)點(diǎn)集合中剩余的至少一個未分布的節(jié)點(diǎn),分布可以包括該對應(yīng)節(jié)點(diǎn)集合中的節(jié)點(diǎn)的至少一次第二分布。每次至少一次第二分布可以是為了存儲在多個存儲器中的給定存儲器內(nèi)。該給定存儲器可以被映射到層級中的給定層級,每次分布比排名最高的層級連續(xù)更低。
[0233]該連續(xù)方式可以包括對來自該至少一個每圖樣NFA中的給定每圖樣NFA的多個節(jié)點(diǎn)中的節(jié)點(diǎn)進(jìn)行分布,這些節(jié)點(diǎn)表示生成該給定每圖樣NFA所針對的給定正則表達(dá)式圖樣的給定數(shù)量的連續(xù)元素。進(jìn)一步地,根據(jù)在此披露的實(shí)施例,每次至少一次第二分布包括通過與至少一個之前的節(jié)點(diǎn)相關(guān)聯(lián)的元數(shù)據(jù)中所包括的下一個節(jié)點(diǎn)地址所標(biāo)識的至少一個下一個節(jié)點(diǎn),在緊接著之前第二分布中分布該至少一個之前的節(jié)點(diǎn)。
[0234]該方法可以開始(1102)并且將給定層級設(shè)置成存儲器層次中排名最高的層級(1104)。該方法可以將給定每圖樣NFA設(shè)置成從一個或多個正則表達(dá)式圖樣的集合中生成的至少一個NFA中的第一每圖樣NFA (1106)。該方法可以檢查該給定每圖樣NFA的未分布的節(jié)點(diǎn)的數(shù)量(1108)。如果給定每圖樣NFA的未分布的節(jié)點(diǎn)的數(shù)量為零,則該方法可以檢查該給定每圖樣NFA是否是從一個或多個正則表達(dá)式圖樣的集合生成的最后一個NFA (1116)。
[0235]在該示例實(shí)施例中,如果該給定每圖樣NFA為所生成的最后一個每圖樣NFA,則該方法可以檢查給定層級是否是排名最低的層級(1120),并且如果該給定層級為排名最低的層級,則之后,該方法結(jié)束(1126)。然而,如果對該給定層級是否為排名最低的層級的檢查(1120)為否,則該方法可以將該給定層級設(shè)置成下一個連續(xù)更低的層級(1124)并且再次將該給每圖樣NFA設(shè)置成從一個或多個正則表達(dá)式圖樣的集合生成的至少一個NFA的第一每圖樣NFA(1106)并繼續(xù)對該給定每圖樣NFA的未分布的節(jié)點(diǎn)的數(shù)量進(jìn)行檢查(1108)。如果該給定每圖樣NFA的未分布的節(jié)點(diǎn)的數(shù)量為零,則該方法可以如以上所披露的繼續(xù)進(jìn)行。
[0236]如果對該給定每圖樣NFA的未分布的節(jié)點(diǎn)的數(shù)量的檢查(1108)為非零,則該方法可以檢查該給定層級是否為排名最低的層級(1110)。如果是,則該方法可以將該數(shù)量的未分布的節(jié)點(diǎn)分布到被映射到給定層級的給定存儲器(1114),并且該方法可以檢查該給定每圖樣NFA是否是從一個或多個正則表達(dá)式圖樣的集合生成的最后一個NFA(1116)。如果是,則該方法可以如以上所披露的繼續(xù)進(jìn)行。如果不是,則該方法可以將該給定每圖樣NFA設(shè)置成所生成的下一個每圖樣NFA(IllS),并且該方法可以迭代再次檢查該給定每圖樣NFA的未分布的節(jié)點(diǎn)的數(shù)量(1108),該給定每圖樣NFA被更新成為所生成的下一個每圖樣NFA。
[0237]如果對該給定層級是否為排名最低的層級的檢查(1110)為否,則該方法可以檢查該給定每圖樣NFA的未分布的節(jié)點(diǎn)的數(shù)量是否超過被配置成用于該給定層級的每圖樣NFA存儲分配設(shè)置所表示的節(jié)點(diǎn)數(shù)量(1112)。如果超過,則該方法可以對被配置成用于該給定層級的每圖樣NFA存儲分配設(shè)置所表示的該數(shù)量的未分布的節(jié)點(diǎn)進(jìn)行分布以便存儲在被映射到給定層級的給定存儲器(1122),并且檢查該給定每圖樣NFA是否是從一個或多個正則表達(dá)式圖樣的集合生成的最后一個NFA(1116)。如果是,則該方法可以如以上所披露的繼續(xù)進(jìn)行。
[0238]如果對該給定每圖樣NFA是否為所生成的最后一個每圖樣NFA的檢查(1116)為否,則該方法可以將該給定每圖樣NFA設(shè)置成所生成的下一個每圖樣NFA(IllS),并且該方法可以迭代再次檢查該給定每圖樣NFA的未分布的節(jié)點(diǎn)的數(shù)量(1108),該給定每圖樣NFA被更新成為所生成的下一個每圖樣NFA。
[0239]然而,如果對該給定每圖樣NFA的未分布的節(jié)點(diǎn)的數(shù)量是否超過被配置成用于該給定層級的每圖樣NFA存儲分配設(shè)置所表示的節(jié)點(diǎn)數(shù)量的檢查(1112)為否,則該方法可以將該數(shù)量的未分布的節(jié)點(diǎn)分布到被映射到給定層級的給定存儲器(1114)并且如以上披露的繼續(xù)進(jìn)行。
[0240]根據(jù)在此披露的實(shí)施例,每圖樣NFA存儲分配設(shè)置可以通過絕對值表示唯一節(jié)點(diǎn)的目標(biāo)數(shù)量。該絕對值可以是每個對應(yīng)節(jié)點(diǎn)集合的共同值,該共同值使每個對應(yīng)節(jié)點(diǎn)集合能夠具有用于存儲在被映射到對應(yīng)層級的給定存儲器內(nèi)的唯一節(jié)點(diǎn)的目標(biāo)數(shù)量的相同值。例如,如圖10中所示,每圖樣NFAlOHa-C中的每個具有所選擇的表示來自每圖樣NFA1014a-c中的每個的有待分布到被映射到層級1008a的存儲器1056a的相同數(shù)量的節(jié)點(diǎn)的第一部分1004,每圖樣存儲分配設(shè)置1lOa被配置成用于該層級。
[0241]可替代地,可以通過用于應(yīng)用于每個對應(yīng)節(jié)點(diǎn)集合中的節(jié)點(diǎn)的對應(yīng)總數(shù)的百分比值來表示唯一節(jié)點(diǎn)的目標(biāo)數(shù)量,該百分比值使每個對應(yīng)節(jié)點(diǎn)集合能夠具有用于存儲在被映射到對應(yīng)層級的給定存儲器內(nèi)的唯一節(jié)點(diǎn)的目標(biāo)數(shù)量的單獨(dú)值。例如,如果如25%的數(shù)量被配置成用于每圖樣NFA存儲分配設(shè)置1010a(其被配置成用于層級1008a),則第一部分1004將包括來自每圖樣NFA 1014a-c的節(jié)點(diǎn)的25%。由于每個每圖樣NFA 1014a_c的節(jié)點(diǎn)可以不同,則來自每圖樣NFA 1014a-c中的每個的節(jié)點(diǎn)的數(shù)量可以不同。
[0242]每圖樣NFA存儲分配設(shè)置可以包括一個第一每圖樣NFA存儲分配設(shè)置和一個第二每圖樣NFA存儲分配設(shè)置。層級可以包括一個排名最高的層級和一個排名第二高的層級。該第一每圖樣NFA存儲分配設(shè)置可以被配置成用于排名最高的層級。該第二每圖樣NFA存儲分配設(shè)置可以被配置成用于排名最第二高的層級。該第一每圖樣NFA存儲分配設(shè)置可以小于該第二每圖樣NFA存儲分配設(shè)置。例如,所表示的來自每個每圖樣NFA的用于分布到性能最高的存儲器的節(jié)點(diǎn)的數(shù)量可以小于表示用于如可以表示無限數(shù)量的性能最低的存儲器(如系統(tǒng)存儲器)的節(jié)點(diǎn)的數(shù)量。
[0243]在此披露的實(shí)施例可以使給定分布中的節(jié)點(diǎn)的數(shù)量最大化,并且最大化的數(shù)量會受到被配置成用于給定層級的每圖樣NFA存儲分配設(shè)置中的對應(yīng)每圖樣NFA存儲分配設(shè)置的限制。例如,每圖樣NFA存儲分配設(shè)置所表示的節(jié)點(diǎn)的數(shù)量可以為十。如此,每個包括十個或更多未分布的節(jié)點(diǎn)的每圖樣NFA將分布十個節(jié)點(diǎn)。每個包括十個未分布的節(jié)點(diǎn)的每圖樣NFA將分布未分布數(shù)量中對應(yīng)數(shù)量的節(jié)點(diǎn)。
[0244]如以上所披露的,行走器(如圖3A的行走器320)可以被配置成用于使輸入流的有效載荷的段的節(jié)點(diǎn)走過統(tǒng)一 DFA(如圖3A的同一 DFA 312)和至少一個每圖樣NFA(如圖3A的每圖樣NFA 314)以便試圖對輸入流中的正則表達(dá)式圖樣進(jìn)行匹配。在編譯階段,編譯器(如圖3A的編譯器306)可以生成統(tǒng)一 DFA 312和至少一個每圖樣NFA314。統(tǒng)一 DFA312的節(jié)點(diǎn)和至少一個每圖樣NFA 314可以存儲在存儲器層次中的多個存儲器內(nèi),如圖7A的存儲器層次743中的多個存儲器756a-c。
[0245]如以上所披露的,參照圖10和圖11,編譯器306生成的每個每圖樣NFA的對應(yīng)節(jié)點(diǎn)集合可以基于編譯器306為每個對應(yīng)集合確定的節(jié)點(diǎn)分布而分布和存儲在多個存儲器756a-c中的一個或多個存儲器之中。如以上所披露的,編譯器306可以根據(jù)被映射到多個存儲器756a-c的層級(如圖7A的層級708a_c)和被配置成用于層級708a_c的每圖樣NFA存儲分配設(shè)置(如710a_c)來確定每個節(jié)點(diǎn)分布。
[0246]如此,行走器320可以被配置成用于行走每圖樣NFA 314的對應(yīng)節(jié)點(diǎn)集合中的節(jié)點(diǎn),這些節(jié)點(diǎn)可以基于編譯器306所確定的節(jié)點(diǎn)分布根據(jù)被映射到多個存儲器756a-c的層級708a-c和被配置成用于層級708a-c的每圖樣NFA存儲分配設(shè)置710a_c而被分布和存儲在多個存儲器756a-c中的一個或多個存儲器之中。如以上參照圖6所披露的,行走器320可以被配置成用于基于如在統(tǒng)一 DFA 312的行走過程中行走器320確定的輸入流中的對應(yīng)正則表達(dá)式圖樣的部分匹配而行走每圖樣NFA 314的對應(yīng)節(jié)點(diǎn)集合。
[0247]圖12為可以在至少一個處理器中實(shí)施的方法的另一個示例實(shí)施例的流程圖1200,該處理器操作性地耦合至被映射到安全裝置內(nèi)的存儲器層次中的多個層級的存儲器,該安全裝操作性地耦合至網(wǎng)絡(luò)。該方法可以開始(1202)并根據(jù)輸入流的有效載荷的段行走針對對應(yīng)正則表達(dá)式圖樣生成的至少一個每圖樣NFA中的給定每圖樣NFA的對應(yīng)節(jié)點(diǎn)集合中的節(jié)點(diǎn)。該對應(yīng)節(jié)點(diǎn)集合可以基于根據(jù)被映射到多個存儲器的層級確定的節(jié)點(diǎn)分布和被配置成用于這些層級的每圖樣NFA存儲分配設(shè)置而被分布和存儲在該多個存儲器中的一個或多個存儲器之中(1204)。之后,在該示例實(shí)施例中,該方法結(jié)束(1206)。
[0248]行走器320可以被配置成用基于(i)有效載荷的在給定節(jié)點(diǎn)處的給定段的肯定匹配和(ii)與該給定節(jié)點(diǎn)相關(guān)聯(lián)的下一個節(jié)點(diǎn)地址來從對應(yīng)節(jié)點(diǎn)集合中的該給定節(jié)點(diǎn)行走到下一個節(jié)點(diǎn)。該下一個節(jié)點(diǎn)地址可以被配置成用于標(biāo)識該下一個節(jié)點(diǎn)和多個存儲器(如圖7A的多個存儲器756a-c)中的其中存儲該下一個節(jié)點(diǎn)的給定存儲器。例如,轉(zhuǎn)到圖5A的示例實(shí)施例,行走器320可以基于節(jié)點(diǎn)N2510處的段522c的肯定匹配來行走節(jié)點(diǎn)N4514,因?yàn)楣?jié)點(diǎn)N2510可以被配置成用于將有效載荷中的給定偏移處的給定段與字符元素‘a(chǎn)’匹配。與節(jié)點(diǎn)N2510相關(guān)聯(lián)的元數(shù)據(jù)(未示出)可以標(biāo)識下一個節(jié)點(diǎn)(如節(jié)點(diǎn)N4514)以便基于該給定偏移處的給定段與字符元素‘a(chǎn)’的肯定匹配來進(jìn)行遍歷(即,行走)。
[0249]例如,與節(jié)點(diǎn)N2510相關(guān)聯(lián)的元數(shù)據(jù)可以包括下一個節(jié)點(diǎn)地址,該地址為節(jié)點(diǎn)N4514的地址或指針或索引或?qū)ο乱粋€節(jié)點(diǎn)N4514進(jìn)行標(biāo)識的任何其他合適的標(biāo)識符,以便基于節(jié)點(diǎn)N2510處的肯定匹配來進(jìn)行遍歷。與節(jié)點(diǎn)N2510相關(guān)聯(lián)的元數(shù)據(jù)可以進(jìn)一步對多個存儲器中的存儲下一個節(jié)點(diǎn)N4514的給定存儲器進(jìn)行標(biāo)識。可以用任何合適的方式對該給定存儲器進(jìn)行標(biāo)識,如通過結(jié)合或作為下一個節(jié)點(diǎn)514的下一個節(jié)點(diǎn)地址(未示出)的一部分來配置所存儲器的具體位。如此,行走器320可以被配置成用于從通過與給定節(jié)點(diǎn)N2510相關(guān)聯(lián)的下一個節(jié)點(diǎn)地址所標(biāo)識的給定存儲器提取下一個節(jié)點(diǎn)N4514,以便根據(jù)下一個偏移處的下一個段(如圖5A的下一個偏移520d處的下一個段522d)行走下一個節(jié)點(diǎn) N4514。
[0250]下一個節(jié)點(diǎn)N4514可以被高速緩存在節(jié)點(diǎn)高速緩存中?;氐綀D4A,HPU 425的示例實(shí)施例包括可以操作性地耦合至HNA處理內(nèi)核408的節(jié)點(diǎn)高速緩存451。節(jié)點(diǎn)高速緩存451的大小可以用于至少存儲閾值數(shù)量的節(jié)點(diǎn)。如此,HNA處理內(nèi)核408可以將一個或多個節(jié)點(diǎn)(高達(dá)閾值數(shù)量的節(jié)點(diǎn))高速緩存在節(jié)點(diǎn)高速緩存451中。如以上所披露的,HNA處理內(nèi)核408可以被配置成用于實(shí)施行走器320的關(guān)于NFA處理的各方面。如此,行走器320可以基于下一個節(jié)點(diǎn)N4514的提取(S卩,讀取訪問)是否引起高速緩存缺失而從節(jié)點(diǎn)高速緩存451或該多個存儲器756a-c中的給定存儲器取回下一個節(jié)點(diǎn)N4514。根據(jù)在此披露的實(shí)施例,可以基于循環(huán)或最近最少使用(LRU)替換策略來替換節(jié)點(diǎn)高速緩存451中的條目。行走器320可以被配置成用于保持節(jié)點(diǎn)高速緩存451中的一個或多個條目的索引以便在實(shí)施循環(huán)或LRU替換策略中使用。
[0251]如果節(jié)點(diǎn)N4514的提取引起高速緩存缺失,則HNA處理內(nèi)核408可以從靜態(tài)存儲節(jié)點(diǎn)N4514的給定存儲器中提取節(jié)點(diǎn)N4514并且還將節(jié)點(diǎn)N4514緩存在節(jié)點(diǎn)高速緩存451中。基于與給定存儲器的層級相關(guān)聯(lián)的層次節(jié)點(diǎn)事務(wù)大小,HNA處理內(nèi)核408可以高速緩存來自給定存儲器的附加節(jié)點(diǎn)。可以用連續(xù)的方式將節(jié)點(diǎn)N4514和所高速緩存的任何附加節(jié)點(diǎn)安排在對應(yīng)每圖樣NFA內(nèi)。例如,基于與給定存儲器的層級相關(guān)聯(lián)的層次節(jié)點(diǎn)事務(wù)大小,HNA處理內(nèi)核408可以將以連續(xù)的方式安排的節(jié)點(diǎn)N5515和節(jié)點(diǎn)N4514 —起高速緩存在每圖樣NFA504內(nèi)。
[0252]根據(jù)在此披露的實(shí)施例,對應(yīng)的層次節(jié)點(diǎn)事務(wù)大小(未示出)可以與層級708a_c中的每個相關(guān)聯(lián)。每個對應(yīng)的層次節(jié)點(diǎn)事務(wù)大小可以表示從映射到對應(yīng)層級的給定存儲器提取的用于對給定存儲器的讀取訪問的最大節(jié)點(diǎn)數(shù)量。例如,與排名最高的層級相關(guān)聯(lián)的層次節(jié)點(diǎn)事務(wù)大小可以具有最大節(jié)點(diǎn)數(shù)量,即,一個或兩個節(jié)點(diǎn).根據(jù)在此披露的實(shí)施例,層級中排名最高的層級可以與和層級相關(guān)聯(lián)的層次節(jié)點(diǎn)事務(wù)大小中的最小的層次節(jié)點(diǎn)事務(wù)大小相關(guān)聯(lián)。
[0253]可以用任何合適的方式表示層次節(jié)點(diǎn)事務(wù)大小,如通過直接指定節(jié)點(diǎn)的最大數(shù)量,或通過指定可以是所表示的最大節(jié)點(diǎn)數(shù)量的大小的倍數(shù)的位數(shù)量。根據(jù)在此披露的實(shí)施例,節(jié)點(diǎn)高速緩存451可以被組織成多行??梢曰诠?jié)點(diǎn)位大小確定每行的大小,并且每行可以包括用于供HNA處理內(nèi)核408使用的附加位。每行可以是來自該多個存儲器中的每個存儲器的事務(wù)的最小量子(即,粒度)。
[0254]根據(jù)在此披露的實(shí)施例,排名最高的存儲器可以是與HNA處理內(nèi)核408共同位于芯片上的存儲器。排名最高的存儲器可以是相對于該多個存儲器中的其他存儲器性能最高的存儲器。性能最高的存儲器可以具有最快的讀取和寫入訪問時間。事務(wù)大小(例如,從性能最高的存儲器讀取的數(shù)據(jù)的量子大小)可以是一行或兩行,該一行或兩行可以分別包括一個或兩個節(jié)點(diǎn)。
[0255]相比之下,排名最低的層級可以被映射到該多個存儲器中的性能最低的存儲器。性能最低的存儲器可以是與該多個存儲器中的其他存儲器相比具有相對更長的讀取和寫入訪問時間的性能最慢的存儲器。例如,性能最慢的存儲器可以是最大的存儲器,如不與HNA處理內(nèi)核408 —起位于芯片上的外部存儲器。如此,可以通過每讀取訪問具有更大的事務(wù)大小(如四行)來減少對此類存儲器的讀取訪問的數(shù)量。
[0256]根據(jù)在此披露的實(shí)施例,與排名最低的層級相關(guān)聯(lián)的層次節(jié)點(diǎn)事務(wù)大小可以被配置成使得逐出并用從被映射到排名最低的層級的對應(yīng)存儲器中提取的一行或多行替換來自節(jié)點(diǎn)高速緩存451的一行或多行??梢曰诖鎯﹂撝禂?shù)量的節(jié)點(diǎn)的一行或多行來確定該一行或多行。如此,如果對應(yīng)的層級為層級中排名最低的層級,則對應(yīng)的層次節(jié)點(diǎn)事務(wù)大小可以使HNA處理內(nèi)核408能夠高速緩存來自給定存儲器的閾值數(shù)量的節(jié)點(diǎn)。如此,如果對應(yīng)的層級為層級中排名最低的層級,HNA處理內(nèi)核408可以被配置成用于逐出高速緩存在節(jié)點(diǎn)高速緩存451中的閾值數(shù)量的節(jié)點(diǎn)。
[0257]根據(jù)在此披露的實(shí)施例,節(jié)點(diǎn)高速緩存451可以被配置成用于高速緩存閾值數(shù)量的節(jié)點(diǎn)。節(jié)點(diǎn)的閾值數(shù)量可以是基于與該多個存儲器相關(guān)聯(lián)的所有事務(wù)大小中的最大事務(wù)大小而可以被讀取的最大節(jié)點(diǎn)數(shù)量。例如,該多個存儲器的所有事務(wù)大小中的最大事務(wù)大小可以是與可以被映射到例如不與HNA處理內(nèi)核408共同位于芯片上的外部存儲器的排名最低的層級相關(guān)聯(lián)的給定事務(wù)大小。
[0258]將該一個或多個節(jié)點(diǎn)高速緩存在節(jié)點(diǎn)高速緩存451中可以基于從該多個存儲器中的給定存儲器讀取的一個或多個節(jié)點(diǎn)中的給定節(jié)點(diǎn)的高速緩存缺失和與層級中的被映射到給定存儲器的對應(yīng)層級相關(guān)聯(lián)的對應(yīng)的層次節(jié)點(diǎn)事務(wù)大小。與對應(yīng)層級相關(guān)聯(lián)的對應(yīng)的層次節(jié)點(diǎn)事務(wù)大小可以表示被從映射到對應(yīng)層級的給定存儲器提取的用于對給定存儲器的讀取訪問的最大節(jié)點(diǎn)數(shù)量。
[0259]HNA處理內(nèi)核408可以被配置成用于使用LRU或循環(huán)替換策略來從節(jié)點(diǎn)高速緩存451中逐出所高速緩存的一個或多個節(jié)點(diǎn)。根據(jù)在此披露的實(shí)施例,如果被映射到給定存儲器的對應(yīng)層級高于層級中的排名最低的層級,則可以基于層級確定逐出的一個或多個所高速緩存的節(jié)點(diǎn)的總數(shù)。例如,如果層級與為I的層次節(jié)點(diǎn)事務(wù)大小相關(guān)聯(lián),則節(jié)點(diǎn)高速緩存逐出的所高速緩存的節(jié)點(diǎn)的總數(shù)為1,并且可以基于LRU或循環(huán)替換策略確定所逐出的條目??倲?shù)為I是出于說明性目的,并且應(yīng)理解到,可以使用任何合適的層次節(jié)點(diǎn)事務(wù)大小。
[0260]圖13A為可以在至少一個處理器中實(shí)施的方法的示例實(shí)施例的流程圖1300,該處理器操作性地耦合至存儲器層次中的多個存儲器和安全裝置內(nèi)的節(jié)點(diǎn)高速緩存,該安全裝操作性地耦合至網(wǎng)絡(luò)。該方法可以開始(1302)并將至少一個有限自動機(jī)的多個節(jié)點(diǎn)存儲在多個存儲器中(1304)。該方法可以基于一個或多個節(jié)點(diǎn)中的給定節(jié)點(diǎn)的高速緩沖缺失和與層級相關(guān)聯(lián)的層次節(jié)點(diǎn)事務(wù)大小將多個節(jié)點(diǎn)中的存儲在存儲器層次中的層級處的多個存儲器中的給定存儲器中的一個或多個節(jié)點(diǎn)高速緩存在節(jié)點(diǎn)高速緩存內(nèi)(1306)。之后,在該示例實(shí)施例中,該方法結(jié)束(1308)。
[0261]圖13B為有效載荷1342和有效載荷1342中帶有對應(yīng)偏移1318的段1316的示例實(shí)施例的框圖1341。在示例實(shí)施例中,可以根據(jù)圖13B的有效載荷1342行走圖5A的每圖樣NFA圖形504中的節(jié)點(diǎn)。例如,行走器320可以試圖對有效載荷1342的在每圖樣NFA圖形504中的節(jié)點(diǎn)處的段1316進(jìn)行匹配以試圖將有效載荷1342與圖5A的正則表達(dá)式圖樣502匹配。
[0262]每圖樣NFA圖形504中的多個節(jié)點(diǎn)可以存儲在多個存儲器中,如圖7A的存儲器756a-Co該多個節(jié)點(diǎn)中的一個或多個節(jié)點(diǎn)(如每圖樣NFA圖形504中的節(jié)點(diǎn)N0506、N1508、N2510、和N3512)可以存儲在位于存儲器層次(如存儲器層次743)中的一個層級(如排名最高的層級708a)處的給定存儲器(如圖7A的性能最高的存儲器756a)中。如以下參照圖13C和圖13D披露的,基于給定節(jié)點(diǎn)(如節(jié)點(diǎn)N0506)的高速緩存缺失、和與層級708a相關(guān)聯(lián)的層次節(jié)點(diǎn)事務(wù)大小723a,節(jié)點(diǎn)N0506、N1508、N2510、和N3512可以高速緩存在節(jié)點(diǎn)高速緩存(如圖4A的節(jié)點(diǎn)高速緩存451)內(nèi)。
[0263]如圖13B中所示,有效載荷1342包括帶有對應(yīng)偏移1320a_n(即,0、1、2等)的段1322a-n(即,h、y、x等)。行走器320可以使有效載荷1342的段1322a_n中的一個段一次走過NFA圖形504以將正則表達(dá)式圖樣502與輸入流匹配??梢曰谄?320a_n中的給定段的為有效載荷1342內(nèi)的當(dāng)前偏移的對應(yīng)偏移來確定用于行走給定節(jié)點(diǎn)的段1322a-n中的該給定段。如以上參照圖5A所披露的,行走器320可以對當(dāng)前偏移進(jìn)行以下更新:使當(dāng)前偏移增量或減量。行走器320可以被配置成用于基于對分離節(jié)點(diǎn)N1508進(jìn)行遍歷來選擇上部ε路徑530a,因?yàn)樯喜喀怕窂?30a表示懶惰路徑。
[0264]圖13C為通過在分離節(jié)點(diǎn)N1508處選擇懶惰路徑根據(jù)圖13B的有效載荷行走圖5A的每圖樣NFA圖形504的處理周期的示例實(shí)施例的表1338a。
[0265]圖13D為表1338b,其為圖13C的表1338a的續(xù)表。如表1338a和1338b中所示,處理周期1340a-mm可以包括根據(jù)當(dāng)前偏移1332處段來行走當(dāng)前節(jié)點(diǎn)1330以確定匹配結(jié)果1334和基于匹配結(jié)果1334的行走器動作1336。在該示例實(shí)施例中,行走器320可以在處理周期1340a中根據(jù)當(dāng)前偏移1320a處的段1322a(即,“h”)來行走起始節(jié)點(diǎn)N0506。如以上參照圖6所披露的,可以基于HFA處理器110進(jìn)行的DFA處理產(chǎn)生的匹配結(jié)果來指定起始節(jié)點(diǎn)N0506和當(dāng)前偏移1320a。
[0266]當(dāng)段1322a與每圖樣NFA圖形504中的節(jié)點(diǎn)N0506處的字符“h”匹配時,HNA處理內(nèi)核408進(jìn)行的NFA處理產(chǎn)生行走器320進(jìn)行的匹配結(jié)果1334為肯定匹配結(jié)果的確定。如編譯器306通過與起始節(jié)點(diǎn)N0506相關(guān)聯(lián)的元數(shù)據(jù)(未示出)所指定的,行走器320可以在正向方向上行走并提取與節(jié)點(diǎn)N0506相關(guān)聯(lián)的元數(shù)據(jù)所指示的下一個節(jié)點(diǎn)并且可以使使當(dāng)前偏移從1320a( S卩,“O”)增量到1320b( S卩,“I”)。在該示例實(shí)施例中,節(jié)點(diǎn)N0506所指示的下一個節(jié)點(diǎn)為分離節(jié)點(diǎn)N1508。如此,行走器320針對處理周期1340a采取動作1336,該動作包括在有效載荷1342中將當(dāng)前偏移更新成“I”并轉(zhuǎn)換至分離節(jié)點(diǎn)N1508。轉(zhuǎn)換可以包括提取(在此也被稱為加載)分離節(jié)點(diǎn)NI508。
[0267]當(dāng)分離節(jié)點(diǎn)N1508呈現(xiàn)多個轉(zhuǎn)換路徑選項(xiàng)時,如ε路徑530a和530b,針對處理周期1340b的動作1336可以包括選擇上部ε路徑530a并提取與有效載荷1342無關(guān)的節(jié)點(diǎn)N2510而不從有效載荷1342消耗(S卩,處理)。由于分離節(jié)點(diǎn)N1508沒有執(zhí)行匹配函數(shù),當(dāng)前偏移/段1332沒有改變,并且因此,在處理周期1340b中沒有消耗(即,處理)有效載荷。
[0268]由于分離節(jié)點(diǎn)N1508呈現(xiàn)多個路徑選項(xiàng),動作1336可以包括存儲未探宄的上下文,如通過存儲節(jié)點(diǎn)N3512的間接或直接標(biāo)識符和當(dāng)前偏移1320b ( S卩,“ I ”)。在沿著所選擇的部分匹配路徑出現(xiàn)否定匹配結(jié)果的情況下,例如,如果沿著從節(jié)點(diǎn)N2510延伸的路徑在節(jié)點(diǎn)N2510或多個節(jié)點(diǎn)處確定否定匹配結(jié)果,則存儲未探宄的上下文可以使行走器320能夠記住返回至節(jié)點(diǎn)N3512以根據(jù)有效載荷1342中的偏移1320b“I”處的段行走節(jié)點(diǎn)N3512。
[0269]在該示例實(shí)施例中,ε轉(zhuǎn)換路徑530a的選擇會在節(jié)點(diǎn)Ν2510處或當(dāng)前線程的后續(xù)節(jié)點(diǎn)(如,節(jié)點(diǎn)N4514)處產(chǎn)生檢測到匹配失敗。例如,基于選擇上部路徑(即,ε轉(zhuǎn)換路徑530a),在處理周期1340c中,行走器320可以提取節(jié)點(diǎn)N2510并且試圖將當(dāng)前偏移1320b(即,“I”)處的段1322b(即,“y”)與節(jié)點(diǎn)N2510的元素“a”匹配。由于“y”與節(jié)點(diǎn)N2510處的元素“a”不匹配,處理周期1340c中的動作1336可以包括從圖4A的運(yùn)行堆棧460彈出條目。
[0270]所彈出的條目可以是最近推送的條目,如在該示例實(shí)施例中指示節(jié)點(diǎn)N3512和偏移1320b (即,“I”)、在處理周期1340b中推送的存儲條目。如此,如果檢測到匹配失敗,則可以遍歷針對ε轉(zhuǎn)換路徑530b存儲的線程,處理周期1340d、1340g、1340j、1340m、1340p、1340s、1340w、1340z、1340cc、1340ff、和1340ii中示出的就是這種情況。存儲未遍歷的轉(zhuǎn)換路徑可以包括通過存儲包括與當(dāng)前偏移的指示相關(guān)聯(lián)的下一個節(jié)點(diǎn)的標(biāo)識符的條目來將條目存儲在堆棧上,如圖4A的運(yùn)行堆棧460。
[0271]在處理周期1340d中,行走器320并且可以根據(jù)位于有效載荷1342中的偏移1320b處的段“y”轉(zhuǎn)換和行走節(jié)點(diǎn)N3512。如此,由于與節(jié)點(diǎn)N3512相關(guān)聯(lián)的元素指示針對不是換行符的段的肯定匹配,處理周期1340d示出了在處理周期1340d中匹配結(jié)果1334是肯定的。處理周期1340d中的動作1336可以包括將當(dāng)前偏移更新成偏移1320c并轉(zhuǎn)換回可以是節(jié)點(diǎn)N3512指示的下一個節(jié)點(diǎn)的分離節(jié)點(diǎn)N1508。
[0272]由于從分離節(jié)點(diǎn)508轉(zhuǎn)換的所有圓弧為ε轉(zhuǎn)換,當(dāng)在處理周期1340e中沒有更新當(dāng)前偏移時,行走器320可以再次選擇該多個路徑選項(xiàng)中的一條路徑并且不消耗(即,處理)來自有效載荷1342的段。在該示例實(shí)施例中,行走器320再次選擇ε轉(zhuǎn)換路徑530a。如此,行走器320通過推送節(jié)點(diǎn)N3512和當(dāng)前偏移(現(xiàn)在為1320c (即,“2”))再次將線程存儲在運(yùn)行堆棧460上。如處理周期1340f中所示,行走器320提取節(jié)點(diǎn)N2510并試圖將偏移1320c(即,“2”)處的段1322c(即,“X”)與節(jié)點(diǎn)N2510的元素“a”匹配。
[0273]由于“X”在節(jié)點(diǎn)N2510處不匹配,行走器320可以再次從運(yùn)行堆棧460彈出條目。所彈出的條目可以是最近推送的條目,如在該示例實(shí)施例中指示節(jié)點(diǎn)N3512和偏移1320c(即,“2”)、在處理周期1340e中推送的存儲條目。如此,行走器320可以根據(jù)位于有效載荷1342中的偏移1320c處的段“x”在處理周期1340f中轉(zhuǎn)換和再次行走節(jié)點(diǎn)N3512。如此,由于“X”不是換行字符,處理周期1340g示出了匹配結(jié)果1334是肯定的,并且處理周期1340g中的動作1336可以包括將當(dāng)前偏移更新成偏移1320d(即,“3”)和轉(zhuǎn)換回可以是與節(jié)點(diǎn)N3512相關(guān)聯(lián)的元數(shù)據(jù)指示的下一個節(jié)點(diǎn)的分離節(jié)點(diǎn)N1508。
[0274]行走器320可以按照圖13C和圖13D的表1338a和1338b中所示的后續(xù)處理周期13401-mm所指示的分別繼續(xù)使有效載荷1342的各段走過每圖樣NFA 504,直到達(dá)到標(biāo)記節(jié)點(diǎn)N5515。如表1338b的處理周期1340mm中所示,行走器320遍歷可以與指示輸入流中正則表達(dá)式圖樣502的最終(即,完整或整個)匹配的元數(shù)據(jù)相關(guān)聯(lián)的標(biāo)記節(jié)點(diǎn)N5515。
[0275]在該示例實(shí)施例中,使有效載荷1342走過每圖樣NFA圖形504可以包括標(biāo)識節(jié)點(diǎn)N3512處的失配、通過選擇上部ε路徑530a來選擇分離節(jié)點(diǎn)Ν1508處的懶惰路徑、以及遍歷節(jié)點(diǎn)N2510?;诠?jié)點(diǎn)N2520處的失配,可以再次遍歷節(jié)點(diǎn)N3512等等,直到確定節(jié)點(diǎn)N2520 處的匹配。例如,按照關(guān)于處理周期 1340b-d、1340e-g、1340h-j、1340k-m、1340n-p、和1340q-s所示,在時間和空間局部性兩者下進(jìn)行節(jié)點(diǎn)N1508、N2510、和N3512的遍歷,直到在處理周期1340u中、和如處理周期1340x_z、1340aa_cc、1340dd_ff、和1340gg_ii中所示,確定節(jié)點(diǎn)N2510處的肯定匹配,直到在處理周期1340kk中確定節(jié)點(diǎn)N2510處的肯定匹配。因此,表1338a和1338b的大多數(shù)處理周期示出了行走器320可以在時間和空間局部性兩者下遍歷節(jié)點(diǎn)N1508、N2510、和N3512。
[0276]根據(jù)在此披露的實(shí)施例,將節(jié)點(diǎn)高速緩存(如圖4A的節(jié)點(diǎn)高速緩存451)用于使輸入流的各段走過有限自動機(jī)能夠另外優(yōu)化行走的性能。例如,如以上參照圖7A所披露的,可以基于將如圖5A的每圖樣NFA 504的部分509的節(jié)點(diǎn)N0506、N1508、N2510、和N3512的連續(xù)節(jié)點(diǎn)存儲在性能更快的存儲器中來優(yōu)化行走器320的匹配性能,該性能更快的存儲器相對于可以存儲連續(xù)節(jié)點(diǎn)N4514和N5515的另一個存儲器可以位于排名更高的層級。
[0277]如以上所披露的,早前的節(jié)點(diǎn)(如圖5A的每圖樣NFA 504的部分509中所包括的節(jié)點(diǎn)N0506、N1508、N2510、和N3512)可以存儲在可以位于排名最高的層級的性能最高的存儲器內(nèi)。例如,部分509中所包括的節(jié)點(diǎn)N0506、N1508、N2510、和N3512可以存儲在圖7A的可以位于排名最高的層級(如存儲器層次743中的層級708a)的存儲756a內(nèi)。根據(jù)在此披露的實(shí)施例,部分509中所包括的節(jié)點(diǎn)N0506、N1508、N2510、和N3512可以基于可以被配置成用于層級708a的每圖樣NFA存儲分配設(shè)置710a存儲在存儲器756a內(nèi)。
[0278]在該示例實(shí)施例中,與排名最高的層級708a相關(guān)聯(lián)的層次節(jié)點(diǎn)事務(wù)大小(如圖7B的層次節(jié)點(diǎn)事務(wù)大小723a)可以表示該示例實(shí)施例中的四個節(jié)點(diǎn)。例如,層次節(jié)點(diǎn)事務(wù)大小723a可以包括從存儲器756a讀取一行或多行,例如,可以基于讀取訪問來讀取存儲在存儲器756a的一個或多個地址處的數(shù)據(jù),并且可以從存儲器756a讀取(即,取回、加載、或提取)四個節(jié)點(diǎn)。如此,層次節(jié)點(diǎn)事務(wù)大小723a表示當(dāng)基于引起讀取四個節(jié)點(diǎn)的單次讀取訪問可以讀取四個節(jié)點(diǎn)時,可以從位于排名最高的層級708a的存儲器756a讀取四個節(jié)點(diǎn)。例如,基于給定存儲器中每行存儲的節(jié)點(diǎn)的數(shù)量和從位于給定層級的給定存儲器中讀取的行(即,地址)數(shù),可以確定每事務(wù)(即,讀取訪問)讀取的節(jié)點(diǎn)的數(shù)量。在圖7B的示例實(shí)施例中,存儲器756b可以與層次節(jié)點(diǎn)事務(wù)大小723b相關(guān)聯(lián),并且存儲器756c可以與層次節(jié)點(diǎn)事務(wù)大小723c相關(guān)聯(lián)。
[0279]在該示例實(shí)施例中,在處理周期1340a中遍歷節(jié)點(diǎn)N0506將引起高速緩存缺失,因?yàn)楣?jié)點(diǎn)N0506還沒有被高速緩存在節(jié)點(diǎn)高速緩存451內(nèi)。其結(jié)果是,由于層次節(jié)點(diǎn)事務(wù)大小723a表示在該示例實(shí)施例中的四個節(jié)點(diǎn),可以將如節(jié)點(diǎn)N0506、N1508、N2510、和N3512的四個節(jié)點(diǎn)從存儲器756a帶到節(jié)點(diǎn)高速緩存451。
[0280]其結(jié)果是,行走器320可以從節(jié)點(diǎn)高速緩存451訪問節(jié)點(diǎn)N1508、N2510、和N3512直到處理周期1340v,在該處理周期中,基于在處理周期1340u中確定的節(jié)點(diǎn)N2510處的肯定匹配,行走器320根據(jù)有效載荷1342中的偏移1320g(即,“8”)處的段1322g(即,“q”)遍歷節(jié)點(diǎn)N4514。如此,可以有利地利用節(jié)點(diǎn)高速緩存451從而能夠通過高速緩存每圖樣NFA中的與該每圖樣NFA具有時間和空間局部性關(guān)系的多個節(jié)點(diǎn)(如該示例實(shí)施例中的節(jié)點(diǎn)N1508、N2510、和N3512)來進(jìn)一步優(yōu)化行走性能。對于從多個圖樣生成的NFA而言,將不存在每圖樣NFA內(nèi)的此類節(jié)點(diǎn)時間和空間局部性關(guān)系。因?yàn)樵诖伺兜膶?shí)施例可以基于生成為每圖樣NFA的NFA,提供了節(jié)點(diǎn)高速緩存451能夠?qū)崿F(xiàn)的優(yōu)化。
[0281]如此,除了可以減少HNA處理內(nèi)核408進(jìn)行的NFA處理的誤報數(shù)量的HFA處理器110進(jìn)行的數(shù)據(jù)包預(yù)篩選以外,在此披露的實(shí)施例可以通過在行走每圖樣NFA的節(jié)點(diǎn)過程中高速緩存節(jié)點(diǎn)來進(jìn)一步優(yōu)化匹配性能,這些每圖樣NFA基于對應(yīng)每圖樣NFA內(nèi)的節(jié)點(diǎn)局部性將節(jié)點(diǎn)分布到存儲器層次中的多個存儲器內(nèi)。如以上所披露的,在此披露的實(shí)施例可以基于以下理解來有利地將每個每圖樣NFA的節(jié)點(diǎn)分布到存儲器層次中的多個存儲器:規(guī)則(即,圖樣)越長,則越不太可能訪問(即,行走或遍歷)從規(guī)則(即,圖樣)的末端處的部分生成的節(jié)點(diǎn)。進(jìn)一步地,根據(jù)在此披露的實(shí)施例,可以基于多個存儲器的最大事務(wù)大小粒度來有利地確定節(jié)點(diǎn)高速緩存的大小以便通過減少對性能較慢的存儲器的訪問次數(shù)來進(jìn)一步優(yōu)化匹配性能。此外,在此披露的關(guān)于層次節(jié)點(diǎn)事務(wù)大小的實(shí)施例通過能夠高效地利用節(jié)點(diǎn)高速緩存中的有限數(shù)量的條目、通過基于與層級相關(guān)聯(lián)的給定事務(wù)(即,讀取訪問)大小而能夠確定高速緩存節(jié)點(diǎn)的總數(shù)來進(jìn)一步優(yōu)化匹配性能。
[0282]圖14為計(jì)算機(jī)1400內(nèi)部結(jié)構(gòu)的示例實(shí)施例的框圖,可以在該計(jì)算機(jī)中實(shí)施在此披露的各實(shí)施例。計(jì)算機(jī)1400包含一條系統(tǒng)總線1402,其中,總線為用于在計(jì)算機(jī)或處理系統(tǒng)的組件之間傳輸數(shù)據(jù)的硬件線集合。系統(tǒng)總線1402實(shí)質(zhì)上為一條將計(jì)算機(jī)系統(tǒng)的不同元件(例如,處理器、磁盤存儲器、存儲器、輸入/輸出端口、網(wǎng)絡(luò)端口等)耦合起來的共享管道,該管道能夠在這些元件之間傳輸信息。與系統(tǒng)總線1402操作性耦合的是用于將各輸入和輸出設(shè)備(例如,鍵盤、鼠標(biāo)、顯示器、打印機(jī)、擴(kuò)音器等)耦合到計(jì)算機(jī)1400的I/O設(shè)備接口 1404。網(wǎng)絡(luò)接口 1406允許計(jì)算機(jī)1400耦合到附接至網(wǎng)絡(luò)的各其他設(shè)備。存儲器1408為可以用于實(shí)施在此披露的實(shí)施例的計(jì)算機(jī)軟件指令1410和數(shù)據(jù)1412提供易失性存儲。磁盤存儲器1414為可以用于實(shí)施在此披露的實(shí)施例的計(jì)算機(jī)軟件指令1410和數(shù)據(jù)1412提供非易失性存儲。中央處理器單元1418也與系統(tǒng)總線1402操作性耦合并且提供用于執(zhí)行計(jì)算機(jī)指令。
[0283]可以使用計(jì)算機(jī)程序產(chǎn)品來配置在此披露的進(jìn)一步的實(shí)施例;例如,可以在用于實(shí)施在此披露的示例實(shí)施例的軟件中對控制器進(jìn)行編程。在此披露的進(jìn)一步的實(shí)施例可以包括包含可以由處理器執(zhí)行的指令的非瞬態(tài)計(jì)算機(jī)可讀介質(zhì),并且當(dāng)被執(zhí)行時,這些指令致使處理器完成在此披露的方法。應(yīng)理解到,可以用軟件、硬件、固件、或?qū)泶_定的其他類似實(shí)現(xiàn)方式來實(shí)現(xiàn)在此描述的框圖和流程圖中的元素。此外,可以用任何方式在軟件、硬件、或固件中組合或分離在此描述的框圖和流程圖中的元素。
[0284]應(yīng)理解到,術(shù)語“在此”可以轉(zhuǎn)換為結(jié)合在此介紹的教導(dǎo)的申請或?qū)@?,從而使得主題、定義、或數(shù)據(jù)進(jìn)行形成該結(jié)合的申請或?qū)@?br>
[0285]如果以軟件形式實(shí)現(xiàn),則可以用可以支持在此披露的示例實(shí)施例的任何語言來編寫軟件。可以用計(jì)算機(jī)可讀介質(zhì)的形式存儲軟件,如隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、光盤只讀存儲器(CD-ROM)等等。在操作時,通用或?qū)S锰幚砥饕员绢I(lǐng)域中很好理解的方式加載和執(zhí)行軟件。應(yīng)進(jìn)一步理解到,這些框圖和流程圖可以包括有區(qū)別地安排或定向的、或有區(qū)別地展現(xiàn)的更多或更少的元素。應(yīng)理解到,實(shí)現(xiàn)方式可以指定框圖、流程圖、和/或網(wǎng)絡(luò)圖和展示本發(fā)明的實(shí)施例的執(zhí)行的框圖和流程圖的數(shù)量。
[0286]盡管已經(jīng)參照其示例實(shí)施例具體地展示和描述了本發(fā)明,本領(lǐng)域技術(shù)人員應(yīng)理解到通過在不偏離由所附的權(quán)利要求書涵蓋的本發(fā)明的范圍的情況下可以從中做出在形式和細(xì)節(jié)上的各種改變。
【權(quán)利要求】
1.一種操作性地耦合至網(wǎng)絡(luò)的安全裝置,該安全裝置包括: 至少一個中央處理單元(CPU)內(nèi)核;以及 至少一個超非確定有限自動機(jī)(HNA)處理器,操作性地耦合至該至少一個CPU內(nèi)核并且專用于非確定有限自動機(jī)(NFA)處理,該至少一個HNA處理器包括: 多個超級集群,每個超級集群包括多個集群,該多個集群中的每個集群包括多個HNA處理單元(HPU),該至少一個CPU內(nèi)核被配置成用于選擇該多個超級集群中的至少一個超級集群; 一個HNA片上指令隊(duì)列,被配置成用于存儲至少一個HNA指令;以及 一個HNA調(diào)度器,被配置成用于選擇所選擇的該至少一個超級集群的該多個集群的該多個HPU中的一個給定HPU并且將該至少一個HNA指令分配給所選擇的該給定HPU以便發(fā)起對從網(wǎng)絡(luò)接收到的一個輸入流中的至少一個正則表達(dá)式圖樣進(jìn)行匹配。
2.如權(quán)利要求1所述的安全裝置,其中,每個超級集群進(jìn)一步包括一個相應(yīng)超級集群專有的一個超級集群圖形存儲器,該超級集群圖形存儲器對該相應(yīng)超級集群的相應(yīng)多個集群的相應(yīng)多個HPU是可訪問的并且被配置成用于靜態(tài)地存儲至少一個每圖樣NFA的一個節(jié)點(diǎn)子集,該節(jié)點(diǎn)子集由該至少一個每圖樣NFA的一個編譯器確定。
3.如權(quán)利要求2所述的安全裝置,其中: 每個超級集群進(jìn)一步包括一個相應(yīng)超級集群專有的至少一個超級集群字符類存儲器,每個至少一個超級集群字符類存儲器被配置成用于靜態(tài)地存儲多個正則表達(dá)式圖樣字符類定義。
4.如權(quán)利要求3所述的安全裝置,其中,該超級集群圖形存儲器和該至少一個超級集群字符類存儲器是統(tǒng)一的。
5.如權(quán)利要求3所述的安全裝置,其中,該相應(yīng)超級集群的相應(yīng)多個集群的相應(yīng)多個HPU共享該至少一個超級集群字符類存儲器。
6.如權(quán)利要求1所述的安全裝置,其中: 每個超級集群進(jìn)一步包括至少一個超級集群字符類存儲器,每個至少一個超級集群字符類存儲器專有于一個相應(yīng)超級集群的相應(yīng)多個集群中的一個給定集群并且由該給定集群的相應(yīng)多個HPU共享,每個至少一個超級集群字符類存儲器被配置成用于靜態(tài)地存儲多個正則表達(dá)式圖樣字符類定義。
7.如權(quán)利要求1所述的安全裝置,其中,該至少一個CPU內(nèi)核被進(jìn)一步配置成用于通過基于一個與該至少一個HNA指令相關(guān)聯(lián)的圖形標(biāo)識符限制超級集群選擇來選擇該多個超級集群中的該至少一個超級集群。
8.如權(quán)利要求7所述的安全裝置,其中,該圖形標(biāo)識符與多個每圖樣NFA中的一個給定每圖樣NFA相關(guān)聯(lián),并且限制該超級集群選擇包括一個確定:該給定每圖樣NFA的至少一個節(jié)點(diǎn)存儲在所選擇的該至少一個超級集群專有的一個超級集群圖形存儲器內(nèi)。
9.如權(quán)利要求7所述的安全裝置,其中: 該圖形標(biāo)識符與多個每圖樣NFA中的一個給定圖樣NFA相關(guān)聯(lián); 該HNA調(diào)度器被配置成用于從一個HPU限制集合選擇該給定HPU,該HPU限制集合包括所選擇的該至少一個超級集群的每個相應(yīng)多個集群各自的每個相應(yīng)多個HPU ;以及 該至少一個CPU內(nèi)核被進(jìn)一步配置成用于基于與該圖形標(biāo)識符相關(guān)聯(lián)的該給定每圖樣NFA的至少一個節(jié)點(diǎn)存儲在所選擇的該至少一個超級集群專有的一個超級集群圖形存儲器內(nèi)的一個確定來選擇該多個超級集群中的該至少一個超級集群。
10.如權(quán)利要求9所述的安全裝置,其中,該HNA調(diào)度器被進(jìn)一步配置成用于基于該HPU限制集合中的多個HPU的一次循環(huán)調(diào)度來從該HPU限制集合中選擇該給定HPU。
11.如權(quán)利要求9所述的安全裝置,其中,該HNA調(diào)度器被進(jìn)一步配置成用于基于該HPU限制集合中的每個HPU的瞬時加載來從該HPU限制集合中選擇該給定HPU。
12.如權(quán)利要求1所述的安全裝置,其中: 每個超級集群進(jìn)一步包括一個相應(yīng)超級集群專有的一個超級集群圖形存儲器;以及 每個超級集群圖形存儲器被配置成用于存儲多個每圖樣NFA中的至少一個每圖樣NFA的至少一個節(jié)點(diǎn)以復(fù)制該至少一個HNA處理器的每個超級集群的每個超級集群圖形存儲器中的該至少一個節(jié)點(diǎn)。
13.如權(quán)利要求12所述的安全裝置,其中: 該至少一個CPU內(nèi)核被進(jìn)一步配置成用于為該HNA調(diào)度器提供一個選項(xiàng):基于復(fù)制與該至少一個HNA指令相關(guān)聯(lián)的至少一個每圖樣NFA來選擇該至少一個超級集群的一個確定;以及 該HNA調(diào)度器被進(jìn)一步配置成用于: 基于所提供的該選項(xiàng)和(i)該多個超級集群的一次第一循環(huán)調(diào)度、(ii)該多個超級集群的一次第一瞬時加載或(iii) (i)與(ii)的組合來選擇該至少一個超級集群;以及 基于所選擇的至少一個超級集群的該多個集群的該多個HPU的一次第二循環(huán)調(diào)度、所選擇的該至少一個超級集群的該多個集群的該多個HPU的一次第二瞬時加載、或以上的組合來從所選擇的該至少一個超級集群的該多個集群的該多個HPU中選擇該給定HPU。
14.如權(quán)利要求1所述的安全裝置,其中,該至少一個HNA處理器進(jìn)一步包括該多個超級集群的該多個集群的該多個HPU可訪問的一個HNA片上圖形存儲器,該HNA片上圖形存儲器被配置成用于靜態(tài)地存儲至少一個每圖樣NFA的一個節(jié)點(diǎn)子集,該節(jié)點(diǎn)子集由該至少一個每圖樣NFA的一個編譯器確定。
15.如權(quán)利要求1所述的安全裝置,其中,該至少一個HNA指令為第一至少一個HNA指令,并且該安全裝置進(jìn)一步包括: 至少一個系統(tǒng)存儲器,操作性地耦合至該至少一個CPU內(nèi)核和該至少一個HNA處理器,該至少一個系統(tǒng)存儲器被配置成包括: 一個HNA芯片外指令隊(duì)列,用于存儲第二至少一個HNA指令,該第二至少一個HNA指令未決傳輸至該HNA處理器的該HNA片上指令隊(duì)列;以及 一個HNA芯片外圖形存儲器,被配置成用于靜態(tài)地存儲至少一個每圖樣NFA的一個節(jié)點(diǎn)子集,該節(jié)點(diǎn)子集由該至少一個每圖樣NFA的一個編譯器確定。
16.如權(quán)利要求15所述的安全裝置,進(jìn)一步包括: 至少一個本地存儲器控制器(LMC),其中,該至少一個LMC操作性地耦合至該至少一個HNA處理器和該至少一個系統(tǒng)存儲器,并且該至少一個LMC中的一個給定LMC被配置成用于能夠?qū)崿F(xiàn)該至少一個系統(tǒng)存儲器的非一致性訪問,以便該至少一個HNA處理器對該HNA芯片外圖形存儲器進(jìn)行訪問。
17.如權(quán)利要求15所述的安全裝置,其中,該至少一個系統(tǒng)存儲器被進(jìn)一步配置成包括一個HNA數(shù)據(jù)包數(shù)據(jù)存儲器,該數(shù)據(jù)包數(shù)據(jù)存儲器被配置成用于連續(xù)地存儲多個有效載荷,該多個有效載荷中的每個具有一個固定的最大長度并且與該HNA片上指令隊(duì)列中所存儲的該第一至少一個HNA指令或未決傳輸至該HNA片上指令隊(duì)列的該第二至少一個HNA指令中的一個給定HNA指令相關(guān)聯(lián)。
18.如權(quán)利要求17所述的安全裝置,進(jìn)一步包括至少一個LMC,并且其中,該至少一個系統(tǒng)存儲器被進(jìn)一步配置成包括: 一個HNA輸入堆棧分區(qū),被配置成用于存儲至少一個HNA輸入堆棧,每個至少一個HNA輸入堆棧被配置成用于存儲針對該多個超級集群的該多個集群的該多個HPU中的至少一個HPU的至少一項(xiàng)HNA輸入工作; 一個HNA芯片外運(yùn)行堆棧分區(qū),被配置成用于存儲至少一個HNA芯片外運(yùn)行堆棧以擴(kuò)展至少一個片上運(yùn)行堆棧的存儲,每個至少一個片上運(yùn)行堆棧被配置成用于存儲針對該至少一個HPU的至少一項(xiàng)運(yùn)行時間HNA工作; 一個HNA芯片外保存緩沖區(qū)分區(qū),被配置成用于擴(kuò)展至少一個片上保存緩沖區(qū)的存儲,每個至少一個片上保存緩沖區(qū)被配置成用于基于檢測到一個有效載荷邊界而存儲針對該至少一個HPU的該至少一項(xiàng)運(yùn)行時間HNA工作;以及 一個HNA芯片外結(jié)果緩沖區(qū)分區(qū),被配置成用于存儲該至少一個HPU所確定的該至少一個正則表達(dá)式圖樣的至少一個最終匹配結(jié)果條目以在該輸入流中進(jìn)行匹配,其中,所存儲的每個至少一個HNA指令對該HNA輸入堆棧分區(qū)的一個給定HNA輸入堆棧、該HNA芯片外運(yùn)行堆棧分區(qū)的一個給定HNA芯片外運(yùn)行堆棧、該HNA芯片外保存緩沖區(qū)分區(qū)的一個給定HNA芯片外保存緩沖區(qū)、以及該HNA芯片外結(jié)果緩沖區(qū)分區(qū)的一個給定HNA芯片外結(jié)果緩沖區(qū)進(jìn)行標(biāo)識。
19.如權(quán)利要求18所述的安全裝置,進(jìn)一步包括至少一個LMC,并且其中,該至少一個LMC中的一個給定LMC被配置成用于: 使該至少一個HNA處理器能夠通過一條一致路徑訪問該HNA數(shù)據(jù)包數(shù)據(jù)存儲器、HNA輸入堆棧分區(qū)、HNA芯片外指令隊(duì)列、HNA芯片外運(yùn)行堆棧分區(qū)、HNA芯片外保存緩沖區(qū)分區(qū)、以及該HNA芯片外結(jié)果緩沖區(qū)分區(qū);以及 使該至少一個HNA處理器能夠通過一條非一致路徑訪問該HNA芯片外圖形存儲器。
20.如權(quán)利要求1所述的安全裝置,其中,該多個超級集群的該多個集群的該多個HPU中的每個HPU包括: 一個節(jié)點(diǎn)高速緩存,被配置成用于高速緩存來自一個超級集群圖形存儲器、一個HNA片上圖形存儲器、或一個HNA芯片外圖形存儲器的一個或多個節(jié)點(diǎn); 一個字符類高速緩存,被配置成用于高速緩存來自一個超級集群字符類存儲器的一個或多個正則表達(dá)式圖樣字符類定義; 一個有效載荷緩沖區(qū),被配置成用于存儲來自一個HNA數(shù)據(jù)包數(shù)據(jù)存儲器的一個給定有效載荷,該至少一個HNA指令包括一個用于該HNA數(shù)據(jù)包數(shù)據(jù)存儲器中的該給定有效載荷中的一個位置的標(biāo)識符; 一個棧頂寄存器,被配置成用于存儲單項(xiàng)HNA工作; 一個運(yùn)行堆棧,被配置成用于存儲多項(xiàng)HNA工作; 一個統(tǒng)一存儲器,被配置成用于存儲一個保存堆棧的第一內(nèi)容以及一個匹配結(jié)果緩沖區(qū)的第二內(nèi)容,該第一內(nèi)容包括該運(yùn)行堆棧中所存儲的一項(xiàng)或多項(xiàng)HNA工作,并且該第二內(nèi)容包括一個或多個最終匹配結(jié)果;以及 一個HNA處理內(nèi)核,操作性地耦合至該節(jié)點(diǎn)高速緩存、字符類高速緩存、有效載荷緩沖區(qū)、棧頂寄存器、運(yùn)行堆棧、以及該統(tǒng)一存儲器,該HNA處理內(nèi)核被配置成用于根據(jù)在該有效載荷緩沖區(qū)內(nèi)所存儲的多個有效載荷段來行走至少一個每圖樣NFA,以確定該至少一個正則表達(dá)式圖樣的一次匹配。
21.如權(quán)利要求1所述的安全裝置,其中: 每個超級集群進(jìn)一步包括一個相應(yīng)超級集群專有的一個超級集群圖形存儲器; 該至少一個HNA處理器進(jìn)一步包括該多個超級集群所共享的一個HNA片上圖形存儲器; 該安全裝置進(jìn)一步包括至少一個系統(tǒng)存儲器,該系統(tǒng)存儲器被配置成包括該多個超級集群所共享的一個HNA芯片外圖形存儲器;以及 所選擇的該給定HPU被配置成用于基于所分配的該至少一個HNA指令根據(jù)該輸入流的一個有效載荷的多個段行走至少一個每圖樣NFA中的一個給定圖樣NFA的多個節(jié)點(diǎn),一個節(jié)點(diǎn)高速緩存中所存儲的所行走的這些節(jié)點(diǎn)對所選擇的該給定HPU、該超級集群圖形存儲器、該HNA片上圖形存儲器、該HNA芯片外圖形存儲器、或以上的組合是專有的。
22.如權(quán)利要求1所述的安全裝置,其中,所選擇的該至少一個超級集群的該多個集群的該多個HPU形成一個該HNA調(diào)度器可用于選擇的HPU資源池以能夠?qū)崿F(xiàn)該匹配的加速。
23.一種專用于非確定有限自動機(jī)(NFA)處理的超非確定有限自動機(jī)(HFA)處理器,該HNA處理器包括: 多個超級集群,每個超級集群包括多個集群,該多個集群中的每個集群包括多個HNA處理單元(HPU);以及 一個HNA片上指令隊(duì)列,被配置成用于存儲至少一個HNA指令,該多個超級集群中的所選擇的至少一個超級集群的該多個集群的該多個HPU形成一個可用于對該至少一個HNA指令進(jìn)行分配的HPU資源池;以及 一個HNA調(diào)度器,被配置成用于選擇所形成的該資源池中的一個給定HPU和將該至少一個HNA指令分配給所選擇的該給定HPU以便發(fā)起對從一個網(wǎng)絡(luò)接收到的一個輸入流中的至少一個正則表達(dá)式圖樣進(jìn)行匹配。
24.—種方法,包括: 操作性地將至少一個超非確定有限自動機(jī)(HNA)處理器耦合至至少一個CPU內(nèi)核,該至少一個HNA處理器專用于非確定有限自動機(jī)(NFA)處理;以及將該至少一個HNA處理器配置成包括: 多個超級集群,每個超級集群包括多個集群,該多個集群中的每個集群包括多個HNA處理單元(HPU),該至少一個CPU內(nèi)核被配置成用于選擇該多個超級集群中的至少一個超級集群; 一個HNA片上指令隊(duì)列,被配置成用于存儲至少一個HNA指令;以及一個HNA調(diào)度器,被配置成用于選擇所選擇的該至少一個超級集群的該多個集群的該多個HPU中的一個給定HPU并且將該至少一個HNA指令分配給所選擇的該給定HPU以便發(fā)起對從網(wǎng)絡(luò)接收到的一個輸入流中的至少一個正則表達(dá)式圖樣進(jìn)行匹配。
25.如權(quán)利要求24所述的方法,其中,每個超級集群進(jìn)一步包括一個相應(yīng)超級集群專有的一個超級集群圖形存儲器,該超級集群圖形存儲器對該相應(yīng)超級集群的相應(yīng)多個集群的相應(yīng)多個HPU是可訪問的并且被配置成用于靜態(tài)地存儲至少一個每圖樣NFA的一個節(jié)點(diǎn)子集,該節(jié)點(diǎn)子集由該至少一個每圖樣NFA的一個編譯器確定。
26.如權(quán)利要求25所述的方法,其中: 每個超級集群進(jìn)一步包括一個相應(yīng)超級集群專有的至少一個超級集群字符類存儲器,每個至少一個超級集群字符類存儲器被配置成用于靜態(tài)地存儲多個正則表達(dá)式圖樣字符類定義。
27.如權(quán)利要求26所述的方法,其中,該超級集群圖形存儲器和該至少一個超級集群字符類存儲器是統(tǒng)一的。
28.如權(quán)利要求26所述的方法,其中,該相應(yīng)超級集群的相應(yīng)多個集群的相應(yīng)多個HPU共享該至少一個超級集群字符類存儲器。
29.如權(quán)利要求24所述的方法,其中: 每個超級集群進(jìn)一步包括至少一個超級集群字符類存儲器,每個至少一個超級集群字符類存儲器專有于一個相應(yīng)超級集群的相應(yīng)多個集群中的一個給定集群并且由該給定集群的相應(yīng)多個HPU共享,每個至少一個超級集群字符類存儲器被配置成用于靜態(tài)地存儲多個正則表達(dá)式圖樣字符類定義。
30.如權(quán)利要求24所述的方法,其中,該至少一個CPU內(nèi)核被進(jìn)一步配置成用于通過基于一個與該至少一個HNA指令相關(guān)聯(lián)的圖形標(biāo)識符限制超級集群選擇來選擇該多個超級集群中的該至少一個超級集群。
31.如權(quán)利要求30所述的方法,其中,該圖形標(biāo)識符與多個每圖樣NFA中的一個給定每圖樣NFA相關(guān)聯(lián),并且限制該超級集群選擇包括一個確定:該給定每圖樣NFA的至少一個節(jié)點(diǎn)存儲在所選擇的該至少一個超級集群專有的一個超級集群圖形存儲器內(nèi)。
32.如權(quán)利要求30所述的方法,其中: 該圖形標(biāo)識符與多個每圖樣NFA中的一個給定圖樣NFA相關(guān)聯(lián); 該HNA調(diào)度器被配置成用于從一個HPU限制集合選擇該給定HPU,該HPU限制集合包括所選擇的該至少一個超級集群的每個相應(yīng)多個集群各自的每個相應(yīng)多個HPU ;以及 該至少一個CPU內(nèi)核被進(jìn)一步配置成用于基于與該圖形標(biāo)識符相關(guān)聯(lián)的該給定每圖樣NFA的至少一個節(jié)點(diǎn)存儲在所選擇的該至少一個超級集群專有的一個超級集群圖形存儲器內(nèi)的一個確定來選擇該多個超級集群中的該至少一個超級集群。
33.如權(quán)利要求32所述的方法,其中,該HNA調(diào)度器被進(jìn)一步配置成用于基于該HPU限制集合中的多個HPU的一次循環(huán)調(diào)度來從該HPU限制集合中選擇該給定HPU。
34.如權(quán)利要求32所述的方法,其中,該HNA調(diào)度器被進(jìn)一步配置成用于基于該HPU限制集合中的每個HPU的瞬時加載來從該HPU限制集合中選擇該給定HPU。
35.如權(quán)利要求24所述的方法,其中: 每個超級集群進(jìn)一步包括一個相應(yīng)超級集群專有的一個超級集群圖形存儲器;以及 每個超級集群圖形存儲器被配置成用于存儲多個每圖樣NFA中的至少一個每圖樣NFA的至少一個節(jié)點(diǎn)以復(fù)制該至少一個HNA處理器的每個超級集群的每個超級集群圖形存儲器中的該至少一個節(jié)點(diǎn)。
36.如權(quán)利要求35所述的方法,其中: 該至少一個CPU內(nèi)核被進(jìn)一步配置成用于為該HNA調(diào)度器提供一個選項(xiàng):基于復(fù)制與該至少一個HNA指令相關(guān)聯(lián)的至少一個每圖樣NFA的一個確定來選擇該至少一個超級集群;以及 該HNA調(diào)度器被進(jìn)一步配置成用于: 基于所提供的該選項(xiàng)和(i)該多個超級集群的一次第一循環(huán)調(diào)度、(ii)該多個超級集群的一次第一瞬時加載或(iii) (i)與(ii)的組合來選擇該至少一個超級集群;以及 基于所選擇的該至少一個超級集群的該多個集群的該多個HPU的一次第二循環(huán)調(diào)度、所選擇的該至少一個超級集群的該多個集群的該多個HPU的瞬時加載、或以上的組合來從所選擇的該至少一個超級集群的該多個集群的該多個HPU中選擇該給定HPU。
37.如權(quán)利要求24所述的方法,其中,該至少一個HNA處理器進(jìn)一步包括該多個超級集群的該多個集群的該多個HPU可訪問的一個HNA片上圖形存儲器,該HNA片上圖形存儲器被配置成用于靜態(tài)地存儲至少一個每圖樣NFA的一個節(jié)點(diǎn)子集,該節(jié)點(diǎn)子集由該至少一個每圖樣NFA的一個編譯器確定。
38.如權(quán)利要求24所述的方法,其中,該至少一個HNA指令為第一至少一個HNA指令,并且該方法進(jìn)一步包括: 至少一個系統(tǒng)存儲器,操作性地耦合至該至少一個CPU內(nèi)核和該至少一個HNA處理器,該至少一個系統(tǒng)存儲器被配置成包括: 一個HNA芯片外指令隊(duì)列,用于存儲第二至少一個HNA指令,該第二至少一個HNA指令未決傳輸至該HNA處理器的該HNA片上指令隊(duì)列;以及 一個HNA芯片外圖形存儲器,被配置成用于靜態(tài)地存儲至少一個每圖樣NFA的一個節(jié)點(diǎn)子集,該節(jié)點(diǎn)子集由該至少一個每圖樣NFA的一個編譯器確定。
39.如權(quán)利要求38所述的方法,進(jìn)一步包括: 至少一個本地存儲器控制器(LMC),其中,該至少一個LMC操作性地耦合至該至少一個HNA處理器和該至少一個系統(tǒng)存儲器,并且該至少一個LMC中的一個給定LMC被配置成用于能夠?qū)崿F(xiàn)該至少一個系統(tǒng)存儲器的非一致性訪問,以便該至少一個HNA處理器對該HNA芯片外圖形存儲器進(jìn)行訪問。
40.如權(quán)利要求38所述的方法,其中,該至少一個系統(tǒng)存儲器被進(jìn)一步配置成包括一個HNA數(shù)據(jù)包數(shù)據(jù)存儲器,該數(shù)據(jù)包數(shù)據(jù)存儲器被配置成用于連續(xù)地存儲多個有效載荷,該多個有效載荷中的每個具有一個固定的最大長度并且與該HNA片上指令隊(duì)列中所存儲的該第一至少一個HNA指令或未決傳輸至該HNA片上指令隊(duì)列的該第二至少一個HNA指令中的一個給定HNA指令相關(guān)聯(lián)。
41.如權(quán)利要求38所述的方法,進(jìn)一步包括至少一個LMC,并且其中,該至少一個系統(tǒng)存儲器被進(jìn)一步配置成包括: 一個HNA輸入堆棧分區(qū),被配置成用于存儲至少一個HNA輸入堆棧,每個至少一個HNA輸入堆棧被配置成用于存儲針對該多個超級集群的該多個集群的該多個HPU中的至少一個HPU的至少一項(xiàng)HNA輸入工作; 一個HNA芯片外運(yùn)行堆棧分區(qū),被配置成用于存儲至少一個HNA芯片外運(yùn)行堆棧以擴(kuò)展至少一個片上運(yùn)行堆棧的存儲,每個至少一個片上運(yùn)行堆棧被配置成用于存儲針對該至少一個HPU的至少一項(xiàng)運(yùn)行時間HNA工作; 一個HNA芯片外保存緩沖區(qū)分區(qū),被配置成用于擴(kuò)展至少一個片上保存緩沖區(qū)的存儲,每個至少一個片上保存緩沖區(qū)被配置成用于基于檢測到一個有效載荷邊界而存儲針對該至少一個HPU的該至少一項(xiàng)運(yùn)行時間HNA工作;以及 一個HNA芯片外結(jié)果緩沖區(qū)分區(qū),被配置成用于存儲該至少一個HPU所確定的該至少一個正則表達(dá)式圖樣的至少一個最終匹配結(jié)果條目以在該輸入流中進(jìn)行匹配,其中,所存儲的每個至少一個HNA指令對該HNA輸入堆棧分區(qū)的一個給定HNA輸入堆棧、該HNA芯片外運(yùn)行堆棧分區(qū)的一個給定HNA芯片外運(yùn)行堆棧、該HNA芯片外保存緩沖區(qū)分區(qū)的一個給定HNA芯片外保存緩沖區(qū)、以及該HNA芯片外結(jié)果緩沖區(qū)分區(qū)的一個給定HNA芯片外結(jié)果緩沖區(qū)進(jìn)行標(biāo)識。
42.如權(quán)利要求41所述的方法,進(jìn)一步包括至少一個LMC,并且其中,該至少一個LMC中的一個給定LMC被配置成用于: 使該至少一個HNA處理器能夠通過一條一致路徑訪問該HNA數(shù)據(jù)包數(shù)據(jù)存儲器、HNA輸入堆棧分區(qū)、HNA芯片外指令隊(duì)列分區(qū)、HNA芯片外運(yùn)行堆棧分區(qū)、HNA芯片外保存緩沖區(qū)分區(qū)、以及該HNA芯片外結(jié)果緩沖區(qū)分區(qū);以及 使該至少一個HNA處理器能夠通過一條非一致路徑訪問該HNA芯片外圖形存儲器。
43.如權(quán)利要求24所述的方法,其中,該多個超級集群的該多個集群的該多個HPU中的每個HPU包括: 一個節(jié)點(diǎn)高速緩存,被配置成用于高速緩存來自一個超級集群圖形存儲器、一個HNA片上圖形存儲器、或一個HNA芯片外圖形存儲器的一個或多個節(jié)點(diǎn); 一個字符類高速緩存,被配置成用于高速緩存來自一個超級集群字符類存儲器的一個或多個正則表達(dá)式圖樣字符類定義; 一個有效載荷緩沖區(qū),被配置成用于存儲來自一個HNA數(shù)據(jù)包數(shù)據(jù)存儲器的一個給定有效載荷,該至少一個HNA指令包括一個用于該HNA數(shù)據(jù)包數(shù)據(jù)存儲器中的該給定有效載荷中的一個位置的標(biāo)識符; 一個棧頂寄存器,被配置成用于存儲單項(xiàng)HNA工作; 一個運(yùn)行堆棧,被配置成用于存儲多項(xiàng)HNA工作; 一個統(tǒng)一存儲器,被配置成用于存儲一個保存堆棧的第一內(nèi)容以及一個匹配結(jié)果緩沖區(qū)的第二內(nèi)容,該第一內(nèi)容包括該運(yùn)行堆棧中所存儲的一項(xiàng)或多項(xiàng)HNA工作,并且該第二內(nèi)容包括一個或多個最終匹配結(jié)果;以及 一個HNA處理內(nèi)核,操作性地耦合至該節(jié)點(diǎn)高速緩存、字符類高速緩存、有效載荷緩沖區(qū)、棧頂寄存器、運(yùn)行堆棧、以及該統(tǒng)一存儲器,該HNA處理內(nèi)核被配置成用于根據(jù)在該有效載荷緩沖區(qū)內(nèi)所存儲的多個有效載荷段來行走至少一個每圖樣NFA,以確定該至少一個正則表達(dá)式圖樣的一次匹配。
44.如權(quán)利要求24所述的方法,其中: 每個超級集群進(jìn)一步包括一個相應(yīng)超級集群專有的一個超級集群圖形存儲器; 該至少一個HNA處理器進(jìn)一步包括該多個超級集群所共享的一個HNA片上圖形存儲器; 該方法進(jìn)一步包括至少一個系統(tǒng)存儲器,該系統(tǒng)存儲器被配置成包括該多個超級集群所共享的一個HNA芯片外圖形存儲器;以及 所選擇的該給定HPU被配置成用于基于所分配的該至少一個HNA指令根據(jù)該輸入流的一個有效載荷的多個段行走至少一個每圖樣NFA中的一個給定圖樣NFA的多個節(jié)點(diǎn),一個節(jié)點(diǎn)高速緩存中所存儲的所行走的這些節(jié)點(diǎn)對所選擇的該給定HPU、該超級集群圖形存儲器、該HNA片上圖形存儲器、該HNA芯片外圖形存儲器、或以上的組合是專有的。
45.如權(quán)利要求24所述的方法,其中,該多個超級集群的該多個集群的該多個HPU形成一個該HNA調(diào)度器可用于選擇的HPU資源池以能夠?qū)崿F(xiàn)該匹配的加速。
【文檔編號】G06F17/30GK104516940SQ201410432318
【公開日】2015年4月15日 申請日期:2014年8月28日 優(yōu)先權(quán)日:2013年8月30日
【發(fā)明者】R·戈亞爾, S·L·比拉, Y·沙納瓦, G·A·鮑查德, T·T·納卡達(dá) 申請人:凱為公司