【华为云技术分享】Linux内核补丁源码分析(1)
在上一期中,我们介绍了Linux内核编程环境,在这一期中,我们将通过实例来介绍如何分析Linux内核的补丁。
一、Linux内核补丁
在“Linux内核发展史”中,我们简要介绍了Linux内核发展中各个版本的主要更新内容。内核的更新主要是通过补丁(patch)来实现的,社区开发人员向内核代码的git仓库提交补丁文件,补丁文件中包含了对内核代码的增加、删除和修改情况,记录了内核更新的历史信息。有许多新特性和新功能都是通过补丁文件而添加的。以Linux 4.19版内核为例,在“Linux发展史”一节中我们提到,Linux 4.19版内核的主要新特性有:
-
增加CAKE network queue management功能,这项更新主要用于解决家庭网关性能问题;
-
保证cGroup的最小I/O延迟;
-
对未来Wi-Fi 6(802.11ax-drafts)的实验性支持;
-
改进overlayfs的内存使用;
-
实验性文件系统EROFS的优化;
-
一个新的异步I/O轮询接口;
-
支持一个intel特性,可以为应用锁定部分CPU 缓存;
-
其他安全和驱动特性。
有关Linux内核4.19版本更新的详细信息,可以在相关网站[1](见文末参考文献)中找到。该网站列举了Linux内核2.5.1版本至今的主要更新历史,并且还在持续更新,例如对于Linux 内核4.x我们可以看到:
进入Linux 4.19之后,我们就能看到Linux 4.19版所具有的新特性,对于每一个特性都有补丁代码和文档的介绍。以第一个主要特性为例,这个特性主要介绍了一个叫CAKE(Common Applications Kept Enhanced)的综合队列管理系统,这个系统主要用于提升家庭网关的性能,解决网络边缘的bufferbloat问题,在该网站[1]中,我们可以看到对于CAKE的特性有如下详细介绍:
从上图可以看出,特性介绍的内容包含了一个对于该特性的简介、对于CAKE的介绍文献(包括一篇已发表的论文)和补丁文件的代码(Code项)。如果读者不清楚bufferbloat的含义,可以点击蓝色的bufferbloat关键字,于是我们了解到:bufferbloat是指由于路由器或其他网络设备缓存了过多的数据,从而产生了用户不期望的延迟。为解决这一问题,CAKE和它之前的解决方案主要是从队列管理入手的,这些方案被广泛用于数百万台计算机上,并将瓶颈链路上由于竞争导致的延迟降低到了20ms的量级(由此我们可以看出,被广泛应用的开源项目中所蕴含的创新力量)。
从论文和其他介绍文档中我们可以看出,CAKE这个系统主要包含以下几层:
-
Shaper:使用一个虚拟时钟来调整包的传输时机(是否延迟传输),从而实现bandwidth shaping。
-
Priority Queue:设置了四个传输类,每一类设置了不同的带宽上界值。如果一个传输类使用的带宽超过了其规定的带宽上界,那么该传输类的优先级就会被降级。
-
Flow Isolation:主要功能是用hash 函数将不同的包分配给不同的队列,并且选择一个队列来服务。CAKE的创新点在于使用了一个8路组相联的hash函数来代替fq_codel中原有的plainhash function,从而解决了原hash函数可能会有的“生日问题”,即当表项占用超过表大小的平方根时hash冲突的概率可能达到50%。
-
Active Queue Management:CAKE修改了原来的CoDel AQM框架,提升了性能。
-
Packet Management:除了以上四个主要层之外对队列和包处理的其它功能。
到这一步为止,我们可以对Linux 4.19内核的CAKE特性有一个初步的了解,但是这个了解是浅层的,还不涉及源码,而且[1]中并没有提供长期维护版本实时更新的所有补丁文件。
二、结语
本期我们通过一个实例介绍了一种Linux补丁文件更新的初步分析方法,下一小节中,我们继续根据CAKE的实例来介绍补丁文件的源码分析方法。
参考文献
[1]https://kernelnewbies.org/LinuxVersions
相关文章
- Linux环境搭建代理网络技术(linux挂代理)
- 迁移主机至虚拟机Linux迁移:实现真正的技术转移(主机到虚拟机linux)
- Linux下文件模糊查找的技巧(linux模糊查找)
- 35岁Linux运维:不改变,不退步(35岁linux运维)
- Linux系统:支持多种编码的万能平台(linux的系统编码)
- Linux:开放源码的多用途操作系统内核(linux是什么内核)
- Linux:管理只读文件系统的技术指南(linux只读文件系统)
- 量产U盘上使用Linux(量产u盘linux)
- Linux运维技术:深度剖析与实战精讲(linux运维技术精讲)
- Linux密码验证失败!(linux密码不正确)
- 变色龙 Linux:开启多彩的终端世界(变色龙linux)
- Linux网络端口汇聚:新的技术体验(linux端口汇聚)
- Linux的发展史: 从内核到分支的演变(linux的分支)
- Linux:开启新技术时代的分叉之路(linux的分支)
- 的作用Linux下防火墙保护系统的重要作用(linux中防火墙)
- Linux信号处理:内核的秘密武器(linux信号处理函数)
- Linux的发展史:从分支到枝蔓(linux的分支)
- 深入探究Linux内核的必要文件——头文件(linux内核头文件)
- 稳如磐石,Linux内核稳定版发布(linux内核稳定版)
- Linux:开源操作系统的那些故事(linux那些事儿)
- Linux安装JDK 6:一步一步指南(linux安装jdk6)
- 掌握Linux内核配置,打造完美的操作系统(linux内核配置)
- Linux系统配置:打造高效工作环境的必备技能(linux系统配置)
- 简单易懂的Linux安装SMB指南:快速架设文件共享网络!(linux安装smb)
- Linux进程间通信技术比较(linux进程通信比较)
- 25字中文文章标题:自学Linux系统,轻松搞定技术职场!(自学linux系统)
- 流媒体技术在Linux系统的应用(流媒体 linux)
- Linux系统下的文件怎么删除?可能遇到了删除不掉的情况。让小AI来为您解决这个问题吧!(linux文件删除不掉)
- 跟着视频学习,轻松掌握Linux从入门到精通(linux从入门到精通视频)