在上一期中,我们介绍了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问题,在该网站[1]中,我们可以看到对于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中原有的plainhash function,从而解决了原hash函数可能会有的“生日问题”,即当表项占用超过表大小的平方根时hash冲突的概率可能达到50%。

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

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

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

二、结语

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


参考文献

[1]https://kernelnewbies.org/LinuxVersions

【华为云技术分享】Linux内核补丁源码分析(1)相关推荐

  1. 第十期-Linux内核补丁源码分析(2)

    作者:罗宇哲,中国科学院软件研究所智能软件研究中心 在上一期中,我们通过CAKE系统的实例介绍了一种对Linux内核补丁的初步分析方法,这一期我们将继续通过CAKE系统的例子介绍一种对补丁文件源码的分 ...

  2. 【华为云技术分享】Linux内核源码结构(1)

    在上一期中,我们介绍了Linux内核发展的历史,也介绍了与其相关的UNIX和GNU的相关知识.从这一期开始,我们将介绍Linux内核的源码结构.我们将先根据Linux源码的目录结构进行分析,到本文章发 ...

  3. 【华为云技术分享】Linux内核编程环境 (1)

    在上一期中,我们介绍了Linux内核的源码结构,这一期我们介绍Linux内核编程环境,首先介绍的是Linux内核的编译方法. 一.Linux内核编译方法 本期中我们以Linux 4.19.94版内核来 ...

  4. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1

    前言 以互联网为代表的信息技术的迅猛发展对整个经济体系产生了巨大的影响.信息技术的发展一方面使知识的积累和传播更加迅速,知识爆炸性的增长:另一方面,使信息的获取变得越来越容易,信息交流的强度逐渐增加, ...

  5. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 3

    4. 微观层面 4.1 个体动机 在开源软件发展之初, 商业组织的投入很少甚至没有, 完全是靠Richard Stallman 或者 linus Torvalds 这样的个人在努力推动开源软件艰难前行 ...

  6. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(下)

    [华为云技术分享]三大前端技术(React,Vue,Angular)探密(上) [Angular] Angular(通常被称为 "Angular 2+"或 "Angula ...

  7. linux网卡驱动源码分析(一)

    linux网卡驱动源码分析(一) linux struct linux内核 网络 descriptor resources 转自http://blog.csdn.net/ustc_dylan/arti ...

  8. [前沿技术] AMD FSR 1.0源码分析(二)

    FSR技术分析 前文:[前沿技术] AMD FSR 1.0源码分析(一) 2. EASU源码分析 2.3 FsrEasuF分析 1️⃣首先,就参数而言,主要是: void FsrEasuF(out A ...

  9. Linux PPP实现源码分析

    Linux PPP实现源码分析 作者:kwest <exboy@163.com>  版本:v0.7 ©所有版权保留 转载请保留作者署名,严禁用于商业用途 . 前言: PPP(Point t ...

最新文章

  1. 系统动力学9种模型_软工国际标准专栏(9)|系统和软件质量模型
  2. pdf.js 利用HTML5技术显示pdf内容
  3. 个人管理:如何发现自己的兴趣?
  4. regexbuddy使用记录
  5. (2)FPGA面试题竞争与冒险
  6. oracle24801错误,[数据库]oracle错误(ORA
  7. java在文件里搜字段_Java 如何找出两个文本文件中有相同字段的行
  8. source insight设置Courier new字体
  9. 计算机机房空调设计规范,计算机机房空调设计规范
  10. 免费的Web压力测试工具
  11. 14行代码教你制作自己的有道词典单词本(python)
  12. 如何使用ListView分页
  13. 关于解决Visual Studio 实时调试器弹出的对话框问题 三种解决办法
  14. 两台windows电脑通过以太网互ping
  15. ArcGIS Pro简介
  16. Apple iPad
  17. CSS3边框、颜色、伪选择器
  18. RFID技术如何让图书馆实现自助借还,自助盘点
  19. Unity中AssetBundle打包文件大致解读
  20. SpringCloud系列教程(五)之SpringCloud Gateway 网关聚合开发文档 swagger knife4j 和登录权限统一验证【Hoxton版】

热门文章

  1. 计算机的英语谚语,英语谚语大全_2017考研:计算机专业考研复习要点_沪江英语...
  2. SLAM GMapping(2)传感器
  3. ROS笔记(21) 地图
  4. centos5安装oracle11,CentOS 6.5 x64 安装 Oracle11g R2
  5. java hibernate 分页取数_java – Hibernate分页机制
  6. 汉字-生僻字:生僻字目录2
  7. vue中watch的用法总结以及报错处理Error in callback for watcher checkList
  8. MySQL 添加、查看字段注释
  9. NGUI使用教程(2) 使用NGUI创建2D场景而且加入标签和button
  10. leetcode 130 python