我是荔园微风,作为一名在IT界整整25年的老兵,最近受邀给年轻人讲了一场Windows内核和Linux内核相关的讲座。大家听得非常认真。
计算机操作系统的功能角色:作为用户和计算机硬件资源之间的交互,管理调度硬件资源,为应用软件提供运行环境。操作系统属于基础软件,是系统级程序的汇集,为用户屏蔽底层硬件复杂度, 并提供编程接口和操作入口。操作系统控制处理器(CPU)调度系统资源,控制应用程序执行的时机, 决定各个程序分配的处理器时间。操作系统需要兼容底层硬件和应用软件,才能实现计算机的功能。
内核是操作系统中应用连接硬件设备的桥梁。对于一个现代的操作系统来说,它的内核至少应该提供以下 4 种基本能力:
管理进程、线程(决定哪个进程、线程使用 CPU)
管理内存(决定内存用来做什么)
接硬件设备(为进程、和设备间提供通信能力)
提供系统调用(接收进程发送来的系统调用)
从上面 4 种能力来看操作系统和内核之间的关系,通常可以把操作系统分成 3 层,最底层的硬件设备抽象、中间的内核和最上层的应用。
那么,内核和进程又是如何配合工作的?这个问题之前也困绕着我,后来,论坛里有一位高手指点我们,他说:进程和内核的关系,初初一看类似于浏览器请求服务端服务,但仔细一研究,又不是这样。这个比喻打得很贴切,让我们突然觉得这个问题不再那么让人疑惑了。内核权限非常高,它可以管理进程、可以直接访问所有的内存,因此确实需要和进程之间有一定的隔离。这个隔离用类似请求/响应的模型,非常符合常理。
但不同的是,在浏览器、服务端模型中,浏览器和服务端是用不同的机器在执行,因此不需要共享一个CPU。但是在进程调用内核的过程中,这里是存在资源共享的。比如,一个机器有 4 个 CPU,不可能让内核用一个CPU,其他进程用剩下的 CPU。这样太浪费资源了。再比如,进程向内核请求 1000MB 的内存,内核把 1000MB 的数据传回去。这个模型不可行,因为传输太慢了。所以,多数操作系统的设计都遵循一个原则:进程向内核发起一个请求,然后将 CPU 执行权限让出给内核。内核接手 CPU 执行权限,然后完成请求,再转让出 CPU 执行权限给调用进程。
下面我把我讲座中的一些PPT放上来和大家分享。做得一般,请大家将就着看。
Windows内核(右)和Linux内核(左)在体系结构上的比较,一个是混合内核结构,一个是宏内核结构,各有千秋,不分伯仲。
Windows 系统的访问分为 User mode(用户模式)和 Kernel mode(内核模式)。用户级的应用程序在用户模式中运行,而系统级的程序在内核模式中运行。内核模式允许访问所有的系统内存和 CPU 指令。Windows 系统从最早期的 16 位、32 位到现在流行的 64 位,不断持续更新。
Linux kernel 是开源项目,由全球范围的开发者(企业、团体、独立开发者)共同贡献源代码。Linux 的官方组织是 Linux 基金会,作为非盈利的联盟,协调和推动 Linux 系统的发展,以及宣传、保护和规范 Linux。Linux 基金会由开源码发展实验室(Open Source Development Labs,OSDL)与自由标准组织(Free Standards Group ,FSG) 于 2007 年联合成立。
开源社区是 Linux 系统的创新源泉和主要的开发场所。Linux 操作系统发行版分为社区版本和商业版本。社区版本数量较多,其开发和维护的主体是开源社区。少数的商业版本(比如红帽企业版) 则是在社区版本的基础上,进一步优化而来。整体来看,无论是否涉及商业活动,开源社区是 Linux 发行版的创新来源和主要的开发场所。而成熟的开源社区通常由相应的开源基金会(或者项目委员会)进行管理。开源基金会为开发社区制定了规则,进行资源管理,负责可能的商务对接,以及保护社区的健康运转。社区的开源基金会(委员会)一般由开源贡献方进行赞助和决策支持。
许多开源社区背后都有一个主导企业,为社区提供资金和研究支撑,甚至直接委派员工参与开源项目。例如,Fedora 社区的核心开发者中 1/3 是红帽的正式雇员。通过资助和维护开源社区的方式,企业可以发挥研究力量的“杠杆”作用,通过向社区输入自有的研究资源,吸引更多的外部贡 献者参与进来,扩大创意来源;另一方面,开源社区版本也成为企业扩大技术影响力的重要途径。
Linux 操作系统由 4 部分组成:kernel、shell、文件系统、应用程序。Kernel(内核)是操作系统的核心,不同于 windows 的内核,Linux 的内核不仅实现了进程调度、内存管理、中断处理、异常陷阱处理,而且还实现了进程管理、进程通信机制、虚拟内存管理、文件系统驱动和 USB、网络、声 音等各类设备驱动子系统,决定了整个系统的性能和稳定性。而 shell 是系统的用户界面,提供用 户与内核交互的接口,接收用户输入的命令并送入内核去执行。
Windows内核(右)和Linux内核(左)在进程线程上的比较,生成子进程方式有较大不同,大家可查询相关资料仔细研究。
Linux 操作系统在服务器领域的普及,主要由于 3 个方面:
(1)集思广益。全球开发者对 Linux 内核保持了持续的更新,提供了充足的创新动力。据分析结果,截至 2018 年 9 月,已有超过 19000 名开发者为 Linux 内核贡献了代码, 这些开发者遍布全球范围超过1500个组织/企业。广泛分布的开发者,从不同视角不同方面对Linux 内核的补充,使得 Linux 系统得以快速适应服务器领域的变化。
(2)系统代码可以修改和自定义,用户可调用计算机资源的自由度极高。Linux 操作系统的使用者 可以轻松查看系统代码,可以自由修改代码来修补常见的问题,也可以开发自己的程序并添加入 Linux 操作系统中。相比 Windows 等闭源系统,Linux 支持了使用者对于计算机资源极大的使用自由度,支持专业用户去构建和自定义服务器,由此获得了互联网公司、云计算公司的青睐。
(3)运行效率高,运维成本低。Linux 系统在服务器上面的运行效率较高,相对比较轻量化,除非硬件资源分配出现问题,不易出现系统卡死状况。而且 Linux 系统天然地支持虚拟化。因此,在服务 器集群上,Linux 系统的运维成本较低。
(4)安全。Linux 从发展根源上就是针对多用户系统设计的,系统管理员和 root 用户具有系统管理权限。Linux 面向全球开发者开源,系统文件都是文档,在全球开发者多次的筛查和更新中,基本排除了“后门植入”的可能。实际应用中,普通不成熟的 Linux 操作系统确实可能存在安全问题, 也是和系统的文档属性有关。例如,用户 root 权限和 sudo 指令可在有意或无意间修改 Linux 系 统文档,可能会对其他用户或整个系统造成不利影响。因此,成熟的 Linux 操作系统解决方案,有 必要对这类属性进行设计方面的防范,去进行适当的权限屏蔽。而这些安全属性的设计,本质上并 不存在难以解决的障碍。
Linux内核链表数据结构(Linux内核四大数据结构之一)
说到 Linux 内核设计,主要存在以下一些特色:
Multitask and SMP(Symmetric multiprocessing)
Linux 支持并发,但这里的MultiTask 指多任务,就是多个任务可以同时执行,这里的“同时”并不是要求并发,而是在一段时间内可以执行多个任务。SMP 指对称多处理,其实是说 Linux 下每个处理器的地位是相等的,内存对多个处理器来说是共享的,每个处理器都可以访问完整的内存和硬件资源。这个特点决定了在 Linux 上不会存在一个特定的处理器处理用户程序或者内核程序,它们可以被分配到任何一个处理器上执行。
ELF(Executable and Linkable Format)
ELF 翻译过来叫作“可执行文件链接格式”。这是一种从 Unix 继承而来的可执行文件的存储格式,ELF 中把文件分成了一个个分段(Segment),每个段都有自己的作用。
Monolithic Kernel
翻译过来就是“宏内核”,宏内核说明 Linux 的内核是一个完整的可执行程序,且内核用最高权限来运行。宏内核的特点就是有很多程序会打包在内核中,比如,文件系统、驱动、内存管理等。当然这并不是说,每次安装驱动都需要重新编译内核,现在 Linux 也可以动态加载内核模块。所以哪些模块在内核层,哪些模块在用户层,这是一种系统层的拆分,并不是很强的物理隔离。微内核只保留最基本的能力,比如进程调度、虚拟内存、中断。多数应用,甚至包括驱动程序、文件系统,是在用户空间管理的。
Linux内核队列数据结构(Linux内核四大数据结构之一)
Windows 也有内核,它的内核是 C/C++ 写的。我们今天用的 Windows 7, Windows 10 的内核叫作 Windows NT。Windows 同样支持 Multitask 和 SMP(对称多处理)。Windows 的内核设计属于混合类型,你可以看到内核中有一个 Microkernel 模块。而整个内核实现又像宏内核一样,含有的能力非常多,是一个完整的整体。Windows 下也有自己的可执行文件格式,这个格式叫作 Portable Executable(PE),也就是可移植执行文件,扩展名通常是 .exe、.dll、.sys 等。
PE 文件的结构和 ELF 结构有很多相通的地方,如上图。
Linux内核映射表数据结构(Linux内核四大数据结构之一)
但是windows的软件是不可以直接在linux上安装的。虽然相对的软件几乎都在linux上有替代品。如果非要在linux上运行windows软件的话,可以通过名为wine的适配层,但这玩意儿比较复杂,也不是所有东西都可以wine。其次因为activeX是微软的私有技术,所以用到activex的地方,比如国内的大多数银行,都不可以在linux下使用。但不是所有的网银都不能用。90%在windows下创建的文件都可以在linux下打开,反之亦然。但不是全部,因为虽然我没遇见过,但据说还是有类似的个案。
Linux内核红黑树数据结构(Linux内核四大数据结构之一)
课后有同学提问,Linux内核是怎么一步一步发展到今天的。我的PPT上其实有相关的内容,但是十分粗浅,如下:
我收集了相关资料,下面给出各个Linux内核的版本号、对应的发布时间以及各版本的特点,方便大家查阅。
0.00 1991.2-4
两个进程分别显示AAABBB
0.01 1991.9
第一个正式向外公布的Linux内核版本
0.02 1991.10.5
LinusTorvalds将当时最初的0.02内核版本发布到了Minix新闻组,在这种简单的任务切换机制上进行扩展,推出了Linux的第一个稳定的工作版本。
0.10 1991.10
Linux0.10版本内核发布,0.11版本随后在1991年12月推出,当时它被发布在Internet上,供人们免费使用。
0.11 1991.12.8
基本可以正常运行的内核版本
0.12 1992.1.15
主要加入对数学协处理器的软件模拟程序
0.95 1992.3.8
开始加入虚拟文件系统思想的内核版本
0.96 1992.5.12
开始加入网络支持和虚拟文件系统
1.0 1994.3.14
Linux1.0版本内核发布,使用它的用户越来越多,而且Linux系统的核心开发队伍也建起来了。
2.0 1996.2.9
开始支持对称多处理器
2.4 2001.1.4
Linux 2.4.0版本内核发布。
2.6 2003.12.17
Linux 2.6版本内核发布,与2.4内核版本相比,它在很多方面进行了改进,如支持多处理器配置和64位计算,它还支持实现高效率线和处理的本机POSIX线程库(NPTL)。实际上,性能、安全性和驱动程序的改进是整个2.6.x内核的关键。
2.6.15 2006
Linux 2.6.15版本内核发布。它对IPv6的支持在这个内核中有了很大的改进。
2.6.30 2009.6
改善了文件系统、加入了完整性检验补丁、TOMOYOLinux安全模块、可靠的数据报套接字(datagramsocket)协议支持、对象存储设备支持、FS-Cache文件系统缓存层、nilfs文件系统、线程中断处理支持等等。
2.6.32 2009.12
增添了虚拟化内存de-duplication、重写了writeback代码、 改进了Btrfs文件系统、添加了ATIR600/R7003D和KMS支持、CFQ低传输延迟时间模式、perftimechart工具、内存控制器支持softlimits、支持S+Core架构、支持IntelMoorestown及其新的固件接口、支持运行时电源管理、以及新的驱动。
2.6.34 2010.5
添加了Ceph和LogFS两个新的文件系统,其中前者为分布式的文件系统,后者是适用于Flash设备的文件系统。Linux Kernel 2.6.34的其他特性包括新的Vhostnet、改进了Btrfs文件系统、对Kprobesjump进行了优化、新的perf功能、RCUlockdep、GeneralizedTTLSecurityMechanism(RFC5082)及privateVLANproxyarp(RFC3069)支持、asynchronous挂起恢复等等。
2.6.36 2010.10
Tilera处理器架构支持、新的文件通知接口fanotify、Intel显卡上实现KMS和KDB的整合、并行管理工作队列、Inteli3/5平台上内置显卡和CPU的智能电源管理、CIFS文件系统本地缓存、改善虚拟内存的层级结构,提升桌面操作响应速度、改善虚拟内存溢出终结器的算法、整合了AppArmor安全模型(注:与SELinux基于文件的标注不同,AppArmor是基于路径的)。
2.6.37 2011.1.4
Linux2.6.37包含了对Ext4和XFS的几个SMP可伸缩性改进,一个在禁用大内核锁的情况下编译内核的选项,对每个cgroup IO限制的支持,一个基于Ceph集群文件系统的网络设备,几个Btrfs改进,更有效的静态探测,对探测模块的性能支持和可访问列表本地和全局变量、使用LZO压缩的图像休眠、IPv4支持的PPP、一些网络微优化和许多其他小的更改、改进和新的驱动程序。
2.6.38 2011.3.14
此版本增加了对自动进程分组(在新闻中称为“wonder patch”)的支持、VFS的显著可扩展性改进、Btrfs LZO压缩和只读快照、对B.a.T.M.a.N.mesh协议(有助于在发生自然灾害、军事冲突或互联网审查时提供网络连接,)、透明的大页面支持(不使用hugetblfs)、在多个cpu上自动传播即将到来的网络流量、支持AMD Fusion apu、许多驱动程序和其他更改。
2.6.39 2011.5.18
EXT4 SMP的可伸缩性改进,初始TCP拥塞窗口的增加,一种称为Unicore-32的新架构,一种允许创建称为IPset的网络资源组的功能,Btrfs更新,一种允许将崩溃信息存储在固件中的功能,以便在重新引导后恢复它,通过handle syscalls打开,perf更新,以及许多其他的小变化和新的驱动。
3.0 2011.7.21
除了一个新的版本编号方案,Linux3.0还有几个新的特性:Btrfs数据清理和自动碎片整理,XenDOM0支持,ECHO中没有特权的ICMP,WakeonWLAN,Berkeley包过滤器JIT过滤,一个类似memcached的页面缓存系统,一个对sendmsg()调用和setns()进行批处理的sendmsg()系统调用,一个系统调用允许更好地处理轻量级虚拟化系统,如容器。增加了新的硬件支持:例如,Microsoft Kinect、AMD Llano Fusion APU、Intel iwlwifi 105和135、Intel C600串行连接scsi控制器、Ralink RT5370 USB、多个Realtek RTL81xx设备或Apple iSight网络摄像头。增加了许多其他驱动和小的改进。
3.1 2011.10.24
支持OpenRISC 开源 CPU,对写回限制的性能改进,slab分配器中的一些加速,新的iSCSI实现,支持用于移动支付的近场通信芯片,通用软件RAID层中的坏块管理,一个新的用于电源管理的“cpupowerutils”用户空间实用程序、默认情况下在ext3中启用的文件系统屏障、Wii遥控器支持和新的驱动程序以及许多小的改进。
3.2 2012.1.4
此版本包括对大于4KB和小于1MB的ext4块的支持,这将提高大文件的性能;btrfs已更新为更快的清理、关键文件系统元数据的自动备份和用于手动检查文件系统的工具;进程调度器添加了对设置CPU时间上限的支持;在大量写操作的情况下,桌面的响应能力得到了改进,TCP被更新为包括一个算法,该算法可以在丢失数据包后加快连接的恢复;分析工具“perf-top”增加了对任务和库的实时检查的支持,并可以看到带注释的程序集代码;设备映射器增加了对任务和库的支持对于存储的“精简配置”,我们增加了一个新的架构:高通公司的Hexagon DSP处理器。在这个版本中还提供了其他驱动程序以及一些小的改进和修复。
3.3 2012.3.18
这个版本最重要的特点是合并了Android项目的内核代码。但是,它还包括对新体系结构(TI C6X)的支持、大大改进的平衡和Btrfs中不同RAID配置文件之间的重排能力,以及一些网络改进:为虚拟化场景设计的虚拟交换机实现(Open vSwitch),一种比“绑定”驱动程序更快、更可扩展的替代方案,对网络设备的传输队列进行可配置的限制,以抵抗缓冲区膨胀,网络优先级控制组和每个cgroup的TCP缓冲区限制。也有许多小功能和新的驱动程序和修复程序也可用。
3.4 2012.5.20
此版本包括几个Btrfs更新:支持大于4KB的元数据块,大大提高了元数据性能,更好的错误处理和更好的恢复工具;还有一个新的X32 ABI,它允许在64位模式下运行带有32位指针的程序;对GPU驱动程序的几项更新:Nvidia GeForce 600“开普勒”的早期模式设置,AMD Radeon 7xxx和AMD Trinity APU系列的支持,以及Intel Medfield graphics的支持;还支持x86 CPU驱动程序自动robing,一个设备映射器目标,它存储块的加密散列以检查入侵,另一个目标是使用外部只读设备作为精简配置的LVM卷的源,一些性能改进,如GTK2报表GUI和新的“Yama”安全模块。也有许多小功能和新的驱动程序和修复程序也可用。
3.5 2012.7.21
此版本包括对Ext4中的元数据校验和的支持,使用诸如StaseTAP或PERP之类的工具进行性能分析的用户空间探针,沙盘机制允许过滤SysCurts,设计了一种新的网络队列管理算法,用于打击Buffer-BuLAT,支持检查点和恢复TCP连接,支持TCP早期重传(RFC 5827)、支持Android风格的机会挂起、btrfs I/O故障统计以及通过Firewire和USB的SCSI。许多小功能和新的驱动程序和修复程序也可用。
3.6 2012.9.30
这个Linux版本在Btrfs中包含了一些新特性:子卷配额、配额组和快照差异(也称为“发送/接收”)。它还包括支持同时挂起到磁盘和内存、TCP“快速打开”模式、“TCP小队列”功能以防止缓冲区膨胀;支持通过NFS/NBD进行安全交换、更好的Ext4配额支持、支持PCIe D3cold电源状态;以及VFIO,允许从客户机驱动程序安全访问裸机主机设备。许多小功能和新的驱动程序和修复程序也可用。
3.7 2012.12.10
此Linux版本包括对ARM 64位体系结构的支持,ARM支持使用同一内核引导到不同系统,签名的内核模块,Btrfs支持使用chattr和faster fsync()在每个文件的基础上禁用写时拷贝,这是一个模仿strace的新“perf trace”工具,支持服务器端的TCP快速打开功能、实验性的SMBv2协议支持、稳定的NFS4.1和并行的NFS支持、允许通过UDP传输第2层以太网数据包的新隧道协议,以及支持Intel“管理器模式访问保护”(SMAP)安全功能。许多小功能和新的驱动程序和修复程序也可用。
3.8 2013.2.18
这个Linux版本在Ext4中支持在inode中嵌入非常小的文件,这大大提高了这些文件的性能并节省了一些磁盘空间。还有一个新的Btrfs特性,允许快速替换磁盘,一个为ssd优化的新文件系统F2FS,支持文件系统挂载,UTS,IPC,PIDs,以及为没有特权的用户提供的网络堆栈名称空间,内存资源控制器中的内核内存,XFS中的日志校验和,改进的NUMA策略重新设计和取消了对386处理器的支持。许多小功能和新的驱动程序和修复程序也可用。
3.9 2013.4.28
这个Linux版本包括对实验性RAID5/6模式的支持,以及对Btrfs中快照共享的文件进行更好的碎片整理;对Android SDK使用的“金鱼”模拟器的支持,能够将固态硬盘存储作为缓存设备;两个新的架构端口:Synopsys ARC 700和Meta Imagination处理器;ARM中的KVM虚拟化支持体系结构,一个Intel驱动程序,它“注入”空闲状态以提高每瓦特的性能,支持Chrome OS笔记本电脑,一个新的挂起电源状态,并删除过时的配置实验配置选项。许多小功能和新的驱动程序和修复程序也可用。
3.10 2013.6.30
此版本增加了对bcache的支持,它允许使用SSD设备缓存来自其他块设备的数据;Btrfs格式的改进,使专用于存储数据块信息的树小30-35%;支持XFS元数据校验和自描述元数据、无时钟多任务、SysV IPC,rwlock和mutex可伸缩性改进,减少短事务尾部延迟的TCP尾部丢失探测算法,MIPS体系结构中的KVM虚拟化支持,混合不同类型cpu的ARM big.LITTLE体系结构,跟踪快照,新驱动程序和许多小改进。
3.11 2013.9.2
此版本增加了对一个新的O_TMPFILE open(2)标志的支持,该标志允许轻松创建安全的临时文件,自r600以来所有Radeon GPU的实验性动态电源管理,对NFS4.2和标记为NFS的SELinux的初步支持,对Lustre分布式文件系统的实验性支持,对程序写入的页的详细跟踪,ARM对ARM64的巨大页面支持和KVM/Xen支持,SYSV IPC消息队列可伸缩性改进,低延迟网络轮询机制,压缩交换缓存,新驱动程序和许多小改进。
3.12 2013.11.2
此版本增加了对Btrfs中离线重复数据消除的支持,双GPU笔记本电脑中的自动GPU切换,对AMD Radeon图形的性能提升,更好的RAID-5多核性能,改进了对内存不足情况的处理,改进了VFS路径名分辨率的可扩展性,改进了无时间多任务模式,在图形DRM层中独立的模式设置和渲染设备节点,改进了虚拟化客户机的锁定性能,XFS目录递归可伸缩性改进,IPC可伸缩性改进,tty层锁定改进,新驱动程序和许多小的改进。
3.13 2014.1.19
此版本包括nftables,iptables的后续产品,为高性能固态硬盘设计的块层的改进,英特尔RAPL设备功耗上限框架,改进的squashfs性能,默认启用的AMD Radeon电源管理和自动Radeon GPU交换,改进的NUMA性能,改进的性能与庞大的网页工作负载,TCP快速开放默认启用,支持NFC支付,支持高可用性无缝冗余协议,新的驱动程序和许多其他小的改进。
3.14 2014.5.30
此版本包括实时任务的截止时间任务调度策略、内存压缩机制现在被认为是稳定的、锁定验证器到用户空间的端口、存储属性(如Btrfs中每个inode的压缩)的能力、对跟踪事件的触发器支持、对用户空间探测的改进,内核地址空间随机化,TCP自动合并某些类型的连接,一个新的网络包调度程序来对抗缓冲区膨胀,新的驱动程序和许多其他小的改进。
3.15 2014.6.8
这个版本在有硬盘的系统中恢复得更快,它增加了对原子交叉重命名两个文件的支持,它增加了新的fallocate(2)模式,允许删除一个文件的范围或将其设置为零,它增加了一个新的文件锁定API,内存管理更好地适应工作集大小的变化,它提高了FUSE写性能,它还增加了支持zram中的LZ4算法,允许从32位EFI固件加载64位内核,增加了对即将加入英特尔CPU的AVX-512矢量指令的支持,增加了新的驱动程序和许多其他小改进。
3.16 2014.8.3
此版本通过支持动态切换Nvidia卡上的时钟频率来提高性能,它还支持将用户空间内存映射到Intel设备上的GPU,XFS有一个免费的inode btree用于更快的inode分配,ARM64内核可以用作EFI存根,IPv6支持TCP Fast Open,一些radeon设备有更好的性能得益于改进的电源管理支持,支持Intel Cherryview图形,控制组获得了可选的统一层次结构模式,还添加了新的驱动程序和许多其他小的改进。
3.17 2014.10.5
此版本增加了对IP上USB设备共享的支持,对Xbox One控制器的支持,对Apple的thunderbolt的支持,一个新的sealing API,它限制了对共享内存文件描述符的操作,使开发人员可以更容易地进行共享内存编程,支持perf trace中的页面故障跟踪,在kexec中只支持使用有符号的内核、getrandom()系统调用以生成更安全的随机数以及图形“渲染节点”不再是实验性的。也有新的驱动和许多其他小的改进。
3.18 2014.12.7
此版本增加了对overlayfs的支持,它允许在单个装载点组合两个文件系统;支持将用户空间内存映射到Radeon设备上的GPU,一个bpf()系统调用,它允许上载可附加到事件的类似bpf的程序;一个为数据中心优化的TCP拥塞算法;Geneve虚拟化封装,支持在UDP上嵌入IP协议,通过批处理套接字缓冲区提高网络性能,以及可选的多队列SCSI支持。也有新的驱动和许多其他小的改进。
3.19 2015.2.8
此版本增加了对Btrfs清理和用RAID 5和6快速替换设备的支持,对帮助阻止缓冲区溢出的Intel内存保护扩展的支持,对AMD HSA体系结构的支持,对调试ARM Coresight子系统的支持,对Altera Nios II CPU体系结构的支持,用于路由和交换卸载的网络基础设施、有助于支持Beaglebone或Raspberry Pi等消费者开发板上的扩展总线的设备树覆盖、NFSv4.2中对穿孔和预分配的支持,以及Android活页夹已从暂存区移到稳定区。也有新的驱动和许多其他小的改进。
4.0 2015.4.12
此版本增加了对内核代码进行实况补丁的支持,主要目的是在不重启的情况下修复安全更新;DAX,当文件系统在具有持久内存存储的系统上运行时,避免使用内核缓存的方法;KASAN,一种动态内存错误检测器,允许在空闲和越界bug之后找到使用;lazytime,relatime的一种替代方法,它只会在缓存中进行访问、修改和更改时间更新,并有机会写入磁盘;允许overlayfs具有多个较低层,支持并行NFS服务器体系结构;以及dm-crypt CPU可伸缩性的改进。也有新的驱动和许多其他小的改进。
4.1 2015.6.21
此版本增加了对Ext4加密的支持,对管理群集raid阵列的实验性支持,一个记录所有对设备的写入并允许重放它们的新设备映射器目标,一个在块设备中打开持久性内存系统中的内存的驱动程序,对禁用多用户支持的支持,支持基于路径标签而不是长网络地址路由数据包的多协议标签交换,允许将BPF程序附加到kprobes以进行更好的探测,ACPI支持ARM64体系结构,以及允许改进软件rasterizer的虚拟GEM驱动程序。也有新的驱动和许多其他小的改进。
4.2 2015.8.30
此版本为现代AMD Radeon硬件添加了一个新的amdgpu驱动程序,一个使用客户机内部主机GPU功能的virtio GPU驱动程序,新的原子模式设置图形API已声明稳定,支持堆叠安全模块,更快和更可扩展的自旋锁实现,cgroup写回支持,以及重新引入H8/300架构。也有新的驱动程序和许多其他小的改进。
4.3 2015.11.1
此版本删除ext3文件系统,并保留Ext4作为主Ext文件系统,Ext4还可以挂载ext3文件系统;它还添加了userfaultfd(),一个用于处理用户空间中的页面错误的系统调用;membarrier(),一个用于在一组线程上发出内存屏障的系统调用;一个用于限制cgroup中的PID数量的PID控制器,更易于使用的“环境”功能;空闲页跟踪,更精确地跟踪应用程序使用的内存;支持IPv6标识符定位器寻址;网络轻量级通道、虚拟路由和转发精简版支持,以及许多其他改进和新驱动程序。
4.4 2016.1.10
此版本增加了对虚拟GPU驱动程序中3D支持的支持,该驱动程序允许虚拟化客户机中的3D硬件加速图形;对直接I/O和异步I/O的循环设备支持,该支持节省内存并提高性能;对开放通道ssd的支持,该设备共享Flash转换层的职责在操作系统中,TCP侦听器处理是完全无锁的,允许更快和更可扩展的TCP服务器;MD层中的日志RAID5修复了RAID写入漏洞;eBPF程序现在可以由没有特权的用户运行,它们可以被持久化,perf还增加了对eBPF程序的支持;一个新的mlock2()系统调用,允许用户请求在页面错误时锁定内存;并阻止轮询支持,以提高高端存储设备的性能。也有新的驱动和许多其他小的改进。
4.5 2016.3.13
此版本添加了一个新的copyfilerange(2)系统调用,允许在不通过用户空间传输数据的情况下复制文件;现代Radeon GPU的实验性Powerplay电源管理;Btrfs可用空间处理的可扩展性改进;支持GCC的未定义行为Sanitizer(-fsanitize=Undefined);设备映射器的verity目标中的转发错误更正支持;在madvise()中支持MADVFREE标志;新的cgroup统一层次结构被认为是稳定的;SOREUSEPORT UDP套接字的可伸缩性改进;epoll的可伸缩性改进,以及内存控制器中套接字的更好的内存计算。也有新的驱动和许多其他小的改进。
4.6 2016.5.15
此版本增加了对USB 3.1 SuperSpeedPlus(10 Gbps)的支持、新的分布式文件系统OrangeFS、更可靠的内存不足处理、对Intel内存保护密钥的支持、使应用层协议实现更简单和更快的功能、对802.1AE MAC级加密(MACsec)的支持、对V版的支持BATMAN协议的一个OCFS2在线inode检查器,支持cgroup名称空间,支持pNFS SCSI布局,以及许多其他改进和新的驱动程序。
4.7 2016.7.24
此版本增加了对最近RADON RX 480 GPU的支持,支持同一目录中的并行路径名查找,一个新的实验“SeeDuuls’频率调速器,它应该比现有的管理者更快和更精确,支持EFI 'Capsule’升级固件的机制,支持USB/IP中的虚拟USB设备,使模拟的手机像真正的USB设备一样工作;新的安全模块“LoadPin”,确保所有内核模块都从同一个文件系统加载;在ftrace接口中创建事件直方图的接口;支持将BPF程序附加到内核跟踪点;支持调用链perf trace实用程序中的事件,对Android的sync_文件围栏机制的稳定支持,以及许多其他改进和新的驱动程序。
4.8 2016.10.2
此版本增加了对在页面缓存中使用透明的大页面的支持,对eXpress Data Path的支持,这是一个高性能、可编程的网络数据路径;对XFS反向映射的支持,它是几个即将推出的功能的构建块;使用强化的usercopy对内存副本进行更严格的检查;支持IPv6安全标签(CALIPSO,RFC 5570);GCC插件支持;virtio vsocks,以方便客户/主机通信;新的Vegas TCP拥塞控制算法;文档已移动到reStructuredText格式,以及许多其他改进和新驱动程序。
4.9 2016.12.11
这个版本增加了对共享扩展数据块(cp——reflink支持)和XFS上的写时拷贝支持;虚拟映射的内核栈使内核更加可靠和安全;一个更高效的BPF分析器,使Linux部分地支持Dtrace;基于带宽测量而非数据包丢失的新的可选BBR-TCP拥塞控制算法;使用保护密钥硬件功能的系统调用;对Ara项目中的Greybus总线的支持;用于检测固件引起的延迟的硬件延迟跟踪程序,以及许多其他改进和新的驱动程序。
4.10 2017.2.19
此版本增加了对虚拟化GPU的支持,一个用于NUMA系统中缓存行冲突分析的新“perf c2c”工具,一个用于任务调度详细历史记录的新“perf sched timehist”命令,改进的写回管理应该使系统在重写负载下更具响应性,一个新的混合块轮询方法使用更少CPU比纯轮询,支持ARM设备,如Nexus5&6或Allwinner A64,允许将eBPF程序附加到cGroup的功能,一个实验性的MD RAID5写回缓存,支持Intel缓存分配技术,以及许多其他改进和新驱动程序。
4.11 2017.4.30
此版本增加了对多队列块层中可插入IO调度程序框架的支持,在关闭write hole的MD RAID5实现中的日志支持,对在SSD中放置的交换进行更可扩展的交换实现,一个新的STATx()系统调用,解决了stat()的缺陷,作为ftrace接口前端的新perf ftrace工具,对实现OPAL存储规范的驱动器的支持,对RFC7609中定义的共享内存通信RDMA协议的支持,所有VGA控制台的持久滚动缓冲区,以及许多新的驱动程序和其他改进。
4.12 2017.7.2
此版本包括一个新的BFQ I/O调度程序,它提供了更好的交互体验;它还包括对Radeon RX Vega图形卡的初步支持和对USB Type-C连接器的支持;对实时内核修补功能的改进,对允许关闭RAID5 write hole的Intel IMSM部分奇偶校验日志的支持;支持将OpenChannel ssd公开为设备块,并支持另一个I/O调度程序Kybe,它允许为读写配置延迟目标。
4.13 2017.9.3
这个版本增加了Ext4对大量目录项的支持,Ext4对64k以下扩展属性的支持,异步I/O的改进,后台写入的错误处理的改进,块层的错误处理的改进,内核TLS加速,以及许多其他改进。
4.14 2017.11.12
此版本包括支持x86硬件中更大的内存限制(128PiB虚拟地址空间,4PiB物理地址空间);支持AMD安全内存加密;提供更好内核跟踪和更小内核大小的新放卷机;一种cgroup“线程模式”,允许在一组进程的线程之间分配资源;对zstd压缩算法的支持已添加到Btrfs和Squashfs中;支持从用户内存到套接字的数据零拷贝;更好的异步缓冲I/O支持;支持未来GPU所需的异构内存管理;在某些情况下更好的cpufreq行为;使用PCID CPU特性的更长生命周期的TLB条目;异步非阻塞缓冲读取;以及许多新的驱动程序和其他改进。
4.15 2018.1.28
除了处理Meltdown/Spectre的最新代码外,此版本还包括amdgpu驱动程序的模式设置和高级显示功能;改进了对具有SATA积极链路电源管理的系统的电源管理支持;开放RISC-V cpu的端口;对AMD cpu中虚拟内存加密的初始支持;对Intel的支持用户模式指令预防功能;cgroups v2中对CPU控制器的支持;允许直接写入由文件系统管理的持久内存的新mmap(2)标志;以及许多新的驱动程序和其他改进。
4.16 2018.4.1
除了处理CPU安全漏洞的最新代码外,此版本还宣布反向映射和reflink功能稳定,membarrier(2)添加了快速支持,SMB3 Direct(RDMA)支持,添加了x86 jailhouse hypervisor,它能够静态地将多核系统划分为多个所谓的单元,支持PowerPC内存保护密钥、AMD安全加密虚拟化的管理程序部分,以及许多新的驱动程序和其他改进。
4.17 2018.6.3
此版本增加了对AMD Radeon Vega 12的支持,并在支持的AMD Radeon GPU中默认启用“显示代码”;还添加了内核TLS接收路径;更有效的空闲循环,防止CPU在shallow idle states下花费太多时间;删除了八个未维护的体系结构,另一个,添加了Andes NDS32体系结构;XFS获得了lazytime支持;修改了CPU负载估计;支持Intel Cannonlake gpu并添加了内核内存一致性模型;以及许多新的驱动程序和其他改进。
4.18 2018.8.12
此版本包括新的“可重新启动序列”系统调用,它使编写可扩展的用户空间代码变得更容易;对未授权的装载的支持;旨在使用BPF提供netfilter功能的bpfilter项目的开始;零拷贝TCP接收API;对高性能网络的新AF-XDP地址系列的支持;对高通Snapdragon 845 SoC的支持;以及许多新驱动程序和其他改进的支持。
4.19 2018.10.22
此版本还增加了:CAKE network queue management用于对抗bufferbloat,其设计初衷是为了从最慢的ISP链路和路由器中挤出最大的带宽和延迟;支持保证cGroup的最小I/O延迟目标;对未来Wi-Fi 6(802.11ax-drafts)的实验性支持;overlayfs用户的内存使用得到了改进;一个实验性的、为只读使用而优化的EROFS文件系统;一个新的异步I/O轮询接口;支持避免对攻击者控制的FIFO或世界上可写的粘性目录中的常规文件的无意写入;支持一个Intel特性,它将部分CPU缓存锁定为一个应用程序;以及许多新的驱动程序和其他改进。
4.20 2018.12.23
此版本包括对测量系统负载的新方法的支持;它增加了对未来AMD Radeon Picasso和Raven2的支持,并启用了对Radeon Vega20的非实验性支持;它增加了对C-SKY CPU体系结构和x86 Hygon Dhyana CPU的支持;TLB微优化在某些工作负载中带来了小的性能优势;TCP已经切换到“提前离开时间”模式;一种将memfd区域转换为dma buf的机制允许qemu改进虚拟化图形性能;它还包括针对CPU安全漏洞的最新一轮修复;它还添加了许多新的驱动程序和其他改进。
5.0 2019.3.3
此版本包括对energy-aware调度的支持,该调度将任务唤醒到phone中更节能的CPU;它还包括对低功耗设备的adiantum文件系统加密;它增加了对amdgpu驱动程序中AMD Freesync(可变刷新率)的支持;它增加了对UDP中接收卸载和MSG_ZEROCOPY支持的支持;它增加了对ARM指针认证的支持;它增加了对cgroupv2中的cpuset资源控制器(它可以约束任务的CPU和内存节点位置)的支持;它增加了对binderfs的命名空间支持,它允许运行多个android实例;它增加了对btrfs中交换文件的支持;它还增加了许多新的驱动因素和其他改进。
5.1 2019.5.5
此版本包括用于异步I/O的高性能接口io_uring;它还增加了fanotify的改进,以提供在大型文件系统上监视更改的可伸缩方式;它增加了一种方法,允许在PID重用的情况下安全地传递信号;持久内存现在可以用作热插拔RAM;Zstd压缩级别可以在Btrfs中配置;它还添加了一个新的cpuidle调控器,比菜单调控器做出更好的电源管理决策;所有32位体系结构都添加了处理y2038问题所需的系统调用;现在可以在没有initramfs的情况下引导到设备映射器设备;而实时补丁增加了对创建累积补丁的支持。一如既往,还有许多其他新的驱动因素和改进。
5.2 2019.7.7
此版本包括Sound Open Firmware,这是一个将开源固件引入到DSP音频设备的项目;还包括许多英特尔产品的开放固件。此版本还改进了Pressure Stall Information资源监控,使其可供Android使用;通过新的系统调用重新设计了mount API;BFQ I/O调度程序获得了一些性能改进;新的CLONEPIDFD标志允许CLONE(2)返回PIDFDsend_signal(2)可用的pidfs;Ext4已经获得了对不区分大小写的名称查找的支持;还有一个新的设备映射器目标,它模拟有失败扇区和/或读取失败的设备;已经添加了ARM Mali t4xx和更新的6xx/7xx的开源驱动程序。一如既往,有最新的CPU错误(MDS)和许多其他新的驱动程序和改进。
5.3 2019.9.15
此版本包括对AMD Navi gpu的支持;对umwait x86指令的支持,该指令允许进程在短时间内等待而无需spinning loops;一种“利用率限制”机制,用于增强手机中使用的功率不对称cpu的交互性;一个新的PIDFDXOPEN(2)系统调用,完成了让用户处理PID重用问题的工作;在0.0.0.0/8范围内提供了16百万个新的IPv4地址;支持Zaxin x86 CPU;支持英特尔速度选择,以便在Xeon服务器中更容易地进行电源选择;以及支持轻量级管理程序ACRN,这是为嵌入式物联网设备构建的。一如既往,还有许多其他新的驱动和改进。
5.4 2019.11.24
此版本包括kernel lockdown mode,旨在加强UID 0和内核之间的边界;virtio fs,一个高性能virtio驱动程序,它允许一个虚拟化的客户机去装载已导出到主机上的目录;fs-verity,用于检测文件篡改,如dm-verity,但是可以在文件上工作,而不是在块设备上工作;dm-clone允许对dm目标进行实时克隆;两个新的madvise()标志用于改进Android上的应用程序内存管理,支持新的Intel/AMD gpu,支持exfat文件系统,并删除EROFS文件系统的实验状态;一个新的haltpoll cpuidle驱动程序和调控器,大大提高了虚拟化客户机在空闲循环中进行客户机端轮询的性能;blk-iocost,一个I/O cgroup控制器,试图更准确地计算I/O的成本。另外有其他新的驱动和改进。
5.10 2021.1.6
Linux 5.10.5从Linux帧缓冲控制台(FBCON)中删除加速滚动,因为它充满了Bug,而且并没有得到广泛使用。是一个长期维护支持的版本,它支持Ext4中的快速提交模式,提供更快的fsync(); 支持进程间更安全的io_uring共享环;为其他进程提供 madvise(2) 提示的新系统调用,代码补丁以允许使用直接调用而不是间接调用以提高 repotline 性能,支持 AMD 虚拟化客户机中的寄存器加密; 更快更精简的 virtio-fs 性能; 支持 ARM 内存标记扩展,可防止许多安全问题; 和代码修补以允许使用直接调用而不是间接调用。 与往常一样,还有许多其他新驱动程序和改进。Ext4文件系统优化方面:许多应用程序使用 fsync(2) 来确保数据已完成磁盘的存储。 此类操作尝试将比预期多一些的元数据同步到磁盘。 在这个版本中,Ext4 将使用一种新颖的日志技术,日志中只包含最少所需的信息,通过这些信息,崩溃恢复操作可以恢复通过 fsync 操作修改的元数据。 这加快了 fsync() 和元数据繁重的操作。 此功能需要在 mkfs 时启用。也就是想要使用该功能,大伙需要重新格式化磁盘,所以想要体验新功能的朋友们记得备份好数据。io_uring修订方面:5.1内核引入io_uring以来,其关注度和使用率可谓不容小阙,个版本的更新优化也是可谓积极。该版本同样做了一波动作:支持对io_uring的使用限制,实现环的安全共享;此版本 API 稍作了修改,这些修改添加了一些限制,并使宿主应用可以授予对其某些文件描述符的访问权限,并允许不受信任的应用程序或访客安全地使用 io_uring。其他进程的Memory Hints方面:Linux 中的进程可以使用 madvise() 系统调用来通知内核,告知他们的行为以获得更好的性能。 但是,在某些平台(例如 Android)中,做出提示决定所需要的信息对该过程来说是未知的。相反,集中式用户空间守护进程(例如 ActivityManagerService)是感知的,并且该守护进程必须能够在没有任何应用程序参与的情况下自行启动内存回收。 为了解决这个问题,这个补丁引入了新的系统调用 - process_madvise(2)。 基本上,它与 madvise(2) 系统调用相同,除了它需要目标进程的 pidfd,而且现在它支持一组更有限的possible memory hints。virtio-fs性能优化方面:virtio-fs 是在 Linux 5.4 中引入的,作为以高性能、API 兼容的方式与访客VM 共享部分主机文件系统的解决方案。在这个版本中,virtio-fs 添加了对 DAX 的支持,它允许绕过访客页面缓存并允许直接在访客地址空间映射主机页面缓存。 在许多情况下,这可以大大加快速度。 此外,这可以节省大量内存,因为文件数据不必在访客中复制,并且可以从主机页面缓存直接访问。可兼虚拟机的共享文件夹体验将得到一波改善。AMD 支持对虚拟访客中的注册进行加密方面:Linux 从 Linux 4.15 开始支持 SEV。 SEV 是 AMD 的一项功能,它对虚拟化访客的内存进行加密,以便主机无法在未加密的情况下访问它。 此版本还通过加密访客寄存器状态来增强它,通过在world switches上对寄存器进行加密/解密,使管理程序无法访问寄存器。 因此,它为 Linux 客户机增加了额外的保护,以防止渗漏、控制流和回滚攻击。 使用 SEV-ES,访客可以完全控制管理程序可以访问的寄存器。post-Spectre性能优化方面:5.10内核通过静态调用来优化post-Spectre性能,静态调用是全局函数指针的替代品,使用代码补丁来允许使用直接调用而不是间接调用,提供了函数指针的灵活性,但具有性能的一定幅度提高。有了post-Spectre可以摆脱retpolines的压榨,retpolines对性能的影响是真的不小。新的 API 用于 x86 perf 代码,函数指针的重度用户,其中静态调用将 PMU 处理程序的速度提高了 4.2%。支持ARM Memory Tagging Extension方面:Memory Tagging Extension(ARMv8.5 扩展的一部分,在Intel服务器定级的处理器都会有内存RAS特性,也会支持Memory Tagging)提供了一种机制来检测可能容易被利用的内存相关错误的来源,包括边界违规、释放后使用、返回后使用、使用结束 of-scope 并在初始化错误之前使用。常规更新方面:新增nosymfollow挂载选项,禁用指定挂载中的符号链接解析;支持非阻塞 pidfds。 暂不支持将非阻塞 pidfd 传递给 waitid();Casefolding/Encryption引入的预更新;io_uring优化更新;为用户内存访问添加故障注入;lockdep:支持递归读锁的死锁检测;kcsan:添加了对启用复合读写检测的支持;printk:用完全无锁的ringbuffer 替换实现;RCU、rseq/membarrier、seqlock、rcutorture、lockdep的其它小修小补;任务调度器:提高 cfs 任务之间的公平性;tools/bootconfig目录,添加引导时跟踪脚本;builddeb:优化debian包打包;ubsan:为 Clang 引入 CONFIG_UBSAN_LOCAL_BOUNDS配置;为 OLED 显示添加6x8字体;添加 backtrace_idle 参数以强制对空闲 CPU 进行回溯kunit:允许在 JSON 中生成测试结果。文件系统方面:BTRFS fsync 和rename/link 性能优化、将 Direct IO 实现切换到 iomap 基础架构将数据预留转换为元数据使用的ticketing infrastructure;计划从custom tree locks切换到标准的wsem,做了些预修订;sysfs: export 支持发送stream version;XFS 将 inode btree 计数存储在 AGI 中以加快每个 AG 块预留操作的特定挂载时间并添加更多元数据冗余;加打时间戳宽度可以解决2038的问题;弃用 V4 格式;删除不推荐使用的 sysctl 和挂载选项;其它 F2FS、EXT4、NFS、OVERLAYFS、QUOTA 、CEPH、ZONEFS有小修订。
5.15 2021.11
Linux 5.15 版本增加对英特尔 DG2 独显的初步支持,并采用新 NTFS 文件系统驱动,还为 AMD Zen 3 APU 带来温度监控支持。
处理器方面:AMD PDTDMA 驱动在开发了两年后被合并,用于 AMD EPYC 服务器处理器。为 RISC-V 扩展了堆栈随机化,并为 RISC-V 连接了其他功能。在 TCC 驱动中支持了 Alder Lake。一个重要的 AMD 笔记本电脑暂停/恢复修复,包含各种型号。KVM 现在默认为新的 x86 TDP MMU,并增加了 AMD SVM 5 级分页。AMD Zen 3 APU 温度监控支持。Yellow Carp APU 温度监控支持。合并了 AMD SB-RMI 驱动,以利于服务器的使用情况,如基于 Linux 的 OpenBMC 软件栈。优化了 AMD CPU 的 C3 入口处理。一些 IRQ 内核代码的改进,使 Intel 486 时代的硬件受益。一个 AVX2 优化的 SM4 密码实现。图形方面:许多新的 RDNA2 PCI ID,可能用于 RDNA2 显卡更新。AMD Cyan Skillfish 显卡支持。对英特尔 XeHP 和 DG2/Alchemist 独立显卡的初步支持。移除英特尔 Gen10 / Cannon Lake 图形显卡支持。在 DRM/KMS 驱动中还有许多其他图形改进。存储/文件系统方面:合并了新的 NTFS 驱动,这是对现有 NTFS 驱动的一大改进。这个新驱动程序是由 Paragon 软件公司创建的 "NTFS3" 驱动程序。三星的 KSMBD 被合并为内核内 SMB3 文件服务器。OverlayFS 具有更好的性能,并复制了更多的属性。FUSE 现在允许挂载一个活动设备。对 F2FS 进行了性能优化。通过 NFS 客户端代码在多个 NIC 上共享连接。针对 EXT4 的新优化。对 XFS 的大量改进。对 Btrfs 的降级 RAID 模式支持和性能改进。Btrfs 支持 IDMAPPED 挂载和 Btrfs FS-VERITY 支持。Linux 5.15 I/O 可以达到每核~3.5M IOPS。应 systemd 开发者要求,支持全局县/磁盘事件的序列号。删除了 LightNVM 子系统。修复了 Linux 的软盘驱动代码。其他块子系统的改动。
6.0 2022.10.3
Linux 6.0 正式版作为主要的内核系列,它带来了新的功能,改进了硬件支持,以及错误 Bug 和安全修复。
支持 NVMe 带内认证,支持 OpenRISC 和 LoongArch 架构的 PCI 总线,使用 XFS 和 io_uring 时的异步缓冲写入,以及 io_uring 零拷贝网络传输支持。Linux 内核 6.0 还带来了对 RISC-V 硬件架构的“Zicbom”扩展的支持,用于管理具有非缓存一致性 DMA 的设备,还有新的运行时验证子系统,允许内核状态监控,支持生成新的 CXL 内存区域,支持在 OverlayFS 文件系统上正确实现 POSIX 访问控制列表,以及实现第二代 Btrfs“发送”协议,支持发送大型数据和原始压缩扩展。其他值得注意的变化包括 DAMON 机制中新的用户空间内存管理功能,支持将 NFSv4 服务器限制在 1GB 内存的 1024 活跃客户端,支持 EXT4 文件系统获取和设置存储在文件系统超级块中的 UUID,支持 fsnotify 子系统以更好地控制被忽略的事件,支持连接到 uprobes 的可睡眠 BPF 程序,以及对 perf 工具的锁争夺追踪点和内核内聚合 BPF 的新报告。在虚拟化方面也有好消息,Linux 内核 6.0 引入了新的伪设备,叫做“guest vCPU stall detector”,可以作为“看门狗”,告诉主机虚拟机是否停滞。在 Linux 6.0 中还有新的 debugfs 接口,新的 BPF 迭代器,一组新的 BPF kfuncs,用于生成和检查 SYN cookies 的新 BPF 助手,以及新的基于 io_uring 的用户空间块驱动器。当然,Linux 6.0 还包括许多更新和新的驱动程序,以便更好地支持硬件。除此之外,它还增加了许多错误 Bug 修复和调整,以提供比以前的内核更好的性能,这里最值得注意的是对大型系统上的任务安排的调整,对内核内 TLS 实现的性能改进,以及新的 IORING_RECV_MULTISHOT flag,以使 recv () 调用能够进行多镜头操作。安全方面,Linux 内核 6.0 实现了从 bootloader 的设置数据中获取随机数 seeds 到 x86 和 m68k 内核,支持 SafeSetID 安全模块来控制 setgroups () 的变化,支持 ARIA 加密算法,以及支持钩子连接到控制组或单一目标进程到 BPF 安全模块。其他硬件等特性支持如下: 像 A750 和 A770 这样的英特尔 Arc 独立 GPU 可以在 Linux 6.0 内核的 i915 DRM 内核驱动上运行,但目前仍然是实验性的,所以需要“force_probe”选项来启用。但至少在 Linux 6.0 中,现在可以使用这些新的英特尔桌面独显与更新的 Mesa 堆栈配对。 更多的 AMD RDNA3 的启用,希望能够与即将推出的 Radeon RX 7000 系列显卡一起工作。 高通骁龙 8xc Gen 3 支持和对联想 ThinkPad X13s Arm 笔记本电脑早期支持。这项工作在主线上仍处于早期形式,但至少已经可以使用,并开辟了 Arm Linux 笔记本电脑选项。 各种调度器的变化,包括一些针对 AMD Zen 的 NUMA 平衡增强,以及 AMD CPU 现在倾向于 MWAIT 而不是 HALT。英特尔 Raptor Lake 的各种补充,如 TCC 冷却驱动、RAPL 驱动中的 Raptor Lake P、Raptor Lake USB4 / Thunderbolt,以及其他缺失的 Raptor Lake ID。还有一些初步的 Meteor Lake 支持,比如音频代码和其他地方。对 AMD Ryzen 7000“Raphael”平台的音频驱动支持。支持 IO_uring 用户空间块驱动,各种 IO_uring 优化,以及其他有希望的 I / O 相关工作,如 Btrfs Send Protocol v2。对英特尔 Habana Labs Gaudi 2 的初步支持。H.265 / HEVC media user-space API 现在已经宣布稳定。安全关键系统的运行时间验证。
6.1 2022.12
Linus Torvalds 发布了最新的 Linux 6.1 内核稳定版,从此开启了 Linux 6.2 合并窗口。据介绍,Linux 6.1 内核系列集成了改进的页面回收代码的多代 LRU (MGLRU) 、初始的 Rust 语言支持(仍在构建中)、新的 AMD 平台管理框架、各种开源图形驱动程序改进、Btrfs 性能优化、Kernel Memory Sanitizer、Maple Tree 数据结构的引入以及许多其他硬件驱动程序工作。
Linux 6.1 的一个主要升级在于对 Rust 的主线 (实验性) 支持。Rust 是一种“多范式、通用编程语言”,在开源领域呈现出滚雪球般的势头不断壮大。此外,Linux 内核 6.1 的另一个新增功能是 Multi-Generational Least-Recently-Used 功能(MG-LRU),不过它默认情况下不会启用。据介绍,它可以优化页面回收机制,并在重内存负载情况下提高性能。Linux 6.1 还包含了对 Btrfs 文件系统性能的一系列性能改进,例如额外的 io_uring 集成,调整 sysfs 导出;以及“FIEMAP 速度显著提高”。其他方面,新版本还支持 erofs 文件系统的跨文件系统共享数据,对 EXT4 文件系统进行了一系列的修复、清理和调整。值得一提的是,PinePhone Pro 现在也已经可以运行 Linux 6.1 内核,就像索尼 Xperia 1 IV、三星 Galaxy E5, E7 和 Grand Max 等旧手机。此外,Linux 6.1 现在还提供了一个用于 PinePhone 键盘的输入驱动程序。新版本还完善了任天堂 HID 驱动,以至于“廉价手柄都可以与之兼容”,罗技驱动程序现在支持所有蓝牙设备 HID++,而且还可以自动检测高分辨率滚动能力。Linux 6.1 还将提供一系列新的音频硬件支持,包括对 Apple Silicon 的初步支持,对 AMD Rembrandt 开放固件 (SOF) 的支持,以及对联发科 MT8186 SoC 的支持,预计将会在新的 ChromeBook 中有所应用。新版本还为一些设备带来了来自 XPad 内核输入驱动程序的支持,包括初代 Elite 和 Elite 系列 2 上的 Xbox One Elite 手柄,还有 Hori Fighting Commander ONE 手柄 (包括 Xbox 模式)、8BitDo Pro 2 有线手柄,以及一系列 Wooting 键盘,包括 Wooting ONE、Two, Two HE 和 60HE。除此之外,6.1 版本还包括了下一代 CPU 和 GPU 的基础支持,包括未来 Ryzen 平台管理框架的新驱动程序代码,以及英特尔“Meteor Lake”芯片的管道(plumbing); 并继续努力适配 Intel Arc Graphics DG2 / Alchemist。其他变化主要有:内核地址消毒剂 (KMSAN) 已合并;支持更多龙芯 LoongArch 架构 CPU;内核可以在 EFI 系统上以与体系结构无关的方式解压缩 + 启动;通过 EDAC 驱动程序更快地实现英特尔内存错误解码;枫树数据结构支持;对创建用户命名空间的能力进行新的安全控制;内核会打印出发生分割错误的 CPU 内核。总体而言,Linux 内核 6.1 提供了一系列新功能和改进,同时还增强了基于 Linux 的系统的性能和安全性。这些改进将使得 Linux 成为更完善、更灵活的操作系统,能够满足更多用户的需求。
6.2 2023.2
包括许多由 Intel、AMD、Google 和 Red Hat 等公司贡献的特性。附带了一个名为 RV(运行时验证)的新工具,可以控制运行时验证子系统的运行,一个处理计算加速设备的新框架,支持用户定义的 BPF 对象。以及一个新的 sysctl 旋钮用于控制分裂锁定检测器在 x86 上处于“警告”模式时的工作方式。最重要的是,PowerPC 架构有一个新的 qspinlock 实现,支持 ID 映射挂载和 SquashFS 文件系统的并行解压缩控制,改进的 Btrfs RAID5 和 RAID6 实现,以及启用或禁用软件实现的影子堆栈的能力启动期间在 AArch64 (ARM64) 上。在安全方面,Linux 6.2 改进了 Landlock 安全模块,使其可以控制文件截断操作,更快地缓解对 Intel CPU 的 Retbleed 推测执行攻击,并能够将次数上限设置为 10,000 允许内核在重新启动或恐慌之前发出 oops。值得注意的新增功能包括开箱即用的对 Intel Arc Graphics (DG2/Alchemist) 的稳定支持,以及使用 Nouveau 开源代码对 Nvidia GeForce RTX 30 系列“Ampere”加速图形的初始支持。Linux 6.2 内核还包括更新的驱动程序,这包括对 OneXPlayer 游戏手持设备、Habana Labs 的 Gaudi2 AI 加速器等的支持。Linux 6.2 还增加了对 Apple 键盘上的交换控制和命令键的支持,对带有按钮和摇杆的 Sony DualShock4 USB 控制器的基本支持,以及对橙皮 4G-IoT 中所见的联发科技 MT6370 I2C Sub 电源管理芯片的支持开源单板计算机。除此之外,这个新内核还包括 Call Depth Tracking,以帮助提高旧版英特尔 Skylake 时代 PC 的性能,以及各种文件系统驱动程序增强和安全改进。除了新的硬件支持之外,NTFS3 文件内核驱动程序也得到了改进,并使用新的挂载选项进行了更新。Linux 6.2 内核提供了重要的新硬件支持和功能。
作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。