李 莉,史國振,李雪梅
(1.北京電子科技學(xué)院 電子與通信工程系,北京 100070; 2.北京電子科技學(xué)院 信息安全研究所,北京 100070)
高速發(fā)展的數(shù)字經(jīng)濟(jì)和網(wǎng)絡(luò)業(yè)務(wù)面臨著越來越多安全問題,密碼服務(wù)作為保證數(shù)據(jù)傳輸安全的最基本的服務(wù),也成了保障網(wǎng)絡(luò)安全的不可或缺的環(huán)節(jié),密碼服務(wù)設(shè)備也成了安全網(wǎng)絡(luò)的基本配置。面向越來越多的業(yè)務(wù)安全需求,密碼設(shè)備必須提供不同的密碼運算服務(wù),且要求具有快速的數(shù)據(jù)處理能力。密碼運算作為計算密集型應(yīng)用,為了提高其處理速率,通常采用多密碼算法核并行處理、單密碼算法流水線處理的硬件實現(xiàn)架構(gòu),通過多核并行處理提高多業(yè)務(wù)處理的能力,以及單核流水線實現(xiàn)高的數(shù)據(jù)吞吐率。
考慮到經(jīng)過網(wǎng)絡(luò)傳輸?shù)亩嗝艽a業(yè)務(wù)流存在業(yè)務(wù)間的相互交叉,如何最大性能地發(fā)揮并行流水處理的有效性是必須考慮的問題。本文以多業(yè)務(wù)交叉的密碼業(yè)務(wù)流為研究對象,考慮不同密碼工作模式特點,提出了一種關(guān)聯(lián)業(yè)務(wù)數(shù)據(jù)遷移的硬件架構(gòu),從而更好地發(fā)揮密碼設(shè)備多密碼算法核并行流水處理性能。
如圖1所示,在高并發(fā)、多對多通信的場合下,請求密碼服務(wù)的數(shù)據(jù)可能來自不同的應(yīng)用服務(wù)器,即不同的數(shù)據(jù)鏈接,也可能來自同一數(shù)據(jù)鏈接下的不同業(yè)務(wù),為實現(xiàn)密碼服務(wù)的快速正確響應(yīng),密碼服務(wù)器必須有快速的異步并發(fā)數(shù)據(jù)處理能力。
文獻(xiàn)[1]研究了密碼算法在GPU上的并行化處理技術(shù),評估了在CUDA上對AES算法采用不同并行設(shè)計實現(xiàn)后的性能。文獻(xiàn)[2-5]研究了ECC算法的特點,通過對點乘、模乘運算的并行處理,提高了橢圓曲線的運算性能。戴紫彬等、L. Bossuet等研究了密碼算法的流水線、串行化實現(xiàn)技術(shù),以達(dá)到多核并行和高吞吐率目的[6,7]。
多密碼算法IP核的并行處理涉及兩方面的問題:并行處理架構(gòu)以及算法IP的調(diào)度。文獻(xiàn)[8]通過并行層疊執(zhí)行結(jié)構(gòu),實現(xiàn)ECC算法在數(shù)據(jù)級、線程級和任務(wù)級上的并行計算。文獻(xiàn)[9]針對密碼處理器運算過程中,數(shù)據(jù)訪存時間開銷大的問題,提出了一種層次化-分布-分體式流存儲結(jié)構(gòu),改善了數(shù)據(jù)訪存開銷。文獻(xiàn)[10]提出了一種減少核間通信開銷的設(shè)計方法。文獻(xiàn)[11]提出了一種面向分組密碼的可重構(gòu)異構(gòu)多核并行處理架構(gòu)RAMCA,具有獨立的指令傳輸通路、數(shù)據(jù)輸入通路和數(shù)據(jù)輸出通路,但未涉及交叉業(yè)務(wù)數(shù)據(jù)處理的問題。
考慮密碼運算的特點,密碼運算通常是以固定大小的分組數(shù)據(jù)為單位進(jìn)行的,且根據(jù)采用的密碼工作模式的不同,同一業(yè)務(wù)的不同分組間的關(guān)系也不同。以ECB、CTR工作模式為例,不同分組間的運算相互獨立,可以進(jìn)行并行運算;但是CBC、CFB等工作模式,后一分組數(shù)據(jù)的運算要用到前一分組數(shù)據(jù)的運算結(jié)果,即不同分組間存在關(guān)聯(lián)性,不能進(jìn)行并行運算。且數(shù)據(jù)流作業(yè)包間存在如圖2所示的分布情況。
在此,對分組間存在關(guān)聯(lián)性的業(yè)務(wù)稱為關(guān)聯(lián)業(yè)務(wù),關(guān)聯(lián)業(yè)務(wù)的存在,勢必影響多核密碼運算的并行流水處理,從而降低業(yè)務(wù)的處理速率。
文獻(xiàn)[12,13]提出了一種支持多種密碼算法運算隨機(jī)交叉運算的多核流數(shù)據(jù)處理模型,通過基于業(yè)務(wù)標(biāo)識的分層硬件調(diào)度實現(xiàn)業(yè)務(wù)流的并行處理。文獻(xiàn)[14]提出了一種本地存儲異構(gòu)多核并行架構(gòu),將數(shù)據(jù)的處理分為分轉(zhuǎn)、預(yù)處理、運算及同步重組4個階段,通過基于數(shù)據(jù)標(biāo)識的分級處理機(jī)制實現(xiàn)作業(yè)包與算法IP核間的映射與數(shù)據(jù)處理,增設(shè)密鑰及狀態(tài)存儲器(KSM)和KSM存取控制邏輯用于交叉訪問下關(guān)聯(lián)作業(yè)包中間狀態(tài)的存取,保證并行及串行工作模式下數(shù)據(jù)處理的正確性。考慮到數(shù)據(jù)存取速率的限制,以及架構(gòu)并沒有對算法核輸入端的關(guān)聯(lián)數(shù)據(jù)做額外的管理,仍會造成交叉數(shù)據(jù)在一定程度上的等待,從而影響數(shù)據(jù)吞吐率。本文在文獻(xiàn)[14]的基礎(chǔ)上,提出一種關(guān)聯(lián)業(yè)務(wù)數(shù)據(jù)遷移的硬件架構(gòu),刪除KSM,在算法核前端增設(shè)關(guān)聯(lián)CAM,算法核后端增設(shè)關(guān)聯(lián)FIFO的方式,進(jìn)行關(guān)聯(lián)作業(yè)包的管理,實現(xiàn)交叉數(shù)據(jù)流的不間斷高速處理。通常查找功能在硬件上的實現(xiàn)是在時鐘驅(qū)動下,對搜索空間的依次對照實現(xiàn)的,最壞情況下存儲容量為n的查找操作需要消耗n個時鐘周期,即查找時間復(fù)雜度為O(n), 本文采用關(guān)聯(lián)CAM,實現(xiàn)查找時間復(fù)雜度由O(n) 減少為O(1), 使得后序關(guān)聯(lián)作業(yè)包的查找可以實現(xiàn)快速定位,加速數(shù)據(jù)流的處理。后端采用關(guān)聯(lián)FIFO的設(shè)計,使得先運算完的關(guān)聯(lián)作業(yè)包的后序作業(yè)包可以及時得到處理,減少對前段關(guān)聯(lián)CAM的占用,從而減少系統(tǒng)對存儲空間的需求。
本文提出的關(guān)聯(lián)業(yè)務(wù)數(shù)據(jù)遷移的處理模型如圖3所示,通過將業(yè)務(wù)流中的關(guān)聯(lián)作業(yè)包遷移至關(guān)聯(lián)CAM,在其前序作業(yè)包運算完成時,將其送至算法核的處理方式,提高業(yè)務(wù)流的整體處理速率。
其中接口模塊用于接收網(wǎng)絡(luò)發(fā)送過來的數(shù)據(jù)流,為保證數(shù)據(jù)流的處理速率,采用PCIE接口的DMA方式進(jìn)行數(shù)據(jù)的接收;算法分轉(zhuǎn)模塊用于將數(shù)據(jù)流中的不同業(yè)務(wù)數(shù)據(jù)包發(fā)送至對應(yīng)的算法核進(jìn)行處理;Pre_FIFO模塊用于接收獨立作業(yè)包和關(guān)聯(lián)作業(yè)的首包數(shù)據(jù),進(jìn)行排隊暫存;關(guān)聯(lián)CAM用于存儲前序作業(yè)包尚未運算完成,因而不能進(jìn)行處理的后序關(guān)聯(lián)作業(yè)包;選擇模塊用于將關(guān)聯(lián)CAM或Pre_FIFO中的數(shù)據(jù)送至算法核輸入隊列進(jìn)行排隊等待運算。在關(guān)聯(lián)FIFO有運算完成的關(guān)聯(lián)作業(yè)包數(shù)據(jù)時,優(yōu)先處理關(guān)聯(lián)CAM中的數(shù)據(jù)。算法核模塊為不同的密碼算法IP核;輸出FIFO用于接收運算完成的作業(yè)包;關(guān)聯(lián)FIFO用于存儲運算完成的關(guān)聯(lián)作業(yè)包,其中尾包由于沒有后序作業(yè)包,所以不進(jìn)入關(guān)聯(lián)FIFO,關(guān)聯(lián)FIFO中的數(shù)據(jù)用于生成后序作業(yè)包運算的輸入數(shù)據(jù);輸出反饋模塊用于接收各算法核運算完成的數(shù)據(jù),并發(fā)送回數(shù)據(jù)應(yīng)用程序。
為便于業(yè)務(wù)流的處理,構(gòu)造如下的數(shù)據(jù)包格式: {Header,load}, Header={IDPROCESS,IDIV,head,tail,SEQ,CMD,l}。
IDPROCESS:進(jìn)程號,API接口的算法數(shù)據(jù)發(fā)送處理進(jìn)程為每個鏈接分配獨立的進(jìn)程號,與應(yīng)用進(jìn)程對應(yīng),用于區(qū)分不同的數(shù)據(jù)鏈接。
IDIV:業(yè)務(wù)號,每個業(yè)務(wù)有一個全局唯一的IDIV。
SEQ:同一業(yè)務(wù)流中的作業(yè)包序號,用于作業(yè)包重組。
Head:業(yè)務(wù)的首個作業(yè)包(首包)標(biāo)識。
tail:業(yè)務(wù)的最后一個作業(yè)包(尾包)標(biāo)識。
CMD:命令字,用于標(biāo)識業(yè)務(wù)處理類型, CMD={CYPID,OPTMODE}。
(1)CYPID字段標(biāo)識算法類型和算法IP的ID號。算法類型如SM2、SM3、SM4,每一類算法可以采用多個模塊實現(xiàn),此字段的位數(shù)在FPGA內(nèi)部邏輯資源充足的條件下決定了可以線性擴(kuò)展的算法模塊的個數(shù)。若此字段位數(shù)為n,則最多可擴(kuò)展2n個密碼算法模塊。為加強(qiáng)數(shù)據(jù)處理的并行性,算法類型和算法ID號采用統(tǒng)一編碼的方式,由加密終端CPU按照隨機(jī)調(diào)度的方式一次完成填寫,與算法模塊一一對應(yīng)的同時,保證算法IP核間的均衡性。
(2)OPTMODE字段表示算法的具體操作,例如加密、解密、簽名、驗簽以及不同的加/解密模式(ECB、CBC、OFB)等。
l:數(shù)據(jù)長度,用于指出本作業(yè)包內(nèi)運算數(shù)據(jù)的長度,一般為一次算法運算所需最小分組長度的整數(shù)倍。
load={IV,KEY,Data(l)} 為可變長度的數(shù)據(jù)區(qū)。其中IV表示初始向量或中間變量字段,KEY為密鑰字段,當(dāng)SEQ=1時,IV和KEY字段存在。Data(l) 為長度l的運算數(shù)據(jù)。在進(jìn)行業(yè)務(wù)數(shù)據(jù)的分割打包時,若最后一組數(shù)據(jù)不夠一次業(yè)務(wù)處理數(shù)據(jù)最小分組長度時,進(jìn)行補(bǔ)足。
上述并行數(shù)據(jù)處理架構(gòu)的FPGA實現(xiàn)如圖4所示,數(shù)據(jù)的處理分為3個階段,分別由分轉(zhuǎn)pd_se_ctrl、預(yù)處理IPx_CTRL及運算IPx這3個模塊完成,模塊間采用FIFO進(jìn)行數(shù)據(jù)流的緩沖。虛線框內(nèi)的部分可以根據(jù)各算法模塊進(jìn)行線性擴(kuò)展,算法模塊的具體實現(xiàn)個數(shù)可以不同。
FPGA與應(yīng)用程序之間采用PCIE接口,以DMA的方式進(jìn)行業(yè)務(wù)數(shù)據(jù)的傳遞。應(yīng)用程序?qū)I(yè)務(wù)數(shù)據(jù)拆分并封裝為通信作業(yè)包,以阻塞的方式寫入算法應(yīng)用進(jìn)程對應(yīng)的下行數(shù)據(jù)存儲區(qū)DOWN_FIFO中。算法數(shù)據(jù)的下行和上行讀寫操作分別由pd_tlp_ctrl和pu_tlp_ctrl完成。算法分轉(zhuǎn)模塊pd_se_ctrl完成對作業(yè)包頭命令CMD的解析,把數(shù)據(jù)分轉(zhuǎn)到相應(yīng)的IPx_DOWN FIFO或Related CAM中。
下行預(yù)處理模塊IPx_CTRL負(fù)責(zé)對命令的解析,并由此構(gòu)造算法模塊需要的處理子命令,以及獲取處理本作業(yè)包所需要的中間狀態(tài)數(shù)據(jù),并將作業(yè)包頭Header作為一個數(shù)據(jù)項放入本算法模塊對應(yīng)的作業(yè)包同步隊列IPx_SYN FIFO,將分組后的數(shù)據(jù)、處理子命令、算法狀態(tài),及獲取的基礎(chǔ)數(shù)據(jù)作為一個數(shù)據(jù)項放入本算法模塊對應(yīng)的算法運算隊列OPRTxFIFO。
上行控制模塊UP_IPx_CTRL將作業(yè)包同步隊列中提取的作業(yè)包頭與處理后數(shù)據(jù)隊列中提取的數(shù)據(jù)合并為一個帶有鏈路數(shù)據(jù)標(biāo)識的完整數(shù)據(jù)項,送入上行IPx_UP FIFO中,供pu_tlp_ctrl根據(jù)鏈路數(shù)據(jù)標(biāo)識將運算結(jié)果返回給相應(yīng)的上行數(shù)據(jù)存儲區(qū)。
隨機(jī)交叉的數(shù)據(jù)流以及異構(gòu)IP核,不能保證關(guān)聯(lián)作業(yè)包進(jìn)入處理系統(tǒng)時,其前序作業(yè)包已處理完,因此,該系統(tǒng)在架構(gòu)中增加關(guān)聯(lián)CAM和關(guān)聯(lián)FIFO。其中關(guān)聯(lián)CAM用來存儲尚不能進(jìn)入算法核進(jìn)行處理,處于等待前序關(guān)聯(lián)作業(yè)包運算結(jié)果的關(guān)聯(lián)作業(yè)包;關(guān)聯(lián)FIFO用于保存關(guān)聯(lián)業(yè)務(wù)中間狀態(tài),即關(guān)聯(lián)作業(yè)包(非尾包)的運算結(jié)果,以供對應(yīng)業(yè)務(wù)的后序作業(yè)包使用。
由于每個算法IP核都有自己獨立的上行隊列和下行隊列,所以增加算法IP核不會對其它的操作造成影響。
數(shù)據(jù)的處理采用兩級命令解析的方式進(jìn)行,系統(tǒng)按照通信數(shù)據(jù)包中包含的屬性信息對數(shù)據(jù)進(jìn)行解析和分流,主要取決于CMD={CYPID,OPTMODE}。 第一級解析在分轉(zhuǎn)模塊pd_se_ctrl中完成,根據(jù)算法類型CYPID字段,進(jìn)行數(shù)據(jù)的分流,將不同密碼算法需求的作業(yè)包分轉(zhuǎn)至對應(yīng)的下行數(shù)據(jù)IPx_DOWN FIFO或Related CAM中,排隊等待;第二級解析在下行預(yù)處理模塊IPx_CTRL中完成,根據(jù)運算模式OPTMODE,生成對應(yīng)的子命令,并將命令和相應(yīng)的數(shù)據(jù)傳送給IP核接口OPRTxFIFO中。完整的數(shù)據(jù)處理過程包含6個狀態(tài),見表1。
數(shù)據(jù)處理狀態(tài)轉(zhuǎn)換如圖5所示。
內(nèi)容可尋址存儲器(CAM)具有高速、并行、易擴(kuò)展的特點,常用于路由器中,實現(xiàn)地址的快速查找。這里用于實現(xiàn)根據(jù)任務(wù)ID和作業(yè)包序號快速查找同一任務(wù)后序作業(yè)包。關(guān)聯(lián)CAM模塊如圖6所示,內(nèi)部包含任務(wù)ID和作業(yè)包序號存儲列表id_seq_list、列表狀態(tài)寄存器status_reg、作業(yè)包數(shù)據(jù)存儲雙端口DPRAM、數(shù)據(jù)拆分寫控制模塊write_ctrl,以及一個查詢條件比較模塊compare。
表1 數(shù)據(jù)處理狀態(tài)
關(guān)聯(lián)CAM模塊的讀和寫相互獨立,可并行執(zhí)行,通過列表狀態(tài)寄存器status_reg保證并行執(zhí)行時讀寫操作的不沖突。
關(guān)聯(lián)CAM的寫操作由分轉(zhuǎn)模塊pd_se_ctrl啟動,當(dāng)分轉(zhuǎn)模塊判斷作業(yè)包為關(guān)聯(lián)作業(yè)包,且非首包,則將此數(shù)據(jù)通過din_wr送CAM保存,算法如下:
if OPTMODE=={CBC|OFB|CFB}
if head!=1
begin
wr_en<=1;
din_wr<=作業(yè)包;
end
write_ctrl模塊將數(shù)據(jù)拆分為兩部分:任務(wù)ID和作業(yè)包序號{IDIV,SEQ}、 作業(yè)包數(shù)據(jù)data,其中{IDIV,SEQ} 存儲在列表中,Data存儲在DPRAM中,且保持地址聯(lián)動。
關(guān)聯(lián)CAM的讀操作由Related FIFO的非空狀態(tài)啟動,給出rd_en信號,由Related FIFO給出的前序作業(yè)包的運算結(jié)果din_rd作為查詢輸入信號,查詢條件為同一任務(wù)ID和后序作業(yè)包序號,即IDIV&& (SEQ+1)。 根據(jù)查詢條件對id_seq_list單元進(jìn)行并行搜索,給出滿足條件的作業(yè)包數(shù)據(jù)所在的地址rd_addr,以此為地址從雙口DPRAM中將數(shù)據(jù)取出,送對應(yīng)IP核的輸入FIFO。
其中ram_full和infifo_almostfull為流控信號,保證作業(yè)包的不丟失。
在這種設(shè)計方式下,若前序作業(yè)包存在,則從查詢數(shù)據(jù)(din_rd,ren)給出到找到結(jié)果(dout),只需要4個時鐘周期,其中匹配成功(find)只需兩個時鐘周期,如圖7所示。
考慮到及時處理運算完成的關(guān)聯(lián)作業(yè)包,以便移除其對關(guān)聯(lián)CAM的占用,降低對CAM存儲容量的需求,增加利用率,輸出關(guān)聯(lián)作業(yè)包的存儲采用FIFO的形式,下行預(yù)處理模塊IPx_CTRL按作業(yè)包完成順序接收其后序作業(yè)包。
作業(yè)包在算法IP核中運算完成后,上行控制模塊UP_IPx_CTRL判斷運算結(jié)果是否為關(guān)聯(lián)業(yè)務(wù)作業(yè)包輸出,若為非關(guān)聯(lián)作業(yè)包或關(guān)聯(lián)作業(yè)包的尾包數(shù)據(jù),則將其送至輸出FIFO;若為關(guān)聯(lián)作業(yè)包(尾包除外)輸出,則在將其送至輸出FIFO的同時,將其送至關(guān)聯(lián)FIFO。
if (OPTMODE=={CBC|OFB|CFB} && tail==0)
begin
UP_FIFO_data<=作業(yè)包;
UP_FIFO_wr<=1;
if (Related_FIFO_almostfull==0)
begin
Related_FIFO_full_flag<=0;//流控信號
Related_FIFO_wr<=1;
Related_FIFO_data<=作業(yè)包
end
end
考慮到交叉數(shù)據(jù)流的復(fù)雜性,極端情況下,可能在其前序作業(yè)包處理完成時,其后序作業(yè)包尚未進(jìn)入關(guān)聯(lián)CAM,為避免對其它任務(wù)作業(yè)包的阻塞,在經(jīng)過一定的時鐘周期,仍沒有匹配作業(yè)包的情況下(find==0),將關(guān)聯(lián)FIFO的此輸出數(shù)據(jù)重新轉(zhuǎn)存至關(guān)聯(lián)FIFO,從而越過此作業(yè)包,進(jìn)行下一個作業(yè)包的處理,如圖8所示。
數(shù)據(jù)間的同步通過同步IPx_SYN FIFO和下行預(yù)處理模塊IPx_CTRL、數(shù)據(jù)重組模塊UP_IPx_CTRL完成。下行預(yù)處理模塊IPx_CTRL將作業(yè)包的包頭取出,送入同步IPx_SYN FIFO,數(shù)據(jù)重組模塊UP_IPx_CTRL在作業(yè)包運算完成后,再將運算完成的數(shù)據(jù)與同步IPx_SYN FIFO中存儲的包頭數(shù)據(jù)組合為一個完整的作業(yè)包輸出。由于作業(yè)包包頭同步信息的存儲單元和算法處理IP核的接口單元均為FIFO,保證了UP_IPx_CTRL進(jìn)行封裝時包頭和處理數(shù)據(jù)運算結(jié)果間的一致性。
將此硬件實現(xiàn)方案在FPGA上進(jìn)行實現(xiàn),并在modelsim下仿真,觀察不同作業(yè)包和不同關(guān)聯(lián)業(yè)務(wù)作業(yè)包數(shù)量下的數(shù)據(jù)流執(zhí)行時間。
以最多需要3種IP進(jìn)行處理的5個業(yè)務(wù)共20個作業(yè)包隨機(jī)交叉的數(shù)據(jù)流為例,仿真結(jié)果如圖9所示,為便于觀察,只取數(shù)據(jù)流上下行中存儲模塊的讀信號,其中find1、find2、find3為3個IP核對應(yīng)的關(guān)聯(lián)CAM匹配輸出,可以看出關(guān)聯(lián)CAM2沒有信號,表示數(shù)據(jù)流中沒有需要IP2處理的關(guān)聯(lián)業(yè)務(wù),因此IP2的關(guān)聯(lián)FIFO也無數(shù)據(jù),ip2_out_dependfifo_rd始終為0,IP2輸入FIFO上infifo2_rd信號的存在是由于數(shù)據(jù)流中存在需要IP2處理的非關(guān)聯(lián)業(yè)務(wù)。
關(guān)聯(lián)CAM的存儲深度為48,若任務(wù)id和作業(yè)包序號分別為32 bit和16 bit,分組運算數(shù)據(jù)的大小為256 bit,則需要的存儲空間為: 48×(32+16)+48×256≤16K。
當(dāng)數(shù)據(jù)流總量為100個作業(yè)包,隨機(jī)屬于10個不同的業(yè)務(wù),其中4個業(yè)務(wù)為關(guān)聯(lián)業(yè)務(wù),且關(guān)聯(lián)作業(yè)包的總數(shù)為40個,即關(guān)聯(lián)業(yè)務(wù)量占總業(yè)務(wù)量的40%。Modelsim的仿真結(jié)果如圖10所示,其中橫軸表示數(shù)據(jù)流中作業(yè)包的分布,白色塊表示獨立作業(yè)包,其它色塊表示關(guān)聯(lián)作業(yè)包,且相同顏色的色塊屬于同一關(guān)聯(lián)業(yè)務(wù)。縱軸表示數(shù)據(jù)流的執(zhí)行時間。
當(dāng)數(shù)據(jù)流總量為100個作業(yè)包,且分別屬于10個不同的業(yè)務(wù),其中6個業(yè)務(wù)為關(guān)聯(lián)業(yè)務(wù),關(guān)聯(lián)作業(yè)包的總數(shù)為60個,即關(guān)聯(lián)業(yè)務(wù)量占總業(yè)務(wù)量的60%。Modelsim的仿真結(jié)果如圖11所示。
可見,相同大小的數(shù)據(jù)流,且數(shù)據(jù)流中的關(guān)聯(lián)業(yè)務(wù)和關(guān)聯(lián)作業(yè)包的數(shù)量相同時,數(shù)據(jù)流的執(zhí)行時間與不同關(guān)聯(lián)業(yè)務(wù)作業(yè)包的數(shù)量及其在數(shù)據(jù)流中的位置有關(guān)。
若數(shù)據(jù)流中有n個關(guān)聯(lián)業(yè)務(wù),每個關(guān)聯(lián)業(yè)務(wù)的作業(yè)包數(shù)分別為a1,a2,…,an個,有m個非關(guān)聯(lián)業(yè)務(wù),每個非關(guān)聯(lián)業(yè)務(wù)的作業(yè)包數(shù)分別為b1,b2,…,bn個。若能將非關(guān)聯(lián)作業(yè)包穿插在關(guān)聯(lián)作業(yè)包之間,在∑aiTi≥∑bi的情況下,則在IP核流水線處理業(yè)務(wù)的情況下,可以使得非關(guān)聯(lián)作業(yè)包得到盡快的處理,而數(shù)據(jù)流的整體處理時間取決于關(guān)聯(lián)作業(yè)包的串行執(zhí)行時間。
隨機(jī)選取6組數(shù)據(jù)流,每組數(shù)據(jù)流的作業(yè)包數(shù)均為100,且分別屬于10個不同的業(yè)務(wù),其中6個業(yè)務(wù)為關(guān)聯(lián)業(yè)務(wù),關(guān)聯(lián)作業(yè)包的總數(shù)為60個。將關(guān)聯(lián)CAM改為關(guān)聯(lián)FIFO,對這6組數(shù)據(jù)流的執(zhí)行時間進(jìn)行測試,仿真結(jié)果如圖12所示。
可見,采用關(guān)聯(lián)CAM對關(guān)聯(lián)作業(yè)包進(jìn)行遷移的設(shè)計方式有利于提升交叉業(yè)務(wù)數(shù)據(jù)流的處理速度。由于IP核采用流水線的數(shù)據(jù)處理方式,所以在系統(tǒng)設(shè)計中,對于同一功能的IP進(jìn)行數(shù)量的擴(kuò)展,其對數(shù)據(jù)流處理速度的提升貢獻(xiàn)不大,省出的邏輯空間可以用于擴(kuò)展關(guān)聯(lián)CAM和關(guān)聯(lián)FIFO。
本文提出并在FPGA上實現(xiàn)了一種關(guān)聯(lián)業(yè)務(wù)數(shù)據(jù)遷移的流數(shù)據(jù)并行處理系統(tǒng)。仿真結(jié)果驗證,在多種不同的應(yīng)用同時請求密碼運算服務(wù)的場景下,該系統(tǒng)可以實現(xiàn)對交叉業(yè)務(wù)數(shù)據(jù)的正確處理,避免輸入數(shù)據(jù)流阻塞現(xiàn)象的發(fā)生,實現(xiàn)業(yè)務(wù)數(shù)據(jù)的不間斷處理。該系統(tǒng)的不足在于隨著交叉程度的增加,所需關(guān)聯(lián)FIFO和關(guān)聯(lián)CAM的空間也要適當(dāng)增加,否則不能保證非關(guān)聯(lián)數(shù)據(jù)的及時處理。