VPP的crypto框架是VPP原生的一套數(shù)據(jù)加解密框架,其目的是為VPP框架中所有Graph node提供數(shù)據(jù)加密服務。VPP的Crypto框架包含一套為Graph node準備的用戶API,包括創(chuàng)建、更新和刪除密鑰,以及處理加密工作等;該框架還包括一條邏輯簡單且巧妙的crypto engine API,用于作為VPP Plugin的crypto engine來注冊和上載回調(diào)函數(shù),并根據(jù)每個crypto engine根據(jù)預設的優(yōu)先級來決定某個算法的缺省engine回調(diào)函數(shù)。目前可用的VPP crypto engine有
crypto native engine:根據(jù)不同CPU特性和指令集所特別優(yōu)化的plugin,性能最優(yōu)但支持算法較少。
ipsecmb engine:基于intel-ipsec-mb庫的plugin,僅支持英特爾的CPU。
openssl engine:支持算法最全面的純軟件實現(xiàn),性能相比以上兩個plugin相對弱一些。
可以看到,以上的engine均為軟件實現(xiàn)。優(yōu)點是邏輯結(jié)構(gòu)較為簡單,因為軟件能實時返回密碼運算結(jié)果,所以graph node可以立刻決定是否繼續(xù)或中止對某個網(wǎng)絡幀的流水線處理。然而,這一方式無法支持加密工作的卸載,如基于QAT的硬件卸載或基于多CPU Core合作的軟件卸載等。為了填補這一空缺我們在VPP 20.05提出了VPP 異步crypto 框架,并在VPP 20.09對其進行了進一步完善。
01
VPP同步crypto框架
剛才介紹到,已有的VPP Crypto框架是同步軟件實現(xiàn),圖1簡單介紹了如何在VPP IPsec中使用crypto框架。
圖1:VPP IPSec 使用 crypto 框架加密ESP Tunnel模式網(wǎng)絡幀
如圖,esp4-encrypt-tun是VPP的IPsec數(shù)據(jù)面處理的Graph Node。它將對接收到的網(wǎng)絡幀進行SA查表,并將SA 中預存的crypto key索引號連同要加密的數(shù)據(jù)指針和長度一起提交給加密算法的缺省處理函數(shù)進行加密。加密結(jié)果將在處理完成后立刻返回給esp4-encrypt-tun,在將處理失敗的網(wǎng)絡幀丟棄后,其余幀將交由下一個graph node處理。
02
收發(fā)間卸載
在討論如何將同步變成異步以前,我們首先需要介紹一下收發(fā)間卸載。
NIC的收發(fā)在某種程度上也屬于CPU卸載范疇的一部分:CPU無需在二進制數(shù)據(jù)和光電信號之間進行轉(zhuǎn)換,僅需要對二進制數(shù)據(jù),及網(wǎng)絡幀數(shù)據(jù)進行特定地址的讀寫即可完成網(wǎng)絡幀的收發(fā)工作,光電信號的轉(zhuǎn)換以及許多其他工作,如Checksum運算卸載,VXLan封裝和解封卸載等,都是由NIC完成的。雖然NIC也需要一些時間完成收發(fā)工作,但并不需要讓CPU一直等待其工作完成,而是和CPU并行地異步工作著。NIC對于能收發(fā)多少網(wǎng)絡幀能立刻判定,因此CPU無需過多干預收發(fā)結(jié)果,只管讀寫即可。
那么,如果這類卸載發(fā)生在收發(fā)網(wǎng)絡幀的中間呢?
這種網(wǎng)絡幀收發(fā)之間的卸載,我們稱為收發(fā)間卸載,恰恰是QAT的工作方式。CPU將加密的工作卸載給QAT,QAT在CPU的流水線之外并行地處理加密工作。并在另一個時間點將處理好的工作取回,并最終交由NIC進行發(fā)送。收發(fā)間卸載相比NIC卸載要相對復雜一些:CPU需要管理失敗的加解密命令的結(jié)果,因為QAT的操作對象僅為內(nèi)存而非網(wǎng)絡幀,CPU需要自行管理QAT交互使用的內(nèi)存;CPU也需要針對加解密操作的結(jié)果進行相應的處理;如非法的加密網(wǎng)絡幀需要丟棄等。我們還需要一個獨立于收網(wǎng)絡幀之外的輪詢(polling)操作,以便將QAT處理完成的數(shù)據(jù)及時取回。
03
VPP的異步crypto框架以及在VPP IPsec中的應用
要把圖1的同步模式轉(zhuǎn)變成異步模式,VPP的crypto 框架應該要有一個成雙的enqueue和dequeue回調(diào)函數(shù),同時底下應能有不同的async crypto engine來提供這些回調(diào)函數(shù)的指針。Esp4-encrypt-tun節(jié)點將需要加密的數(shù)據(jù)enqueue給cryptodev engine,并最終提交給QAT。我們還要增加了一個crypto dispatch node來輪詢QAT VF,來取回加密好的網(wǎng)絡幀并傳遞給esp4-encrypt-tun-post。籍此我們完成了esp4-encrypt-tun從同步到異步的轉(zhuǎn)變,如圖2所示。
圖2:VPP IPSec 使用 Async crypto 框架加密ESP Tunnel模式網(wǎng)絡幀
但光這樣還不夠。該圖僅僅描述了IPsec ESP在TUNNEL模式下的加密工作流程。VPP Crypto 的異步框架還能:
支持多engine 。和同步的VPP Crypto框架一樣,異步框架能讓不同的算法由不同的engine來處理。
所有的graph node都能獲取異步的crypto服務。它們僅需要想crypto dispatch節(jié)點告知自己在取回處理完成的網(wǎng)絡幀時的下一跳節(jié)點名稱。
Crypto dispatch節(jié)點在支持輪詢模式的同時,還能在僅有限影響性能的前提下支持中斷模式,這樣能最大化VPP異步框架的適用性,如在容器中運行等。
最后,我們還提供基于DPDK Cryptodev API的高性能Cryptodev engine,通過其實現(xiàn)對QAT卸載的高效支持。
04
如何在VPP IPSec中使用異步crypto框架及DPDK Cryptodev Engine
首先我們要保證在VPP的startup.conf中擁有足夠的QAT Virtual Function (VF)。因為一個VPP Worker線程將占用一個QAT VF的硬件隊列,因此QAT VF的數(shù)量應不小于VPP Worker內(nèi)核數(shù)量除以2。
VPP啟動后,使用如下命令能看到QAT 硬件隊列和VPP Worker線程的綁定關系
使用如下命令還可看到算法和engine的綁定關系
Engine 名后的“*”代表其為該算法的缺省engine,這時我們可以將缺省的engine從sw_scheduler變成dpdk_cryptodev
可以看到缺省engine 變成了DPDK Cryptodev
這時我們可以在IPsec中啟動異步模式
自此所有的IPsec工作流都將以異步的方式進行處理。在VPP的show run命令輸出可以看到多出來的用于處理IPsec異步模式的graph node。
我們還可以切換輪詢或者中斷模式(可選),中斷模式下crypto dispatch節(jié)點僅在隊列中還有網(wǎng)絡幀未被取出時才會啟用。使用中斷模式將視網(wǎng)絡情況略微影響性能,但能在沒有網(wǎng)絡幀要處理時盡量小地占用CPU。
原文標題:同步異步你說了算:VPP 的異步Crypto框架
文章出處:【微信公眾號:FPGA之家】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
責任編輯:haq
-
cpu
+關注
關注
68文章
11049瀏覽量
216159 -
VPP
+關注
關注
0文章
7瀏覽量
9697
原文標題:同步異步你說了算:VPP 的異步Crypto框架
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
如何在USB視頻類(UVC)框架中使用EZ-USB?FX3實現(xiàn)圖像傳感器接口USB視頻類(UVC)
如何在MATLAB中使用DeepSeek模型

如何在Windows中使用MTP協(xié)議
如何在智能手機系統(tǒng)中使用bq27505

如何在RS-485網(wǎng)絡中使用MSP430和MSP432 eUSCI和USCI模塊

IPSec VPN的含義與原理
如何在MSP430?MCU中使用智能模擬組合

如何在反向降壓-升壓拓撲中使用TPS6290x

如何在汽車CAN應用中使用負邊緣觸發(fā)觸發(fā)器節(jié)省電力

如何在顯示器設計中使用TPS6598x I2C控制TUSB564

如何在新興的低軌衛(wèi)星應用中使用數(shù)字隔離器隔離信號

評論