文档章节

Linux RPS/RFS 实现原理浅析

o
 osc_z1hvg4cu
发布于 2018/04/24 22:46
字数 815
阅读 10
收藏 0

精选30+云产品,助力企业轻松上云!>>>

本文快速解析一下RPS/RFS的基本原理。

RPS-Receive Packet Steering

下面这个就是RPS的原理: 
这里写图片描述

其实就是一个软件对CPU负载重分发的机制。其使能的作用点在CPU开始处理软中断的开始,即下面的地方:

netif_rx_internal
netif_receive_skb_internal
  • 1
  • 2

RFS-Receive Flow Steering

RFS在RPS的基础上,充分考虑到同一个五元组flow进程上下文和软中断上下文之间处理CPU的一致性,为此在socket层面也要有相应的处理。

  非常遗憾的是,一张图无法把这一切全部表达,那么我们分阶段进行,首先看同一个五元组flow第一个包到达的情形: 
这里写图片描述

显然,global mapping作为全局映射,空间必须足够大才能容纳足够多的流,不然会相互覆盖。我建议设置成最大并发连接数的2倍。

  然后,当同一个flow的后续包到来时,我们看一下global mapping如何起作用gongchang66.cn。先来看后续第一个包到来时的情景:

这里写图片描述

仔细看图,这里增加了一个Per Queue Hash map,这些map是从global map生成的,此后的数据包再到达时,就可以查这个map了:

这里写图片描述

然而,这并没有看出来RFS和RPS的不同。

  你能保证处理softirq和处理socket的是同一个CPU吗?你不能,有可能tcp_v4_rcv是CPU0在处理,然后在data_ready中把socket进程唤醒,然而调度器将进程wakeup到CPU1上了,这样在update global hash map的时候,就会更新一个不同的CPU,这个时候RFS的作用就体现了,RFS会把Per Queue Hash Map也更新了,进而接下来的数据包会全部重定向到新的CPU上,然而RPS并不会这么做。

  RFS也不是只要发现CPU变了就无条件切换,而是要满足一个条件,即: 
同一个流上次enqueue到旧CPU的数据包全部被处理完毕 
如此可以保证同一个流处理的串行性,同时处理协议头的时候还能充分利用Hotleyouzxgw.com cacheline。

Accelerated RFS

基本就是可以把软件发现的配置反向注入到硬件,需要硬件支持,不多说。


本文只讲原理,想知道Howto,请参考内核源码包Documentation/networking/scaling.txt文件。


trick and tips

有时候太均匀太平等了并不是好事。

  在CPU运行繁重的用户态业务逻辑的时候,把中断打到同一个CPU上反而有一个天然限流的作用,要注意,先要找到瓶颈在哪里。如果瓶颈在业务逻辑的处理,那么当你启用RPS/RFS之后,你会发现用户态服务指标毫无起色,同时发现softirq飙高,这并不是一件好事。

  参考下面的图示: 
这里写图片描述

这样好吗?为了所谓内核态处理的优雅均衡,挤压了用户态的CPU时间,这是典型的初学者行为,为了内核而优化内核,典型的物业殴打业主!

  其实,OS内核的作用只有一个,就是服务用户态业务逻辑的处理!

  不多说。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Linux RPS/RFS 实现原理浅析

本文快速解析一下RPS/RFS的基本原理。 RPS-Receive Packet Steering 下面这个就是RPS的原理: 其实就是一个软件对CPU负载重分发的机制。其使能的作用点在CPU开始处理软中断的开始,即下面的地...

osc_qp7oxc3y
2018/12/29
4
0
Linux中rps/rfs的原理及实

rps的全称是Receive Package Steering,rfs的全称是Receive Flow Steering,rps和rfs是google的工程师提供的两个补丁,用以在软件层面实现报文在多个cpu之间的负载均衡以及提高报文处理的缓存...

黑客画家
03/05
0
0
网卡问题总结

网卡问题总结 写作目的: 总结下工作中遇到的问题,整理下收集的资料 包括下面三个方面: 1:Linux网卡中断使单个CPU过载2:网卡绑定3:常用的网卡操作 Linux网卡中断使单个CPU过载 在工作中遇...

feixiao2020
2014/12/07
75
0
网络RPS/RFS/GSO/GRO等功能释义

内核代码版本号为 3.10.105。 释义与代码分析 RSS RSS(Receive Side Scaling)是一种能够在多处理器系统下使接收报文在多个CPU之间高效分发的网卡驱动技术。 网卡对接收到的报文进行解析,获取...

黑客画家
2019/06/30
0
0
Linux RPS RFS

随着单核CPU速度已经达到极限,CPU向多核方向发展,要持续提高网络处理带宽,传统的提升硬件设备、智能处理(如GSO、TSO、UFO)处理办法已不足够。如何充分利用多核优势来进行并行处理提高网...

China_OS
2013/03/12
2.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

聚焦餐饮行业,研究院昨发布数据显示

谈话,聚焦餐饮行业,研究院昨发布数据显示,今年上半年,全国餐饮行业招聘需求增长46.18%,平均月薪6387元.随着餐饮行业的快速发展,"如何留人"也成为餐饮企业的思考题. 记者了解到,中国饭店协会...

点击fojewio
35分钟前
20
0
3·15晚会曝光上海氪信、招财旺旺SDK包泄露隐私 后台上传交易验证码敏感信息

来源 | 央视 7月16日,央视3·15晚会曝光国美易卡、美的空调遥控器、姨妈日历、银码头等50多款软件中内嵌的SDK包读取、上传用户隐私问题。上海氪信信息技术有限公司、北京招财旺旺信息技术有...

镭射财经
45分钟前
14
0
名称=''的无效表单控件不可聚焦 - An invalid form control with name='' is not focusable

问题: I have an acute problem on my website. 我的网站上有一个严重的问题。 In Google Chrome some customers are not able to proceed to my payment page. 在Google Chrome浏览器中,某......

技术盛宴
46分钟前
14
0
Hacker News 简讯 2020-07-17

更新时间: 2020-07-17 00:00 D 2.093.0 - (dlang.org) D 2.093.0 得分:32 | 评论:2 Let’s avoid talk of ‘chemical imbalance’: it’s people in distress - (psyche.co) 让我们避免谈论“......

FalconChen
51分钟前
80
0
【LeetCode】 59 在排序数组中查找元素的第一个和最后一个位置

题目: 解题思路: 二分法 https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/zai-pai-xu-shu-zu-zhong-cha-zhao-yuan-su-de-di-yi-/ 代......

JaneRoad
昨天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部