Mellanox CX4 offload 卸载功能介绍

news2024/11/17 4:40:13

无状态功能卸载

cx4支持多种类型的无状态卸载,如下面列表所示。

  1. Checksum Offload
  2. Large Send Offloads
  3. Receive Side Scaling
  4. Transmit Side Scaling
  5. Interrupt Moderation
  6. Large Receive Offloads
  7. VLAN insertion and stripping
  8. Flow Steering at layers 2, 3 and 4
  9. Packet padding (TX)
  10. 在以下情境下支持RX的头部和尾部添加负载数据。
    IPv4 and IPv6 packets
    Layer 2: Ethernet

checksum Offload

支持计算收方向RX和发方向TX的数据包checksum,可以卸载基于ipv4/ipv6的L3 checksum和上层tcp/udp的checksum。
在这里插入图片描述
在这里插入图片描述
通过查看csum_cap bit获取功能是否使能,发送报文的时候在WQE中设置支持checksum offload,不需要软件再来计算ip层和tcp/udp的checksum,如果软件已经填写了,将会被忽略,网卡重新计算。
(note: 发送tcp/udp报文时候,如果ipv6 有路由扩展头,或者ipv4有lSRR SSRR选项,checksum计算将不支持)
收包的checksum通过CQE来表达,l4_ok, l3_ok - indicate whether checksum calculation of the packet was okay

在这里插入图片描述

Large Send Offload (LSO)

在发包阶段,可以添加预先设置的模板的大包数据,通过CQE中字段反馈是否添加成功。

Receive Side Scaling (RSS)

适配器的 RSS 与 NDIS RSS 规范兼容。RSS通过将接受的报文分配到不同的ring中,以便重定向到不通的cpu core接收,达到负载均衡的效果。
RSS 通过两种机制实现:流表和 TIR。流表规则对数据包进行分类并将特定的流量类别(例如 TCP/UDP、仅 IP)传送到专用的 TIR。 Indirect 类型的 TIR 负责传播它们从流表接收到的属于特定流量类别的流量。通过打开与默认 RQ 关联的 Direct 类型的专用 TIR 并配置流表以向该“默认”TIR 传送所有应传送到默认 RQ 而不是传输到其他RQ.
这允许为不同的流量类别支持不同的 RSS 传播模式。例如,流表规则可以将所有 TCP IPv4 数据包传送到使用 <Source IP, Destination IP, Source TCP Port, Destination TCP port> 传播的 TIR,将 TCP IPv6 数据包传送到使用 <Source IP, Destination IP> 传播的 TIR 和将 UDP 数据包传送到“默认”TIR。
通过查看HCA_CAP.rss_ind_tbl_cap. 判断是否使能。
(transport interface receive (TIR) 对象负责在接收端执行所有与传输相关的操作。 TIR 执行数据包处理和重组,还负责将数据包解复用到不同的 RQ。多路分解支持将数据包传送到列出的一个或多个 RQ,或从列表中基于hash选择单个 RQ)

TIR Spreading Traffic Mechanism

TIR 上下文,调度程序类型为 Indirect,根据选定的数据包字段选择目标 RQ。 TIR 使用可配置的散列函数并根据选定的数据包字段计算散列值。 TIR 上下文根据 rx_hash_fields_selector_outer 和 rx_hash_fields_selector_inner 字段选择一个数据包字段,这些字段设置了哪个字段必须参与 RQ 选择。请注意,只有包含由 TIR 的 rx_hash_fields_selector_outer/rx_hash_fields_selector_inner 选择的字段的数据包必须传送到此指定的 TIR。例如,如果选择了 TCP 目标/源端口,则只应将具有 TCP 目标/源端口 (UDP/TCP) 的数据包传送到该 TIR。这可以通过适当的流表规则配置来实现,例如,这将确保只有 TCP/UDP 数据包被传送到使用 TCP 端口进行 RQ 选择的 TIR。计算出的哈希值指向一个间接表(用 RQs Tables 实现)。间接表条目指向 RQ,以进一步处理传入的数据包。 RX哈希值、选择字段和数据包类型上报给CQE。

Transmit Side Scaling

传输端缩放支持从多个 CPU 内核在多个描述符环上同时传输数据包。为此,应创建多个 SQ。多个 SQ 可以附加到同一个 TIS。
(TIS transport interface send (TIS) 对象负责执行传输端的所有传输相关操作。来自发送队列的消息被 TIS 分段和传输,包括所有传输所需的影响,例如在大量发送卸载的情况下,TIS 负责分段)

Interrupt Moderation

Completion Event Moderation (CEM) 延迟 CQ 发布 Completion Event,直到在该队列上报告多个完成。这使得能够在多个工作完成之间分摊完成事件处理程序调用的开销,提升效率。
可以为每个 CQ 单独启用 CEM。
当满足以下任一条件时,设定的 CQ 将生成事件:

  1. cq_period 计时器已过期,并且此 CQ 有一个未决事件(如果不受节制,则会生成一个事件)。cq_period 计时器在事件生成或完成生成时重新启动,具体取决于 CQ .cq_period_mode
  2. 达到cq_max_count个数

Large Receive Offload (LRO)

该设备支持 TCP 流的大型接收卸载 (LRO)。该实现与 NDIS 接收段合并Receive Segment Coalescing (RSC) 完全兼容。

VLAN Insertion/Stripping

该设备卸载原始以太网帧的 VLAN 插入和剥离。
VLAN 插入由驱动程序执行,将 VLAN 标记内联到 WQE Eth 段中的以太网帧标头中.

通过 VLAN Stripping Disable (vsd) 位在 RQ 中配置 VLAN 剥离。当配置为执行 VLAN 剥离时,设备会从传入帧中删除 VLAN 标记并在 CQE 字段中报告它。

对于隧道数据包,外部和内部 VLAN 都可以通过 VLAN 插入卸载来操作,通过内联外部和内部帧头,但只有外部 VLAN 可以此机制来删除。
通过 QUERY_HCA_CAP vlan_cap 字段报告对 VLAN 插入和剥离的支持

Packet Padding (TX)

小于 64 字节的以太网数据包在传输时通过附加尾随零(在 FCS 之前)自动填充到 64 字节。此外,如果 LSO 数据包的最后一段短于 64B,也会自动填充为 64B。
对于以太网上的封装帧,外部以太网数据包由设备自动填充为 64 字节。内部框架保持不变。

Start of Packet Padding (RX)

End of Packet Padding (RX)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用MotionLayout实现模拟启动页动画和轮播图

目录效果图展示启动页效果轮播图效果MotionLayout详解准备工作正题轮播图效果实现ConstraintSetTransitionCarousel浅述启动页的实现插入gif图源码在这里&#xff1a; 源码链接本文是用java写的效果图展示 下面是本博客我使用真机所实现的功能展现&#xff0c;方便大家根据自身…

化妆品行业的数字进化论:S2B2B电商网站如何助力化妆品企业打造增长新动能

近年来&#xff0c;伴随着国家经济的快速发展和消费者对“美”的追求日益强烈&#xff0c;大大推动了化妆品行业的蓬勃发展&#xff0c;根据公开数据显示&#xff0c;2021年我国化妆品零售总额达4026亿元&#xff0c;较2020年同比增长18.40%&#xff0c;我国目前已成为全球第二…

一篇文章让你全方位掌握git版本控制管理

注&#xff1a;侵权请联系作者删除 目录 1.引入&#xff1a; 2.Git 的工作区域和流程 3.stash区域 4.git基本操作 A.git add B.git commit c.git pull D.git fetch E.git branch F.git init 5.在项目中实际运用案例&#xff1a; A.在github上创建一个新仓库 B.复制刚创建…

matlab使用hampel滤波,去除异常值

此示例显示了Hampel用于检测和删除异常值的过程的 实现。 最近我们被客户要求撰写关于hampel滤波的研究报告&#xff0c;包括一些图形和统计输出。 产生一个包含24个样本的随机信号x。 重置随机数生成器以获得可重复的结果。 rng defaultlx 24; x randn(1,lx); 围绕x的每…

网页前端知识汇总(六)——如何让网页全部内容显示成灰色

最近很多做网站前端的技术员是不是都接到了老板的任务&#xff0c;让网站的网页显示效果都变成灰色&#xff0c;这个也是随某些事件的发生或者某些专题内容觉得需要这样做的&#xff0c;大部分用于大家都不愿意看到的专题事件如某某烈士&#xff0c;逝去的伟人等&#xff1b;大…

Scala013--Scala中的方法

因为Scala是一种函数式编程语言&#xff0c;因此在Scala中基本上都是方法和函数&#xff0c;但是需要注意的是&#xff0c;在Java中方法和函数是同一个意思&#xff0c;但是在Scala中函数和方法的含义不同&#xff1a; 方法&#xff1a;是类和对象的成员函数&#xff1a;是对象…

jeecgboot-前端组件封装代码示例

首先我们要知道 jeecgboot他前台的组件代码封装文件夹的位置在src-components中&#xff0c;这时我们其实可以观察他们代码的写法(个人感觉学习代码的最好的途径就是临摹他人高质量的代码、多看、多写)路径如图&#xff1a; 接下来我们会在标注3下实现一个简单的自定义组件 代码…

【Eureka】【源码+图解】【八】Eureka客户端的服务获取

【Eureka】【源码图解】【七】Eureka的下线功能 目录7. 获取服务7.1 初始化HeartBeat的task7.2 将task进一步包装成定时timerTask7.3 定时时间到&#xff0c;执行timeTask7.4 task获得线程资源&#xff0c;执行refreshRegistry()7.5 服务端接受请求7.6 获取Applications7. 获取…

Spark - RDD 的分区和Shuffle

一、RDD 的分区 前面在学习 MapReduces 的时候就提到分区&#xff0c;在RDD中同样也存在分区的概念&#xff0c;本质上都是为了提高并行度&#xff0c;从而提高执行的效率&#xff0c;那在 Spark 中的分区该怎么设置呢&#xff1f; 首先分区不是越多越好&#xff0c;太多意味…

[Android]Logcat调试

Android采用Log(android.util.log)工具打印日志&#xff0c;它将各类日志划分为五个等级。 Log.e 打印错误信息 Log.w 打印警告信息 Log.i 打印一般信息 Log.d 打印调试信息 Log.v 打印冗余信息 不同等级的日志信息&#xff0c;在日志栏中会以不同颜色和等级(E、W、…

(附源码)ssm医院挂号系统 毕业设计 250858

医院挂号系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对医院排队挂号等问…

深入理解 Python 描述符

学习 Python 这么久了&#xff0c;说起 Python 的优雅之处&#xff0c;能让我脱口而出的&#xff0c; Descriptor&#xff08;描述符&#xff09;特性可以排得上号。 描述符 是Python 语言独有的特性&#xff0c;它不仅在应用层使用&#xff0c;在语言语法糖的实现上也有使用到…

【java基础系列】16- Java中怎么处理异常?

Java的异常处理 1、异常的概念 概念&#xff1a;程序在运行过程中出现的不正常现象。出现异常不处理将终止程序运行。异常处理的必要性&#xff1a;任何程序都可以存在大量的未知问题、错误&#xff1b;如果不对这些问题进行正确处理&#xff0c;则可能导致程序的中断&#x…

[附源码]Python计算机毕业设计SSM开放性实验室网上预约管理(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

分布式和可再生系统建模(simulink)

目录 1 可再生/微电网概述 1.1 分布式和可再生系统建模和仿真 1.2 解决工作流程 1.3 能源管理系统监控设计 1.4 验证控件的测试网格规范和IEEE标准 1.5 部署算法和代码生成 1.6 网格集成研究控制器的实时测试 2 微电网案例 2.1 简介 2.2 在 Simulink 中实现微电网…

【JavaEE】初识操作系统,吃透进程

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01; &#x1f6f0;️&#x1f6f0;️系列专栏:【JavaEE】 ✈️✈️本篇内容:初始操作系统&#xff0c;进程的概念 &#x1f680;&#x1f680;代码存放仓库gitee&#xff1a;JavaEE初阶代码存放&#xff01; ⛵⛵…

关于AM437x Linux+qt开发笔记(2)

第一部分,触摸屏 命令 lsinput (有些系统不移植)查看系统input实践 命令ox -d /dev/input/event1 或hexdump -d /dev/input/event1 (从上图看,event0没有接的触屏) ,点击屏幕如下 命令 ls /dev/input -al , 查看input设备的触摸屏软连接。 命令cat /etc/udev/ru…

编码与测试

文章目录一、编码1、概念2、如何选择程序设计语言3、程序设计风格&#xff08;1&#xff09;源程序文档化(2) 数据说明&#xff08;3&#xff09;语句构造&#xff08;4&#xff09;输入输出&#xff08;5&#xff09;程序效率编码时提高程序运行效率的主要规则二、软件测试基础…

【爬坑之路一】windows系统下更新升级node版本【亲测有效】

前言 一定要看到最后&#xff01;&#xff01;&#xff01; 项目开发中&#xff0c;需要升级 node 版本。本着不想卸载 node 再重新安装的原则&#xff0c;因为node 的环境配置以及各种相关配置有些繁琐&#xff0c;所以就想着使用 命令的方式进行升级。 在网上找了一些升级 n…

C#详解:程序域、程序集、模块、Type、反射

总结&#xff1a; ">>>":代表包含 进程>>>应用程序域AppDomain>>>程序集Assembly>>>模块Module>>>类型Type>>>成员&#xff08;方法、属性等&#xff09; 1、程序集Assembly 如图&#xff0c;假设一个解决方…