0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在VPP IPSec中使用异步crypto框架?

FPGA之家 来源:DPDK与SPDK开源社区 作者:DPDK与SPDK开源社区 2021-04-02 17:57 次阅读

VPP的crypto框架是VPP原生的一套数据加解密框架,其目的是为VPP框架中所有Graph node提供数据加密服务。VPP的Crypto框架包含一套为Graph node准备的用户API,包括创建、更新和删除密钥,以及处理加密工作等;该框架还包括一条逻辑简单且巧妙的crypto engine API,用于作为VPP Plugin的crypto engine来注册和上载回调函数,并根据每个crypto engine根据预设的优先级来决定某个算法的缺省engine回调函数。目前可用的VPP crypto engine有

crypto native engine:根据不同CPU特性和指令集所特别优化的plugin,性能最优但支持算法较少。

ipsecmb engine:基于intel-ipsec-mb库的plugin,仅支持英特尔的CPU。

openssl engine:支持算法最全面的纯软件实现,性能相比以上两个plugin相对弱一些。

可以看到,以上的engine均为软件实现。优点是逻辑结构较为简单,因为软件能实时返回密码运算结果,所以graph node可以立刻决定是否继续或中止对某个网络帧的流水线处理。然而,这一方式无法支持加密工作的卸载,如基于QAT的硬件卸载或基于多CPU Core合作的软件卸载等。为了填补这一空缺我们在VPP 20.05提出了VPP 异步crypto 框架,并在VPP 20.09对其进行了进一步完善。

01

VPP同步crypto框架

刚才介绍到,已有的VPP Crypto框架是同步软件实现,图1简单介绍了如何在VPP IPsec中使用crypto框架。

a1681868-92eb-11eb-8b86-12bb97331649.png

图1:VPP IPSec 使用 crypto 框架加密ESP Tunnel模式网络帧

如图,esp4-encrypt-tun是VPP的IPsec数据面处理的Graph Node。它将对接收到的网络帧进行SA查表,并将SA 中预存的crypto key索引号连同要加密的数据指针和长度一起提交给加密算法的缺省处理函数进行加密。加密结果将在处理完成后立刻返回给esp4-encrypt-tun,在将处理失败的网络帧丢弃后,其余帧将交由下一个graph node处理。

02

收发间卸载

在讨论如何将同步变成异步以前,我们首先需要介绍一下收发间卸载。

NIC的收发在某种程度上也属于CPU卸载范畴的一部分:CPU无需在二进制数据和光电信号之间进行转换,仅需要对二进制数据,及网络帧数据进行特定地址的读写即可完成网络帧的收发工作,光电信号的转换以及许多其他工作,如Checksum运算卸载,VXLan封装和解封卸载等,都是由NIC完成的。虽然NIC也需要一些时间完成收发工作,但并不需要让CPU一直等待其工作完成,而是和CPU并行地异步工作着。NIC对于能收发多少网络帧能立刻判定,因此CPU无需过多干预收发结果,只管读写即可。

那么,如果这类卸载发生在收发网络帧的中间呢?

这种网络帧收发之间的卸载,我们称为收发间卸载,恰恰是QAT的工作方式。CPU将加密的工作卸载给QAT,QAT在CPU的流水线之外并行地处理加密工作。并在另一个时间点将处理好的工作取回,并最终交由NIC进行发送。收发间卸载相比NIC卸载要相对复杂一些:CPU需要管理失败的加解密命令的结果,因为QAT的操作对象仅为内存而非网络帧,CPU需要自行管理QAT交互使用的内存;CPU也需要针对加解密操作的结果进行相应的处理;如非法的加密网络帧需要丢弃等。我们还需要一个独立于收网络帧之外的轮询(polling)操作,以便将QAT处理完成的数据及时取回。

03

VPP的异步crypto框架以及在VPP IPsec中的应用

要把图1的同步模式转变成异步模式,VPP的crypto 框架应该要有一个成双的enqueue和dequeue回调函数,同时底下应能有不同的async crypto engine来提供这些回调函数的指针。Esp4-encrypt-tun节点将需要加密的数据enqueue给cryptodev engine,并最终提交给QAT。我们还要增加了一个crypto dispatch node来轮询QAT VF,来取回加密好的网络帧并传递给esp4-encrypt-tun-post。籍此我们完成了esp4-encrypt-tun从同步到异步的转变,如图2所示。

a18c31ee-92eb-11eb-8b86-12bb97331649.png

图2:VPP IPSec 使用 Async crypto 框架加密ESP Tunnel模式网络帧

但光这样还不够。该图仅仅描述了IPsec ESP在TUNNEL模式下的加密工作流程。VPP Crypto 的异步框架还能:

支持多engine 。和同步的VPP Crypto框架一样,异步框架能让不同的算法由不同的engine来处理。

所有的graph node都能获取异步的crypto服务。它们仅需要想crypto dispatch节点告知自己在取回处理完成的网络帧时的下一跳节点名称。

Crypto dispatch节点在支持轮询模式的同时,还能在仅有限影响性能的前提下支持中断模式,这样能最大化VPP异步框架的适用性,如在容器中运行等。

最后,我们还提供基于DPDK Cryptodev API的高性能Cryptodev engine,通过其实现对QAT卸载的高效支持。

04

如何在VPP IPSec中使用异步crypto框架及DPDK Cryptodev Engine

首先我们要保证在VPP的startup.conf中拥有足够的QAT Virtual Function (VF)。因为一个VPP Worker线程将占用一个QAT VF的硬件队列,因此QAT VF的数量应不小于VPP Worker内核数量除以2。

a1eb61aa-92eb-11eb-8b86-12bb97331649.png

VPP启动后,使用如下命令能看到QAT 硬件队列和VPP Worker线程的绑定关系

a205d346-92eb-11eb-8b86-12bb97331649.png

使用如下命令还可看到算法和engine的绑定关系

a22ad7f4-92eb-11eb-8b86-12bb97331649.png

Engine 名后的“*”代表其为该算法的缺省engine,这时我们可以将缺省的engine从sw_scheduler变成dpdk_cryptodev

a24d79bc-92eb-11eb-8b86-12bb97331649.png

可以看到缺省engine 变成了DPDK Cryptodev

a26cf918-92eb-11eb-8b86-12bb97331649.png

这时我们可以在IPsec中启动异步模式

a2a62e40-92eb-11eb-8b86-12bb97331649.png

自此所有的IPsec工作流都将以异步的方式进行处理。在VPP的show run命令输出可以看到多出来的用于处理IPsec异步模式的graph node。

a2c31d02-92eb-11eb-8b86-12bb97331649.png

我们还可以切换轮询或者中断模式(可选),中断模式下crypto dispatch节点仅在队列中还有网络帧未被取出时才会启用。使用中断模式将视网络情况略微影响性能,但能在没有网络帧要处理时尽量小地占用CPU。

原文标题:同步异步你说了算:VPP 的异步Crypto框架

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10428

    浏览量

    206511
  • VPP
    VPP
    +关注

    关注

    0

    文章

    7

    浏览量

    9440

原文标题:同步异步你说了算:VPP 的异步Crypto框架

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    何在测试中使用ChatGPT

    Dimitar Panayotov 在 2023 年 QA Challenge Accepted 大会 上分享了他如何在测试中使用 ChatGPT。
    的头像 发表于 02-20 13:57 368次阅读

    何在DAVE IDE中使用XMC7200?

    能否在 DAVE IDE 中为 XMC 7200 EVK KIT 构建应用程序。我尝试打开一个项目但它最多只能显示 XMC48000。如何在 DAVE IDE 中使用 XMC7200 请帮忙。
    发表于 01-26 06:32

    IPSec的基本知识

    IPSec 是一项标准的安全技术,它通过在数据包中插人一个预定义头部的方式,来保障 OSI 上层协议数据的安全。IPSec 主要用于保护网络层(IP)数据,因此它提供了网络层的安全性。
    的头像 发表于 12-22 11:07 496次阅读
    <b class='flag-5'>IPSec</b>的基本知识

    何在Linux中使用htop命令

    本文介绍如何在 Linux 中使用 htop 命令。
    的头像 发表于 12-04 14:45 537次阅读
    如<b class='flag-5'>何在</b>Linux<b class='flag-5'>中使</b>用htop命令

    异步IO框架iouring介绍

    前言 Linux内核5.1支持了新的异步IO框架iouring,由Block IO大神也即Fio作者Jens Axboe开发,意在提供一套公用的网络和磁盘异步IO,不过io_uring目前在磁盘方面
    的头像 发表于 11-09 09:30 603次阅读
    <b class='flag-5'>异步</b>IO<b class='flag-5'>框架</b>iouring介绍

    linux异步io框架iouring应用

    Linux内核5.1支持了新的异步IO框架iouring,由Block IO大神也即Fio作者Jens Axboe开发,意在提供一套公用的网络和磁盘异步IO,不过io_uring目前在磁盘方面要比
    的头像 发表于 11-08 15:39 266次阅读
    linux<b class='flag-5'>异步</b>io<b class='flag-5'>框架</b>iouring应用

    IPSec增强原理过程—L2TP over IPSec

    L2TP over IPSec,即先用L2TP封装报文再用IPSec封装,这样可以综合两种VPN的优势,通过L2TP实现用户验证和地址分配,并利用IPSec保障通信的安全性。
    的头像 发表于 09-28 09:11 784次阅读
    <b class='flag-5'>IPSec</b>增强原理过程—L2TP over <b class='flag-5'>IPSec</b>

    何在Vitis HLS GUI中使用库函数?

    Vitis™ HLS 2023.1 支持新的 L1 库向导,本文将讲解如何下载 L1 库、查看所有可用功能以及如何在 Vitis HLS GUI 中使用库函数。
    的头像 发表于 08-16 10:26 616次阅读
    如<b class='flag-5'>何在</b>Vitis HLS GUI<b class='flag-5'>中使</b>用库函数?

    何在OpenVINO工具包中使用带推理引擎的blob?

    无法确定如何在OpenVINO™工具包中使用带推理引擎的 blob。
    发表于 08-15 07:17

    何在Arduino中使用APDS9960手势传感器

    电子发烧友网站提供《如何在Arduino中使用APDS9960手势传感器.zip》资料免费下载
    发表于 06-28 16:01 0次下载
    如<b class='flag-5'>何在</b>Arduino<b class='flag-5'>中使</b>用APDS9960手势传感器

    何在Arduino中使用20x4 I2C字符LCD显示器

    电子发烧友网站提供《如何在Arduino中使用20x4 I2C字符LCD显示器.zip》资料免费下载
    发表于 06-28 15:57 0次下载
    如<b class='flag-5'>何在</b>Arduino<b class='flag-5'>中使</b>用20x4 I2C字符LCD显示器

    何在OpenCV中使用基于深度学习的边缘检测?

    在这篇文章中,我们将学习如何在OpenCV中使用基于深度学习的边缘检测,它比目前流行的canny边缘检测器更精确。
    的头像 发表于 05-19 09:52 1669次阅读
    如<b class='flag-5'>何在</b>OpenCV<b class='flag-5'>中使</b>用基于深度学习的边缘检测?

    恒讯科技分析:ipsec和ssl有什么区别?

    什么是IPsec?IPsec(互联网协议安全)是一种 VPN 协议,用于加密和保护通过互联网发送的数据。IPsec VPN 提供出色的数据身份验证、机密性和完整性。要使IPsec正常工
    的头像 发表于 05-18 17:06 1066次阅读

    何在linux应用程序中使用pwm捕获?

    /402e4000.pwm/pwm/pwmchip6/pwm0# cat capture cat: capture: 函数未实现 那么,如何在 linux 应用程序中使用 pwm 捕获?
    发表于 05-10 07:05

    如何通过caam提高ipsec性能?

    ) <----------------------------> LS1046A_2(fm1-mac5) (1) 没有caam的ipsec
    发表于 04-25 09:51