zoukankan      html  css  js  c++  java
  • 【华为云技术分享】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的实例来介绍补丁文件的源码分析方法。


    参考文献

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

  • 相关阅读:
    设置通过数字证书方式登录远程连接Linux服务器,禁止root账户远程密码方式远程连接服务器
    Windows server 2003 粘滞键后门+提权
    CVE-2017-7494复现 Samba远程代码执行
    SQL盲注学习-时间型
    SQL盲注学习-布尔型
    关于绿盟RSAS使用时遇到的问题
    SQL注入学习
    CentOS7,zabbix3.4通过,zabbix-Java-gateway监控Tomcat
    (转)输入pipt提示:AttributeError: 'module' object has no attribute 'HTTPSConnection'
    pip安装cx_Oracle报错:error code 1 in /tmp/pip-build-root/cx-Oracle
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13164822.html
Copyright © 2011-2022 走看看