Linux内核3.11的socket busy poll机制避免睡眠切换
socket隔离了用户进程和协议栈,RX/TX queue隔离了协议栈和设备驱动。
这样的隔离方式给编程和设计带来了简便,然而却不利于性能。
Linux的RPS设计,旨在让一个CPU既处理数据包的协议栈接收流程(软中断内核线程上下文,或者随意上下文的软中断处理),又运行用户态处理该数据包的进程。
我说这样的设计有利也有弊。假设仅仅是旨在提高cache利用率,那么这样的设计是对的,可是有没有想过别的情况,假设一个CPU在NET RX软中断处理的最后将一个skb推到了一个socket队列。并试图唤醒等待进程,那么它下一步该干些什么呢?实际上它下一步应该返回设备。继续去poll下一个skb,然而RPS的设计不是这样。RPS的设计旨在希望让该CPU继续处理用户态进程....这就必定要进行一次进程切换以及用户/内核态的切换,尽管server的CPU cache利用率提高了,可是协议栈处理相关的CPU cache利用率反而减少了。其实,CPU cache是否在进程切换以及用户/内核态切换后刷新,这个是体系结构相关的,并非说全部的体系结构都能带来好的结果。
必须做进一步的測试。
我觉得最好的办法就是用户进程和内核的NET RX软中断处在不同的CPU核心上,然而这两个CPU核心共享二级cache或者三级cache。
...
Linux内核随之发展出了更好的方案。那就是突破上述的独立三大部分,让socket直接深入到设备层直接poll skb!!
注意。这是一个poll操作,并非让socket直接处理协议栈流程。
socket直接poll的意思是说。socket在队列中没有读到数据包的时候,并非睡眠。然后等待NET RX内核线程将数据包放入队列后将其唤醒,而是直接去问设备:如今有数据包吗?假设有,我直接带走它们去协议栈,而不须要你送它们去了。这是一种“拉”的方式。而不是以往的那种“推”的方式。拉和推的差别在于。对于接收者,拉是同一个实体,是主动的,而推则是被动的。
这就攻克了RPS试图解决却又没有完美解决的问题。
这样的机制叫做busy poll。
RPS试图让软中断处理完数据包后,切换到用户进程,此时软中断将间歇。然后数据包中断后又要切回来...busy poll就不是这样,它直接绕过了软中断这个运行体,直接靠socket自身所在的运行体来主动拉取数据包进行处理。
避免了大量的任务交接导致的切换问题。
我不晓得对于转发的情况,是否也能採用busy poll的方式来提高性能,这须要測试。以上的阐述仅仅是理想情况,真实情况是。socket可能替别的socket从设备拉取了一个数据包。甚至这个数据包仅仅是转发的,不与不论什么socket关联...由于数据包仅仅有经过标准的路由以及四层处理后,才干和一个详细socket关联。在设备驱动层。指望找到这个关联是徒劳且无望的!无论怎么说。控制权在用户自己手中,凭概率来讲,假设你的设备中大量的数据包都是转发包,就不要开启这个功能,假设你的进程拥有少量的socket处理大量的数据包,那就开启它,无论如何,这仅仅是一个使用方法和配置的问题,何时开启,以及份额设置多少,须要一个事前採样的过程。
今天早上起太早。写了两篇随笔。所以也就没出去溜,如今快七点了。小小和孩她妈还睡着呢,我准备下去上班了....
Linux内核3.11的socket busy poll机制避免睡眠切换的更多相关文章
- Linux内核 TCP/IP、Socket参数调优
Linux内核 TCP/IP.Socket参数调优 2014-06-06 Harrison.... 阅 9611 转 165 转藏到我的图书馆 微信分享: Doc1: /proc/sy ...
- TCP/IP协议栈源码图解分析系列10:linux内核协议栈中对于socket相关API的实现
题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈内核相关技术 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com linu ...
- Linux内核0.11体系结构 ——《Linux内核完全注释》笔记打卡
0 总体介绍 一个完整的操作系统主要由4部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如图0.1所示.操作系统内核程序主要用于对硬件资源的抽象和访问调度. 图0.1 操作系统组成部分 内核 ...
- Linux内核0.11代码阅读(转)
最近决定开始阅读Linux 0.11的源代码. 学习Linux操作系统的核心概念最好的方法莫过于阅读源代码.而Linux当前最新的源代码包已经有70MB左右,代码十分庞大,要想深入阅读十分困难.而Li ...
- 解析 Linux 内核可装载模块的版本检查机制
转自:http://www.ibm.com/developerworks/cn/linux/l-cn-kernelmodules/ 为保持 Linux 内核的稳定与可持续发展,内核在发展过程中引进了可 ...
- Linux内核分析——理解进程调度时机跟踪分析进程调度与进程切换的过程
20135125陈智威 +原创作品转载请注明出处 +<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验 ...
- LINUX内核分析第八周学习总结:进程的切换和系统的一般执行过程
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程切换的关 ...
- (转)Linux内核 TCP/IP、Socket参数调优
Doc1: /proc/sys/net目录 所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失) ...
- Linux内核0.11 setup文件说明
一.总体功能介绍 这是关于Linux-kernel-0.11中boot文件夹下setup.s源文件的实现功能的总结说明. setup.s是一个操作系统加载程序,它的主要功能是利用BIOS中断读取机器系 ...
随机推荐
- CentOS 5.8 上安装 systemtap-2.6 转
http://segmentfault.com/a/1190000002541077#articleHeader1
- js比较两个String字符串找出不同,并将不同处高亮显示
根据java代码改写成js,下边js文件代码: function StringBuffer() { this.__strings__ = []; }; StringBuffer.prototype.a ...
- 用最简单的例子理解复合模式(Composite Pattern)
在显示树形结构时,复合模式有很好的体现.本篇显示如下部门结构: 以上,有的节点包含子节点,有的节点部包含子节点.不管是什么节点,每个节点就代表一个部门. 首先设计一个关于部门的抽象基类. public ...
- jQuery碎语(3) 动画特效
5.动画特效 ● 自制折叠内容块 内容块如下 <div class="module"> <div class="caption"> &l ...
- ImageView 设置图片来自:http://blog.csdn.net/lincyang/article/details/6562163
android doc中是这样描述的: public void setImageResource (int resId) 这是其中的一个方法,参数resld是这样: ImageView.setImag ...
- 【spring cloud】在spring cloud服务中,打包ms-core失败,报错Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.4.RELEASE:repackage (default) on project
在spring cloud服务中,有一个ms-code项目,只为所有的微服务提供核心依赖和工具类,没有业务意义,作为核心依赖使用.所以没有main方法,没有启动类. 在spring cloud整体打包 ...
- ConcurrentDictionary AddOrUpdate
var sessionId = a.Session.SessionID.ToString(); userDic.AddOrUpdate( authUser.UserId, sessionId, (ke ...
- windowsmobile 开发环境
Windows Mobile 6开发环境的配置过程 需要的文件列表:1.Visual Studio 2005 Professional及更高的版本(Visual Studio 2005 Express ...
- 关于DirectShow SDK 和Windows SDK,及DirectX SDK
关于DirectShow SDK 和Windows SDK,及DirectX SDK 本文描述了DirectShow SDK ,Windows SDK,DirectX SDK ,VS200?之间的 ...
- Python3.6学习笔记(三)
面向对象编程 面向对象编程 Object Oriented Programming 简称 OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程 ...