Understanding Host Network Stack Overheads论文阅读笔记

news2025/1/11 2:18:27

RFS (Receive Flow Steering)

RFS(Receive flow steering)和 RPS 配合使用。RPS 试图在 CPU 之间平衡收包,但是没考虑 数据的本地性问题,如何最大化 CPU 缓存的命中率。RFS 将属于相同 flow 的包送到相同的 CPU 进行处理,可以提高缓存命中率。

调优:打开 RFS

RPS 记录一个全局的 hash table,包含所有 flow 的信息。这个 hash table 的大小可以在 net.core.rps_sock_flow_entries:

$ sudo sysctl -w net.core.rps_sock_flow_entries=32768
1
其次,你可以设置每个 RX queue 的 flow 数量,对应着 rps_flow_cnt:

例如,eth0 的 RX queue0 的 flow 数量调整到 2048:

$ sudo bash -c 'echo 2048 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt' 1

aRFS (Hardware accelerated RFS,需要硬件支持)

Accelerated RFS,类似英特尔硬件的Flow Director机制,或者是不同的说法

Accelerated RFS 之于 RFS 相当于 RSS 之于 RPS。Accelerated RFS 在硬件上就可以选择正确的队列,随后触发该数据包所属流所在的 CPU 的中断。由此可见,如果想要在硬件上实现队列选择,我们需要一个从流到硬件队列的对应关系。

从上文可知,我们已经有了一个从流到 CPU 的映射关系,记录在 rps_dev_flow 表中。
然后,我们也有 CPU 和硬件队列的关系,通过 /proc/irq/<irq_num>/smp_affinity 进行配置。

在这里插入图片描述

每当 rps_dev_flow 表中的条目被更新,网络协议栈就会调用驱动中的 ndo_rx_flow_steer 函数来更新流到硬件队列的对应关系。

Accelerated RFS 需要在编译阶段使能 CONFIG_RFS_ACCEL,并且需要硬件和驱动的支持。此外,还需要使用 ethtool 设置 ntuple 过滤。其他的就不需要配置了。

Accelerated RFS 机制可以将数据包直接放在最终的 CPU 硬件队列上,所以性能应该是要比 RFS 高。因此,当硬件支持该选项,应该选择此机制。

RFS 可以用硬件加速,网卡和内核协同工作,判断哪个 flow 应该在哪个 CPU 上处理。这需要网卡和网卡驱动的支持。

如果你的网卡驱动里对外提供一个 ndo_rx_flow_steer 函数,那就是支持 RFS。

调优: 启用 aRFS

假如你的网卡支持 aRFS,你可以开启它并做如下配置:

  • 打开并配置 RFS 内核中编译期间指定了 CONFIG_RFS_ACCEL 选项。Ubuntu kernel 3.13.0 是有的
  • 打开网卡的 ntuple 支持。可以用 ethtool 查看当前的 ntuple 设置 配置 IRQ(硬中断)中每个 RX 和 CPU
    的对应关系

以上配置完成后,aRFS 就会自动将 RX queue 数据移动到指定 CPU 的内存,每个 flow 的包都会 到达同一个 CPU,不需要你再通过 ntuple 手动指定每个 flow 的配置了。

作用是最大化数据本地性(data locality),以增加 CPU 处理网络数据时的 缓存命中率。例如,考虑运行在 80 口的 web 服务器:

webserver 进程运行在 80 口,并绑定到 CPU 2
和某个 RX queue 关联的硬中断绑定到 CPU 2
目的端口是80 的 TCP 流量通过 ntuple filtering 绑定到 CPU 2
接下来所有到 80口的流量,从数据包进来到数据到达用户程序的整个过程,都由 CPU 2 处理
仔细监控系统的缓存命中率、网络栈的延迟等信息,以验证以上配置是否生效

远程NIC RPS

如果网卡只支持单个队列,并且有多个 CPU 的的话,在 NUMA 系统中,一般将 RPS CPU 设置为在相同 domain 的 CPU,非 NUMA 系统就无所谓了,因为设置为每一个 CPU 的性能都是一样的。

对于多队列网卡,一般系统不会同时启用 RSS 和 RPS,因为这没什么好处。但也有例外,比如网卡所支持的队列数目少于 CPU 数,也就是每个 CPU 还分不到一个接收队列,那么使用 RPS 可能会使得 CPU 的任务分布更高效。

回顾一下这些机制之间的关系。首先是 RSS/RPS,该机制在接收数据包的时候,通过手动配置,甚至是根据负载情况的自动配置(如 irqbalance),来把数据包的处理负载均匀分配到不同的 CPU 上。RSS/RPS 仅根据负载大小进行判断,但是这可能导致从协议栈处理到上层应用处理之间数据包的转移。

因此 RFS/aRFS 更进一步,在进行 CPU 选择的时候考虑上层应用所处位置,对每一个流都配置一个 Desired CPU。因此,在为数据包选择 CPU 的时候,会优先选择 Desired CPU。

参考:
网络参数 RSS、RPS、RFS、aRFS 学习总结
https://blog.luckyoung.org/2023/23-02-13_network-parameters/#receive-flow-steering-rfs

linux内核网络协议栈–监控和调优
http://t.csdn.cn/39ud0

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

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

相关文章

通用深度模型UniverSeg:分割医疗图像

医学图像分割是医学分析的中心问题。它很昂贵&#xff0c;需要大量数据&#xff0c;而且是特定于任务的。如果我们可以拥有一个可以应用于任何分割任务的模型怎么办&#xff1f; 医学图像分割&#xff1a;为什么我们需要以及为什么它很困难&#xff1f; 分割的例子。一般来说&…

2808. 使循环数组所有元素相等的最少秒数;1015. 可被 K 整除的最小整数;1001. 网格照明

2808. 使循环数组所有元素相等的最少秒数 核心思想&#xff1a;枚举每个元素作为相等元素最多需要多少秒&#xff0c;然后维护它的最小值。最多需要多少秒是怎么计算的&#xff0c;我们可以把相等值的下标拿出来&#xff0c;然后你会发现两个相邻下标&#xff08;相邻下标只的…

three.js——宝马汽车产品展示

宝马汽车产品展示 前言效果图1、创建基本设置(场景和背景等&#xff09;2、加载模型和展厅灯光3、添加点击事件 前言 宝马汽车产品展示和原理讲解 演示网址&#xff1a;http://f-h-y.gitee.io/bmw-car-display-project/#/ 效果图 1、创建基本设置(场景和背景等&#xff09; …

ChatGPT详细搭建教程+支持AI绘画

一、AI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&#x…

The 2023 ICPC Asia Regionals Online Contest (1) E. Magical Pair(数论 欧拉函数)

题目 T(T<10)组样例&#xff0c;每次给出一个n(2<n<1e18)&#xff0c; 询问多少对&#xff0c;满足 答案对998244353取模&#xff0c;保证n-1不是998244353倍数 思路来源 OEIS、SSerxhs、官方题解 2023 ICPC 网络赛 第一场简要题解 - 知乎 题解 官方题解还没有…

【Springboot】整合Xxl-job

目录 一&#xff0c;下载1.1 官方文档地址1.2 源码仓库地址 二&#xff0c; 配置部署 "调度中心"2.1 初始化 "调度数据库"2.2 修改配置文件2.3 启动调度中心 三&#xff0c;springboot项目整合3.1 添加依赖3.2 修改配置文件3.3 执行器组件配置4.4 编写测试…

雷达编程实战之静态杂波滤除与到达角估计

雷达中经过混频的中频信号常常混有直流分量等一系列硬件设计引入的固定频率杂波&#xff0c;我们称之位静态杂波&#xff0c;雷达信号处理需要把这些静态杂波滤除从而有效的提高信噪比&#xff0c;实现准确的目标检测功能。 目标的到达角估计作为常规车载雷达信号处理的末端&am…

【数据结构】什么是数据结构?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 数据结构的定义 数据结构(Data Structure)是计算机存储,组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合. 这么讲可能有些抽象,放一张图大家可能好理解一点…

Python 打印素数

"""打印素数介绍&#xff1a;素数是指只有两个正因数&#xff08;1和它本身&#xff09;的自然数&#xff0c;而且必须大于1。例如&#xff1a;2、3、5、7、11、13、17、19、23、29等等都是素数。小于2的数不是素数&#xff0c;因为它没有两个正因数。例如&…

编译原理龙书-词法分析

词法分析 词法分析器的作用 词法分析器的主要任务是读入源程序的输入字符&#xff0c;将它们组成词素&#xff0c;生成并输出一个词法单元序列&#xff0c;每个词法单元对应于一个词素 有时&#xff0c;词法分析器可以分成两个级联的处理阶段&#xff1a; 扫描阶段主要负责完…

Base64编码与打印标签(label)实例

文章目录 前言一、Base64 的简单认识二、Base64的使用场景三、 Base64的解码注意问题举个最近与后端配合的例子 四、 base64 转换为arrayBuffer&#xff0c;blod总结 前言 文件格式转换&#xff0c;在日常编程尤为常见&#xff0c;例如pdf文件大小的压缩存储&#xff0c;前端用…

Arduino驱动MMA7260三轴加速度传感器(惯性测量传感器篇)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 Arduino驱动MMA7260三轴加速度传感器芯片,可以应用到摩托车和汽车放倒报警、遥控航模、游戏手柄、人形机器人跌倒检测、硬盘冲击保护、倾斜度测量等场合。 1

Java初级到中级:技术提升的策略与方法

文章目录 1 问题背景2 前言3 方法 1 问题背景 截至2023年7月&#xff0c;笔者已经毕业2年了&#xff0c;每天都在搬砖打螺丝&#xff0c;自我感觉需要沉淀、思考、总结一下。思考和总结一下如何从Java初级提升到Java中级&#xff0c;需要掌握一些什么方法论&#xff0c;有效地去…

使用命令行快速创建Vite项目

一、构建项目 在终端中使用如下命令行&#xff1a; npm create vite 二、定义项目名称 三、选择项目类型 Vanilla是我们常用的JavaScript&#xff0c;Vue和React是常用前端框架&#xff0c;可以根据自己的需要进行选择 通过上下键进行选择&#xff0c;按下回车进行确认 创建…

CMU15-445 format\clang-format\clang-tidy 失败

CMU15-445 format\clang-format\clang-tidy 失败 问题修改 问题 -- Setting build type to Debug as none was specified. -- Youre using Clang 14.0.0 CMake Warning at CMakeLists.txt:67 (message):BusTub/main couldnt find clang-format.CMake Warning at CMakeLists.tx…

VS2019创建GIt仓库时剔除文件或目录

假设本地有解决方案“SomeSolution” 1、首先”团队资源管理器“-“创建Git存储库”&#xff0c;选择“仅限本地”、“创建” VS会在解决方案目录下自动生成.gitattributes、.gitignore 2、编辑gitignore&#xff0c;直接拖到VS里或者用记事本打开。添加要剔除的文件或文件夹…

git --- 回滚 restore, reset, revert

git --- 回滚 restore, reset, revert git revertgit restoregit resetgit reset --softgit reset --mixedgit reset -- hard git revert git revert 是用于“反做”某一个版本&#xff0c;以达到撤销该版本的修改的目的也就是git revert会生成一个新的commit, 而这个commit需要…

Spring Cloud Alibaba快速整合OpenFeign

文章目录 spring cloud alibaba 整合OpenFeign整合流程1.导入依赖2. 编写调用接口2.1 service&#xff08;这里写的是clients&#xff09;2.2 controller 3.设置其最大链接时间3.1 配置文件3.2 client3.3 接口3.4 被访问的controller spring cloud alibaba 整合OpenFeign Fore…

C++之lseek64应用总结(二百三十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

基于STM32的宠物托运智能控制系统的设计(第十七届研电赛)

一、功能介绍 使用STM32作为主控设备&#xff0c;通过DHT11温湿度传感器、多合一空气质量检测传感器以及压力传感器对宠物的托运环境中的温湿度、二氧化碳浓度和食物与水的重量进行采集&#xff0c;将采集到的信息在本地LCD显示屏上显示&#xff0c;同时&#xff0c;使用4G模块…