Linux内核补丁源码分析(1)

2020 年 4 月 26 日

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 问题,在该网站[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 的实例来介绍补丁文件的源码分析方法。



2020 年 4 月 26 日 16:46741

评论

发布
暂无评论
发现更多内容

都是“算法”惹的祸,字节三面处处坑,我的offer要凉了?

马士兵老师

字节跳动 编程语言 算法和数据结构 面试数据结构与算法

数字经济发展势头强劲

CECBC区块链专委会

数字经济

为什么说应用架构需要分类思维?

Java架构师迁哥

Thread.start() ,它是怎么让线程启动的呢?

小傅哥

Java 线程 JVM 小傅哥 Thread

区块链医疗应用场景有哪些?区块链医疗解决方案

13530558032

论“万剑归宗”思想对开发设计的一点“肤浅”作用

八苦-瞿昙

随笔杂谈 设计实践

架构师训练营 W06 作业

Geek_f06ede

Java踩坑记系列之BigDecimal

Java老k

BigDecimal

一期二班-吴水金-第六课作业

吴水金

计算机核心课程必读书目——《高级数据结构:理论与应用》

计算机与AI

数据结构 算法

Architecture Phase1 Week10:Summarize

phylony-lu

极客大学架构师训练营

面试者必看:Java8中的默认方法

Silently9527

java8 默认方法

架构师训练营 - 第五周学习总结

joshuamai

区块链、AI与大数据加持,电子合同更安全、效率更高

CECBC区块链专委会

区块链 大数据

JVM-技术专题-垃圾回收策略

李浩宇/Alex

家庭留白、中屏崛起与硬件棋局

脑极体

“奋斗者”号下潜10909米:我们为什么要做深海探索?

脑极体

熬夜不睡觉整理ELK技术文档,从此摆脱靠百度的工作(附源码)

996小迁

Java 编程 架构 面试 ELK

甲方日常 57

句子

工作 随笔杂谈 日常

架构师训练营 - 第五周课后练习

joshuamai

Alibaba最新《Java架构核心宝典》限时开放下载,互联网主流技术详解总结,提升技术能力的必备宝典!

Java架构之路

Java 程序员 架构 面试 编程语言

Java踩坑记系列之Arrays.AsList

Java老k

Java

区块链防伪溯源平台搭建,助力企业品牌安全体系升级

13530558032

开源认证和访问控制的利器keycloak使用简介

程序那些事

程序那些事 授权框架 开源认证框架 keycloak 认证授权

智慧园区管理平台app系统开发,智慧楼宇系统搭建

13530558032

智慧警务大数据可视化平台智慧公安警务研判系统开发

13530558032

数字人民币快来了,但多数人可能会有四大误解

CECBC区块链专委会

数字人民币

IPFS四币连发系统开发技术(四币循环模式)

薇電13242772558

区块链 数字货币

mongodb 源码实现系列 - command命令处理模块源码实现一

杨亚洲(专注mongodb及高性能中间件)

MySQL mongodb 高性能 源码剖析 分布式数据库mongodb

Alibaba官方发文:阿里技术人的成长路径与方法论

Java架构师迁哥

java: Compilation failed: internal java compiler error解决办法

LSJ

IDEA

Linux内核补丁源码分析(1)-InfoQ