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

    文章

    11216

    浏览量

    222942
  • VPP
    VPP
    +关注

    关注

    0

    文章

    15

    浏览量

    10023

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    何在AMD Vitis Unified IDE中使用系统设备树

    您将在这篇博客中了解系统设备树 (SDT) 以及如何在 AMD Vitis Unified IDE 中使用 SDT 维护来自 XSA 的硬件元数据。本文还讲述了如何对 SDT 进行操作,以便在 Vitis Unified IDE 中实现更灵活的使用场景。
    的头像 发表于 11-18 11:13 2813次阅读
    如<b class='flag-5'>何在</b>AMD Vitis Unified IDE<b class='flag-5'>中使</b>用系统设备树

    何在VS code中配置Zephyr集成开发环境

    上一篇文章介绍了如何在VS code中使用瑞萨官方插件为RA芯片创建项目与项目调试,相信大家对RA在VS code中的开发有了基础的了解。
    的头像 发表于 11-05 14:46 1068次阅读
    如<b class='flag-5'>何在</b>VS code中配置Zephyr集成开发环境

    SONiC控制面 + VPP数据面:AsterNOS-VPP的高性能开放之路

    AsterNOS-VPP 是星融元继数据中心和园区网络场景后,面向边缘路由场景推出的开放网络操作系统,其融合了 SONiC 强大的控制面能力以及 VPP 的高性能数据转发能力,实现新一代企业级园区路由器和防火墙等功能,帮助用户构建高性能、灵活性和成本效益的网络环境。
    的头像 发表于 10-22 14:23 909次阅读
    SONiC控制面 + <b class='flag-5'>VPP</b>数据面:AsterNOS-<b class='flag-5'>VPP</b>的高性能开放之路

    何在vivadoHLS中使用.TLite模型

    本帖欲分享如何在vivadoHLS中使用.TLite模型。在Vivado HLS中导入模型后,需要设置其输入和输出接口以与您的设计进行适配。 1. 在Vivado HLS项目中导入模型文件 可以
    发表于 10-22 06:29

    VPP加密芯片撑起虚拟电厂安全

    算法(SM2/SM3/SM4),并采用通过认证的密码产品,因此,加密芯片是满足这些要求的重要硬件基础。   而在实际应用中,包括保障数据安全,以及确保设备身份认证的准确性等,都需要用到安全加密芯片。   同时,VPP对于安全加密芯片
    的头像 发表于 09-28 08:13 3931次阅读

    VPP核心组件——计量芯片

    电子发烧友网综合报道 作为一种过先进的信息通信、计量控制和系统集成技术,VPP(虚拟电厂)将分布式能源(如光伏、风电、储能、电动汽车等)聚合起来,形成可调度、可交易的虚拟发电资源,以参与电力市场
    的头像 发表于 09-13 00:25 3669次阅读

    请问如何在 Keil μVision 或 IAR EWARM 中使用观察点进行调试?

    何在 Keil μVision 或 IAR EWARM 中使用观察点进行调试?
    发表于 08-20 06:29

    轻量级加密解密:Crypto核心库守护数据安全的终极答案

    在数据安全领域,“重量级”不等于“强效”。Crypto核心库摒弃臃肿设计,聚焦轻量化创新,通过精简算法与高效逻辑,实现加密解密的双重突破——既让数据安全无懈可击,又让系统运行轻如鸿毛。 加解密算法
    的头像 发表于 08-04 14:41 699次阅读
    轻量级加密解密:<b class='flag-5'>Crypto</b>核心库守护数据安全的终极答案

    替代专用硬件!一文梳理开源VPP+DPDK技术和产业界应用实例

    VPP 这一开源技术在通用 CPU 的基础上,实现了传统上需要专门的网络硬件设备(如路由器)和专业的网络操作系统才能达到的性能,以极高的性价比为广大用户带来了开放网络技术的红利。VPP 集成了DPDK项目,通过它直接访问硬件网卡资源。
    的头像 发表于 07-07 17:17 1167次阅读
    替代专用硬件!一文梳理开源<b class='flag-5'>VPP</b>+DPDK技术和产业界应用实例

    请问如何在C++中使用NPU上的模型缓存?

    无法确定如何在 C++ 中的 NPU 上使用模型缓存
    发表于 06-24 07:25

    ArkUI-X框架LogInterface使用指南

    ArkUI-X框架支持日志拦截能力,Android侧提供原生接口,用于注入LogInterface接口,框架日志及ts日志通过该接口输出,本文的核心内容是介绍如何在Android平台上有效利用
    发表于 06-15 23:20

    何在VS Code中使用瑞萨RA系列MCU

    VS Code(Visual Studio Code)是微软公司出品,它是一个免费且多功能的代码编辑器,几乎支持所有主要的编程语言和框架。特别是最近又新加了Github Copilot功能,让用户
    的头像 发表于 04-16 14:02 3294次阅读
    如<b class='flag-5'>何在</b>VS Code<b class='flag-5'>中使</b>用瑞萨RA系列MCU

    何在USB视频类(UVC)框架中使用EZ-USB™FX3实现图像传感器接口USB视频类(UVC)

    电子发烧友网站提供《如何在USB视频类(UVC)框架中使用EZ-USB™FX3实现图像传感器接口USB视频类(UVC).pdf》资料免费下载
    发表于 02-28 17:36 2次下载

    何在MATLAB中使用DeepSeek模型

    在 DeepSeek-R1(https://github.com/deepseek-ai/DeepSeek-R1) AI 模型横空出世后,人们几乎就立马开始询问如何在 MATLAB 中使用这些模型
    的头像 发表于 02-13 09:20 4063次阅读
    如<b class='flag-5'>何在</b>MATLAB<b class='flag-5'>中使</b>用DeepSeek模型

    何在Windows中使用MTP协议

    、图片等)的通信协议,它被广泛用于Android设备。以下是如何在Windows中使用MTP协议的详细步骤: 1. 确保设备支持MTP 首先,你需要确认你的设备支持MTP协议。大多数现代Android
    的头像 发表于 01-03 10:26 4414次阅读