第九期-Linux内核补丁源码分析(1)

作者:罗宇哲,中国科学院软件研究所智能软件研究中心

在上一期中,我们介绍了Linux内核编程环境,在这一期中,我们希望通过实例来介绍如何分析Linux内核的补丁。

一、Linux内核补丁

在“Linux内核发展史”中,我们简要介绍了Linux内核发展中各个版本的主要更新内容。内核的更新主要是通过补丁(patch)来实现的,社区开发人员向内核代码的git仓库提交补丁文件,补丁文件中包含了对内核代码的增加、删除和修改情况,记录了内核更新的历史信息。有许多新特性和新功能都是通过补丁文件而添加的。以Linux 4.19版内核为例,在“Linux发展史”一节中我们提到,Linux 4.19版内核的主要新特性有:

(1)增加CAKE network queue management功能,这项更新主要用于解决家庭网关性能问题;

(2)保证cGroup的最小I/O延迟;

(3)对未来Wi-Fi 6(802.11ax-drafts)的实验性支持;

(4)改进overlayfs的内存使用;

(5)实验性文件系统EROFS的优化;

(6)一个新的异步I/O轮询接口;

(7) 支持一个intel特性,可以为应用锁定部分CPU 缓存。

(8)其他安全和驱动特性。

有关Linux内核4.19版本更新的详细信息,可以在相关网站1中找到。该网站列举了Linux内核2.5.1版本至今的主要更新历史,并且还在持续更新,例如对于Linux
内核4.x我们可以看到:
在这里插入图片描述

进入Linux 4.19之后,我们就能看到Linux 4.19版所具有的新特性,对于每一个特性都有补丁代码和文档的介绍。以第一个主要特性为例,这个特性主要介绍了一个叫CAKE(Common Applications Kept Enhanced)的综合队列管理系统,这个系统主要用于提升家庭网关的性能,解决网络边缘的bufferbloat问题,在该网站2中,我们可以看到对于CAKE的特性有如下详细介绍:
在这里插入图片描述

从上图可以看出,特性介绍的内容包含了一个对于该特性的简介、对于CAKE的介绍文献(包括一篇已发表的论文)和补丁文件的代码(Code项)。如果读者不清楚bufferbloat的含义,可以点击蓝色的bufferbloat关键字,于是我们了解到:bufferbloat是指由于路由器或其他网络设备缓存了过多的数据,从而产生了用户不期望的延迟。为解决这一问题,CAKE和它之前的解决方案主要是从队列管理入手的,这些方案广泛用于数百万台计算机上,并将瓶颈链路上由于竞争导致的延迟降低到了20ms的量级(由此我们可以看出,广泛应用的开源项目中创新的力量)。

从论文和其他介绍文档中我们可以看出,CAKE这个系统主要包含以下几层:

  1. Shaper:使用一个虚拟时钟来调整包的传输时机(是否延迟传输),从而实现bandwidth shaping。

  2. Priority Queue:设置了四个传输类,每一类设置了不同的带宽上界值。如果一个传输类使用的带宽超过了其规定的带宽上界,那么该传输类的优先级就会被降级。

  3. Flow Isolation:主要功能是用hash函数将不同的包分配给不同的队列,并且选择一个队列来服务。CAKE的创新点在于使用了一个8路组相联的hash函数来代替fq_codel中原有的plain hash function,从而解决了原hash函数可能会有的“生日问题”,即当表项占用超过表大小的平方根时hash冲突的概率可能达到50%。

  4. Active Queue Management:CAKE修改了原来的CoDel AQM框架,提升了性能。

  5. Packet Management:除了以上四个主要层之外对队列和包处理的其它功能。

到这一步为止,我们可以对Linux 4.19内核的CAKE特性有一个初步的了解,但是这个了解是浅层的,还不涉及源码,而且该网站3中并没有提供长期维护版本实时更新的所有补丁文件。

二、结语

本期我们通过一个实例介绍了一种Linux补丁文件更新的初步分析方法,下一小节中,我们继续根据CAKE的实例来介绍补丁文件的源码分析方法。
在这里插入图片描述


  1. https://kernelnewbies.org/LinuxVersions ↩︎

  2. https://kernelnewbies.org/LinuxVersions ↩︎

  3. https://kernelnewbies.org/LinuxVersions ↩︎

发布了20 篇原创文章 · 获赞 0 · 访问量 254

猜你喜欢

转载自blog.csdn.net/liucw900716/article/details/105300486