什么是软件定义网络中的硬件卸载?

随着计算机硬件需求的不断增长,对网络技术的需求也随之增加。然而,计算机系统的效率仍然存在不足,特别是cpu作为各种应用的核心引擎。为了解决这一问题,我们可以采取多种方法:使用更强大的计算机、在不同计算机之间分配软件,或者提升其性能。

本文将介绍如何通过高端计算设备来降低CPU使用率和相关硬件成本,这一过程被称为硬件卸载。

硬件卸载是什么?硬件卸载指的是将某些任务或计算从计算机的主处理器(CPU)转移到专用硬件组件的过程,如网络接口卡(NIC)或图形处理单元(GPU),以提高系统的性能和效率。这种过程可以通过多种技术和设备来实现。本文将重点讨论软件定义网络中的硬件卸载案例。

软件定义网络是什么?随着计算机网络中设备和数据包数量的增加,我们需要一种新的方式来管理这些网络,例如在数据中心中。流行的解决方案是从一个集成了专用硬件和控制平面并提供特定功能的单一设备,转变为三个不同的层次。

什么是软件定义网络中的硬件卸载?图1:软件定义网络的演变

在软件定义网络中,第一层是管理层面或管理平面。这是OpenStack等应用程序所在的地方。我们可以对我们的网络进行配置,并在例如虚拟化中使用它。下一层是控制平面。它实现了管理API使用的特性。在下面是数据平面。它由硬件(例如白盒交换机)和软件 – 软件数据平面组成。这一层,数据平面,是硬件卸载发生的地方。

软件数据平面是一个通用术语,用于描述使用用户数据处理网络数据包的应用程序。这意味着转发应用程序如虚拟交换机,以及更专业的应用程序,例如可以作为VNF部署的防火墙。在最常见的用例中,软件数据平面使SDN能够提供网络虚拟化并将数据包分发到运行在虚拟化主机上的VM。

软件定义网络的挑战软件数据平面在软件中运行数据包转发和处理,这意味着在虚拟化主机上运行的通用CPU。尽管这可以将数据包分发到不同的VM,但它带来了一定的成本。

在软件中进行数据包转发可能在延迟和数据包吞吐量方面不够高效。还需要从主机操作系统分配资源来实际运行转发数据平面。需要CPU资源,如时间和内存,性能可靠性可能具有挑战性 – 某些数据包流量特性或高工作负载可能会影响软件数据平面的性能。在下一节中,我们将展示如何使用硬件卸载来规避这些问题。

硬件卸载如何提供帮助?有一些纯粹的软件技术或方法来缓解这些问题。我们可以使用硬件轮询网络设备,而不是依赖中断来获取数据包。我们可以使用直接内存访问技术,而不是在用户空间和内核空间之间复制内存或数据包。然而,这通常导致需要分配更多资源。运行软件数据平面的高成本表明,使用硬件可能是更好的选择。

在SDN中的硬件卸载硬件卸载有两种类型:部分卸载和完全卸载。在第一种中,处理简单的网络任务,如匹配数据包头部字段或替换某些头部被委托给硬件,但数据包仍必须进入软件,由某些虚拟交换机处理并转发到适当的目的地。

在完全硬件卸载中,数据包转发的责任被委托给硬件。硬件不仅匹配字段或替换头部,而且还将数据包转发到正确的端口,这通常是卡的虚拟功能。

两种解决方案都有优缺点。部分硬件卸载具有软件交换的所有优点,因为数据包仍然进入软件并在那里处理,但我们的性能要低得多。在完全卸载中,网络性能要好得多,因为硬件完全处理数据包,但我们失去了灵活性。例如,迁移虚拟机更加困难,因为它们直接连接到硬件。

使用NIC进行硬件卸载在硬件卸载中,最好的起点是传统的NIC,也称为网络接口卡或网络接口控制器。这是一款您可能已经在您的软件定义网络中部署的流行设备。市场上的大多数NIC支持硬件卸载,支持诸如VLAN或VXLAN封装和解封装或通过其头部匹配数据包等功能。这款设备以成本和功耗效率高,相对快速而闻名。另一个优点是供应商提供可靠的资源,包括整个设备生命周期的文档和支持。

然而,网络接口控制器也有一些缺点。供应商不仅选择功能,还选择使用这些功能的API。所以如果NIC没有您要查找的功能,您可能需要另一个设备。

下一步 – SmartNICsSmartNIC可以是绕过网络接口卡限制的一种方式。SmartNIC类似于NIC,但它增加了一个可编程部分,通常是FPGA或ASIC。这种增加使得您可以自己编程FPGA,以便实现缺失的功能。SmartNIC与NIC到底有什么区别

实现功能不仅是优势。由于FPGA是完全可编程的硬件,您甚至可以实施更复杂的程序,如L3路由器。这样,您可以在硬件中完成所有路由。但即使如此,软件和硬件之间仍然有一个连接。在这个L3路由器示例中,您仍然需要一个路由表和要插入到卡中的路由条目,软件仍然负责这一点。

IPU/DPU – SmartNIC的下一代要完全从软件过渡到硬件,您需要另一个设备。进入SmartNIC的下一步演变,称为IPU、DPU或下一代SmartNIC。这基本上是一款在板上增加了另一个CPU的SmartNIC。

什么是软件定义网络中的硬件卸载?图2:下一代SmartNIC

当您使用这个设备时,您的硬件有自己的CPU。您甚至可以在卡上运行一个单独的操作系统,并运行负责例如在路由器中插入规则的软件应用程序。这样,您实现了与软件的完全分离,所有主机资源都可用于工作负载。

硬件卸载 – 实际案例有了关于硬件卸载的一般概述,让我们考虑一个软件定义网络中的用例。我们的工程师开发了一个演示,展示了硬件卸载的可能性。这个解决方案的目标是在OpenvSwitch中卸载VXLAN隧道。

AGECMS商业会云管理_电子名片 AGECMS商业会云管理_电子名片

AGECMS商业会云管理电子名片是一款专为商务人士设计的全方位互动电子名片软件。它结合了现代商务交流的便捷性与高效性,通过数字化的方式,帮助用户快速分享和推广自己的专业形象。此系统集成了多项功能,包括个人信息展示、多媒体互动、客户管理以及社交网络连接等,是商务沟通和品牌推广的得力工具。 核心功能:个人及企业信息展示:用户可以自定义电子名片中的信息内容,包括姓名、职位、企业Logo、联系信息(电话、

AGECMS商业会云管理_电子名片 0 查看详情 AGECMS商业会云管理_电子名片

什么是软件定义网络中的硬件卸载?图3 SDN环境

在这个图中,有一个相当复杂的软件定义网络环境,我们有OpenStack作为虚拟化编排器。我们有OpenDaylight作为控制平面,它管理着Open vSwitch实例和硬件路由器。对于Open vSwitch实例,使用OpenFlow和OVSDB协议,而在硬件路由器的情况下,使用NETCONF协议。有了这个基础设施,我们可以从我们的VM到地理独立的数据中心提供VXLAN隧道。

什么是软件定义网络中的硬件卸载?图4:问题隔离

对于这个特定的例子,不需要这样复杂的环境。由于SDN方法,我们只需要一个Open vSwitch实例。将需要一些配置来创建VXLAN端口,这将通过OVSDB协议完成。在实际的数据包处理和转发中,我们需要将数据包分发到适当的隧道和VM。

什么是软件定义网络中的硬件卸载?图5:解决方案架构

在这张图片中,您可以看到解决方案的所有重要部分的高级架构。有一个由OvS实例管理的虚拟机。它通过VXLAN隧道连接到其覆盖网络的其余部分。在这个设置中,我们使用了DPDK版本的OvS,并使用了Netronome Agilio作为SmartNIC,用我们用P4语言编写的固件进行编程。值得一提的是,我们使用了OVS的默认版本,没有任何定制。唯一需要的定制是在DPDK中。

数据包可以走两条路径。我们称之为慢路径和快路径。慢路径由黑色箭头表示。数据包从虚拟机通过Netronome Agilio到OvS实例,在那里被封装在VXLAN隧道中。然后,它通过物理端口发送到网络。返回的数据包遵循相同的路线,并由OvS解封装。

由于它是一个SmartNIC,它可以完全自行处理数据包。所以快路径是数据包从虚拟机发送,然后由Netronome Agilio处理和封装,并直接发送到物理端口。返回的数据包也可以由NIC解封装并直接转发到虚拟机。这条路线更短,所以数据包传输更快。这个案例是完全卸载的一个例子。

最后,人们可能会问 – 我们为什么还需要慢路径?那是因为OvS使用反应式流插入机制。OvS需要看到数据包才能为其创建流。所以第一个数据包总是必须进入OvS,在那里为这个数据包创建流,然后卸载到Netronome Agilio。接下来的数据包可以由Agilio处理并走快路径。

首先,我们需要了解OvS隧道和卸载机制。然后我们在P4固件中实现了慢路径部分和DPDK中的慢路径驱动程序。完成这些后,我们在P4固件中实现了快路径部分,并实现了将流插入Netronome Agilio的机制。

硬件卸载演示的结果为了测试这个解决方案,我们使用了TREX流量生成器和分析器。由于我们的设置限制,我们运行了L2转发而不是VXLAN,并使用带有内核桥接的Open vSwitch作为参考。正如您在图表中看到的,延迟有了显著的改善。

什么是软件定义网络中的硬件卸载?图6 延迟比较

不仅延迟更好。通过快路径的数据包几乎没有抖动。这意味着所有数据包都以相同的时间通过硬件处理。

什么是软件定义网络中的硬件卸载?图7:抖动比较

另一方面,在参考中有明显的抖动。这展示了NIC的中断处理和内核中其他软件的中断引起的问题。

结论硬件卸载对控制平面软件的影响有限。通常根本无需任何输入,这是因为SDN方法。另一方面,在数据平面软件方面,有广泛的支持可用,因为Open vSwitch和其他项目也支持硬件卸载。

Tungsten Fabric或VPP只是两个例子。有不同的软件策略,而在硬件方面,有成熟的解决方案,如传统的NIC。也有为特定应用创建自己的硬件解决方案的可能性。

由“通信百科”编译自”https://www.php.cn/link/4d883854d72e0b60688786f83fce9e7d”

以上就是什么是软件定义网络中的硬件卸载?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/810565.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
win8提示“你的电脑遇到问题需要重新启动”_win8自动重启蓝屏问题修复指南
上一篇 2025年11月26日 22:32:06
iPad分屏怎么使用外接显示器_iPad分屏扩展屏幕功能设置
下一篇 2025年11月26日 22:33:07

相关推荐

  • composer require-dev和require有什么不同_Composer Require与Require-Dev区别解析

    require用于声明项目运行必需的依赖,如框架、数据库组件和第三方SDK,这些包会随项目部署到生产环境;2. require-dev用于声明仅在开发和测试阶段需要的工具,如PHPUnit、PHPStan、Faker等,不会默认部署到生产环境;3. 安装时composer install根据环境决定…

    2026年5月10日
    1000
  • 修复Django电商项目中AJAX过滤产品列表图片不显示问题

    在Django电商项目中,当使用AJAX动态加载过滤后的产品列表时,常遇到图片无法正常显示的问题。这通常是由于前端模板中图片加载方式(如data-setbg属性结合JavaScript库)与AJAX动态内容更新机制不兼容所致。解决方案是直接在AJAX返回的HTML中使用标准的标签来渲染图片,确保浏览…

    2026年5月10日
    000
  • 比特币新手教程 比特币交易平台有哪些

    比特币是一种去中心化的数字货币,基于区块链技术实现点对点交易,具有匿名性、有限发行和不可篡改等特点;新手可通过交易所购买,P2P交易获得比特币,常用平台包括Binance、OKX和Huobi;交易流程包括注册账户、实名认证、绑定支付方式、充值法币并下单购买,可选择市价单或限价单;比特币存储方式有交易…

    2026年5月10日
    000
  • 如何让动态追加元素的类事件生效?

    如何在追加元素后使其绑定类事件生效 在页面中引入三方 JavaScript 类并通过添加相应 class 来调用事件方法是一种常见的做法。然而,如果通过 JavaScript 追加标签元素,即使添加了对应的 class,事件也可能无法生效。 为了解决这个问题,可以尝试以下步骤: 检查追加的标签是否为…

    2026年5月10日
    000
  • css max-height属性怎么用

    max-height 属性设置元素的最大高度。 说明 该属性值会对元素的高度设置一个最高限制。因此,元素可以比指定值矮,但不能比其高。不允许指定负值。 注意:max-height 属性不包括外边距、边框和内边距。 立即学习“前端免费学习笔记(深入)”; 值描述none 默认。定义对元素被允许的最大高…

    2026年5月10日
    100
  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    000
  • 修复点击时按钮抖动:CSS垂直对齐实践

    本文探讨了在Web开发中,交互式按钮(如播放/暂停按钮)在点击时发生意外垂直位移的问题。通过分析CSS样式变化对元素布局的影响,我们发现这是由于按钮不同状态下的边框样式和内边距改变,以及默认的垂直对齐行为共同作用所致。核心解决方案是利用CSS的vertical-align属性,将其设置为middle…

    2026年5月10日
    000
  • 理解编程指令:当结果正确,但实现方式不符要求时

    本文探讨了在编程实践中,即使程序输出了正确的结果,但若其实现方式未能严格遵循既定指令,仍可能被视为“不正确”的问题。我们将通过具体示例,对比直接求和与累加求和两种实现策略,强调理解和遵守编程规范的重要性,以确保代码的健壮性、可维护性及符合项目要求。 在软件开发过程中,我们经常会遇到这样的情况:编写的…

    2026年5月10日
    000
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • php常量怎么用_PHP常量(define/const)定义与使用方法

    PHP中可通过define函数和const关键字定义常量,用于存储不可变值。define适用于全局作用域,支持动态名称和条件定义,如define(‘SITE_NAME’, ‘MyWebsite’);const在编译时生效,语法简洁但限制多,只能在类或全…

    2026年5月10日
    000
  • 如何在HTML中插入表单元素_HTML表单控件与输入类型使用指南

    HTML表单通过标签构建,包含action和method属性定义数据提交目标与方式,常用input类型如text、password、email等适配不同输入需求,配合label、required、placeholder提升可用性,结合textarea、select、button等控件实现完整交互,是…

    2026年5月10日
    000
  • 前端缓存策略与JavaScript存储管理

    根据数据特性选择合适的存储方式并制定清晰的读写与清理逻辑,能显著提升前端性能;合理运用Cookie、localStorage、sessionStorage、IndexedDB及Cache API,结合缓存策略与定期清理机制,可在保证用户体验的同时避免安全与性能隐患。 前端缓存和JavaScript存…

    2026年5月10日
    100
  • Discord.py 交互按钮超时与持久化解决方案

    本教程旨在解决Discord.py中交互按钮在一段时间后出现“This Interaction Failed”错误的问题。我们将深入探讨视图(View)的超时机制,并提供通过正确设置timeout参数以及利用bot.add_view()方法实现按钮持久化的具体方案,确保您的机器人交互功能稳定可靠,即…

    2026年5月10日
    000
  • JavaScript 动态菜单点击高亮效果实现教程

    本教程详细介绍了如何使用 JavaScript 实现动态菜单的点击高亮功能。通过事件委托和状态管理,当用户点击菜单项时,被点击项会高亮显示(绿色),同时其他菜单项恢复默认样式(白色)。这种方法避免了不必要的DOM操作,提高了性能和代码可维护性,确保了无论点击方向如何,功能都能稳定运行。 动态菜单高亮…

    2026年5月10日
    200
  • html5怎么画实线_HTML5用CSS border-style:solid画元素实线边框【绘制】

    可通过CSS的border-style属性设为solid添加实线边框:一、内联样式用border:2px solid #000;二、内部样式表统一设置如div{border:1px solid #333};三、外部CSS文件定义.my-box{border:3px solid red}并引入;四、单…

    2026年5月10日
    200
  • JS如何实现迭代器?迭代器协议

    JavaScript中实现迭代器需遵循可迭代协议和迭代器协议,通过定义[Symbol.iterator]方法返回具备next()方法的迭代器对象,从而支持for…of和展开运算符;该机制统一了数据结构的遍历接口,实现惰性求值,适用于自定义对象、树、图及无限序列等复杂场景,提升代码通用性与…

    2026年5月10日
    000
  • css如何禁止滚动条

    css禁止滚动条的方法:1、完全隐藏,代码为【】;2、在不需要时隐藏,代码为【】;3、样式表方法。 本教程操作环境:windows7系统、css3版,DELL G3电脑。 1、完全隐藏 在里加入scroll=”no”,可隐藏滚动条;   立即学习“前端免费学习笔记(深入)”;…

    2026年5月10日
    000
  • Golang空接口如何应用在项目中

    空接口可用于接收任意类型值,常见于日志函数、通用数据结构、JSON动态解析及配置驱动逻辑,提升代码灵活性,但需配合类型断言确保安全,避免滥用以降低维护成本。 空接口 interface{} 在 Go 语言中是一个非常灵活的类型,它可以存储任何类型的值。虽然它牺牲了一部分类型安全,但在实际项目中合理使…

    2026年5月10日
    100
  • 三星不再独享,消息称搭载骁龙 8 Gen 3 领先版处理器新机即将发布

    三星不再独享,消息称搭载骁龙 8 Gen 3 领先版处理器新机即将发布三星不再独享,消息称搭载骁龙 8 Gen 3 领先版处理器新机即将发布三星不再独享,消息称搭载骁龙 8 Gen 3 领先版处理器新机即将发布三星不再独享,消息称搭载骁龙 8 Gen 3 领先版处理器新机即将发布

    6 月 15 日消息,据博主@肥威 今日爆料,搭载骁龙 8 Gen 3 领先版%ign%ignore_a_1%re_a_1%的新机即将发布,把之前的 for Galaxy 改成“for Everybody”。 Pic Copilot AI时代的顶级电商设计师,轻松打造爆款产品图片 158 查看详情 …

    2026年5月10日 用户投稿
    000
  • 动态更新圆形进度条:JavaScript成绩计算器集成指南

    本文档旨在指导开发者如何将JavaScript成绩计算系统与动态圆形进度条集成,实现可视化展示平均成绩。我们将详细讲解如何修改现有的JavaScript代码,使其在计算出平均分后,能够动态更新圆形进度条的进度,从而提供更直观的用户体验。本文档包含详细的代码示例和注意事项,帮助开发者轻松实现这一功能。…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信