[转帖]Linux内核为大规模支持100Gb/s网卡准备好了吗?并没有
Linux内核为大规模支持100Gb/s网卡准备好了吗?并没有
之前用 千兆的机器 下载速度 一般只能到 50MB 左右 没法更高 万兆的话 可能也就是 200MB左右的速度 很难更高 不知道后续的服务器 会不会 能够提升一下 之前坐着说到了 120nm 的时间 发送一个包 记得CPU的指令周期是 -3nm左右 个内存的时间差不多了 不知道RDMA等的方式 可不可能完成相应的高吞吐量的处理. 原作者博客 https://blog.csdn.net/zhoukejun/article/details/4153266
又是大年初一,和过去三十多年的新年一样,无聊,消沉,吃不好饭,盼着上班(小时候是盼着开学…)…
事实上,不仅仅是Linux内核,几乎所有的 现代操作系统 都没有为支持100Gb/s做好准备。
这是一个变革的年代,现代操作系统 已经不再 现代!
我们回望一下类似Unix/Linux,Windows NT这些操作系统是如何被称作 现代 的。嗯,是因为虚拟内存系统。
是 隔离的地址空间 让操作系统一下子进入了现代社会。在此之前,操作系统都是谭浩强书里写的那种一旦操作空指针就会系统崩溃的系统。
自打操作系统成为现代操作系统后,貌似它就没有再有过突破性的进化,但是其周边,确实翻天覆地了。
先看CPU和系统架构,先是其主频的疯涨,然后又是多核架构。主频增加这个对于操作系统内核来讲是好事,在单位时间内能多执行很多指令,这完全是一个打鸡血的过程。然而多核心架构就让几乎所有的操作系统内核有点开始吃力应对了。其对数据同步的解法中,往往都是见招拆招地加锁。
多核心架构对系统性能的作用力和主频增加的作用力方向是相反的,如果主频的增加让CPU在单位时间执行了更多的指令,那么多核之间的沟通成本抵消了这个主频提升带来的收益,因为同步成本是高昂的。
多核心架构重演了 人月神话。
最后的结果就是,支持SMP多核架构的操作系统内核,其实就是给当年引入虚拟内存时的现代操作系统全部挂满了枷锁而已。单就操作系统内核本身而言,它更慢了,而不是更快了!
意思是说,多核心架构下,单独的CPU上,操作系统的执行效率要比单核架构下操作系统的执行效率更低了!核数越多,沟通同步成本越大,最终让性能/核心数曲线上凸!
而沟通同步的方式,无外乎就是,锁!
所以说,锁是阻止操作系统性能多核扩展性伸缩性的罪魁祸首!
事实上,Linux内核也好,UNIX也好,Windows NT也好,根本就不是为多核心架构而设计的,它们只是 简单适应了SMP而已。
操作系统虽然是现代的, 但是却不是当代的! (我记得上小学和初中那会儿,老师说过现代和当代的区别)
在现代操作系统发展停滞不前的时候,硬件却没有闲着。
100Gb/s网卡的意思是说, 如果有100Gb的数据在缓冲区里,它可以在1秒中把它们全部发送出去。但问题是, 操作系统有能力在1秒钟内准备好100Gb的数据吗?
我们知道,在我们对操作系统的传统认知中,数据的源头来自于用户态缓冲区,经由操作系统内核协议栈,将数据怼到网卡缓存区。我们可以简单测算一下,操作系统的内核协议栈有没有能力1秒钟往网卡怼100Gbit的数据。
这里有几个简单的统计数据统计点,获取这些数据的方法:
- 在tcp_write_xmit函数的while循环里打点,看看发送一个skb需要多久;
- 使用pktgen类似的机制,测算单包发送延时。
在如今常见的1Gb/s的网卡上发包测算,平均约4微秒发送一个Full Mss的包,貌似Linux内核对于千兆网卡应对的还不错,但这并不意味着它应对10Gb/s,40Gb/s,100Gb/s这些发送速率时,是可以线性扩展的!
简单反算,100Gb/s需要单包发送延时在120纳秒以内,我们只需要测算一下120纳秒够不够内核协议栈处理一个数据包就可以了。
纳秒,这是一个cache级别的时间,如果发生了一次cache命中,至少可以节省20到30纳秒的时间,但是反过来如果很不幸cache missing了,那么就要在120纳秒中扣除20到30纳秒,这样就剩下90纳秒了。
该重头戏了:
- 一次spinlock需要20纳秒左右的时间;
- 一次内存分配需要大概60纳秒的时间;
很不幸,没有时间剩下来了。以上的测算还是基于64字节的小包,丝毫没有包括真正的处理开销!而我们知道,协议栈处理过程中,有超级多的协议逻辑…120纳秒远远不够!
在协议栈处理数据包并发送的过程中,内存分配和内存操作将会引入巨大的延时,这十有八九又会牵扯到cache missing!
从另一个角度看,Linux内核作为一个通用操作系统内核,显然并没有针对单独的特性做极端的性能优化,这个意义上,我不是说它没有为大规模支持100Gb/s网卡做好准备,而是它可能根本就没有准备在支持这种高速网卡的竞赛中取得胜利!这方面你可以和David Miller交流一下,看看在他看来,代码的可维护性,简洁性,统一处理这些和极端的性能优势相比,哪个更重要。
不过,无论如何,Linux内核,Windows NT之类的OS内核在多核心架构下无法线性扩展,这确实是阻碍其从 现代操作系统 进化到 当代操作系统 的路易十六!
[转帖]Linux内核为大规模支持100Gb/s网卡准备好了吗?并没有的更多相关文章
- [转贴]Linux内核LTS长期支持版生命周期
Linux内核LTS长期支持版生命周期 https://blog.51cto.com/dangzhiqiang/1894026 搞不懂长期支持版本的特点和区别. 党志强关注0人评论4371人阅读201 ...
- 基于tiny4412的Linux内核移植(支持device tree)(三)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植(支持device tree)(一)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- [转帖]Linux内核系统体系概述
Linux内核系统体系概述 https://www.cnblogs.com/alantu2018/p/8447369.html Linux 内核主要由 5 个模块构成,它们分别是: 进程调度模块 用来 ...
- [转帖]Linux内核剖析(一)Linux的历史
Linux内核剖析(一)Linux的历史 https://www.cnblogs.com/alantu2018/p/8991158.html Unix操作系统 Unix的由来 汤普逊和里奇最早是在贝尔 ...
- xmake v2.6.2 发布,新增 Linux 内核驱动模块构建支持
Xmake 是一个基于 Lua 的轻量级跨平台构建工具. 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时. 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLis ...
- 基于tiny4412的Linux内核移植(支持device tree)(二)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- linux内核是如何支持深度睡眠(deep sleep)方式的?
1. 硬件架构 arm64 2. 内核版本 4.19 3. 分析相关函数 setup_arch() -> psci_dt_init() -> psci_0_2_init() -> g ...
- OMAP4之DSP核(Tesla)软件开发学习(二)Linux内核驱动支持OMAP4 DSP核
注:必须是Linux/arm 3.0以上内核才支持RPMSG,在此使用的是.config - Linux/arm 3.0.31 Kernel Configuration.(soure code fro ...
随机推荐
- Linux - CentOS7上的时间同步
1. 时区的概念 1.1 时区简介 地球是自西向东自转,东边比西边先看到太阳,东边的时间也比西边的早.东边时刻与西边时刻的差值不仅要以时计,而且还要以分和秒来计算,这给人们带来不便.所以为了克服时间上 ...
- Java 缓存技术之 ehcache
1. EHCache 的特点,是一个纯Java ,过程中(也可以理解成插入式)缓存实现,单独安装Ehcache ,需把ehcache-X.X.jar 和相关类库方到classpath中.如项目已安装了 ...
- Java逻辑运算
逻辑运算是在关系运算基础之上的运算,能处理更加复杂的问题 逻辑运算的结果是 true 或 false 一.逻辑运算的种类: 在java的逻辑运算符中,有这么四类&&(短路与).& ...
- 2.1 View与ViewGroup的概念
http://www.runoob.com/w3cnote/android-tutorial-view-viewgroup-intro.html UI Overview 在Android APP中,所 ...
- YOLO2 (3) 快速训练自己的目标
1快速训练自己的目标 在 YOLO2 (2) 测试自己的数据 中记录了完整的训练自己数据的过程. 训练时目标只有一类 car. 如果已经执行过第一次训练,改过一次配置文件,之后仍然训练同样的目标还是只 ...
- 各个版本的 Oracle 11.2.0.4下载地址
Oracle 11.2.0.4下载地址 Linux x86: https://updates.oracle.com/Orion/Services/download/p13390677_112040_L ...
- P1734 最大约数和
题目描述 选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大. 输入输出格式 输入格式: 输入一个正整数S. 输出格式: 输出最大的约数之和. 输入输出样例 输入样例#1: 复 ...
- Qt+QGIS二次开发:QGIS中使用QgsRubberBand类创建临时图形
1 概述 临时图形Rubberband主要用于高亮显示.交互绘制等情况下.2 原理 临时图形是在一个底色透明的图层(顶层)上,添加已有的几何元素或者创建一个几何元素(临时图形),可以设置相应的样式, ...
- 理解Express express.static 和 __direname 及 __firename的含义
理解Express express.static 和 __direname 及 __firename的含义 一:理解 app.use(express.static(__direname + '/pub ...
- highcharts为X轴标签添加链接
$(function () { var categoryLinks = { 'Foo': 'http://www.google.com/search?q=foo', 'Bar': 'http://ww ...