Linux Kernel 5x系列主要发布记录


Linux Kernel 5.0 正式版发布了,现在主要版本的编号开始从 5 算起,这不意味着什么,也不会以任何方式影响程序,只会让 Linus 感到高兴。

此版本更新内容包括:
对能量感知调度的支持,例如将任务唤醒到手机中更节能的 CPU
引入用于低功率设备的 adiantum 文件系统加密
增加了对 AMD Freesync 的支持,FreeSync 是一种支持动态刷新率的 LCD 自适应同步技术,旨在提供低显示器延迟和平滑、几乎无间断的观看体验,它还有助于在不接收新图像时降低刷新率,从而延长电池寿命。
增加了对 UDP 中的 Receive Offload 和 MSG_ZEROCOPY 的支持
在 cgroupv2 中添加了对 cpuset 资源控制器的支持
增加了对 binderfs 命名空间的支持,它允许 android 运行多个实例
增加了对 btrfs 中交换文件的支持
增加了许多新的驱动程序
其它改进
关于AMD FreeSync
FreeSync 是一种支持动态刷新的液晶显示器自适应同步技术,旨在减少因内容帧速率不同步而导致的画面撕裂和卡顿。FreeSync 由 AMD 开发,于 2014 年推出,与 Nvidia 的专有 G-Sync 形成强有力的竞争关系。
详细的更新内容可以查看这里。
Linus Torvalds of Linux 5.0
The New Features & Improvements Of The Linux 5.0 Kernel
Linux Kernel将引入安全锁定功能
经过多年以来的无数次审查、讨论和代码重写,Linus Torvalds 通过了一项 Linux 内核新的安全功能,它被称为“锁定”(lockdown)。这项新功能将作为 LSM(Linux Security Module,Linux 安全模块)包含在即将发布的 Linux kernel 5.4 中。由于存在破坏现有系统的风险,因此该功能是可选的,并非默认开启。
这一新的锁定功能主要是为了防止 root 帐户篡改内核代码,从而在用户态进程和代码之间划清界限。启用该功能后,即便是 root 帐户也无法访问某些内核功能,从而保护操作系统免受受损的 root 帐户影响。Linus Torvalds 表示,启用锁定模块后,各种内核功能都会受到限制。其中包括对内核功能的访问限制;对 /dev/mem 的读写操作的阻止;对 CPU MSR 访问的限制;以及防止系统进入睡眠状态等等。锁定功能支持两种不同模式,可用于激活不同级别的限制。“完整性”(integrity)模式将禁止用户修改正在运行的内核功能。另一种“机密性”(confidentiality)模式则会禁止用户从内核中提取机密信息。
内核锁定功能的研究始于 2010 年代初期,由现在的 Google 工程师 Matthew Garrett 牵头。该功能背后的想法是创建一种安全机制,以防止具有特权的用户(甚至是“root”帐户)篡改内核的代码。在那个时候,即使 Linux 系统采用了安全启动机制,恶意软件仍然可以通过滥用具有特殊提升特权的驱动程序和 root 帐户等来篡改内核代码。多年以来,许多安全专家一直在要求 Linux 内核支持一种更有效的方式来限制 root 帐户,并提高内核安全性。
最初提出该功能时,Linus Torvalds 本人是最大的反对者之一,他对此提出了不少批评。结果,许多 Linux 发行版开发了自己的 Linux 内核补丁,这些补丁在主线内核之上都添加了锁定功能。直到 2018 年,支持派和反对派才逐渐达成中间立场,关于锁定功能的工作也终于在今年取得了新的进展。
新功能获得批准后,也在 Linux 和网络安全社区受到了广泛欢迎,更多详情可查看公告。
Linux Kernel 5.2 正式发布
2019年7月,本来发布计划中还有一个 RC 版本,但是自 RC 7 以来的 PR 问题都不大,所以最终 Linus 觉得没有理由再专门发 RC 8 了。根据 softpedia 的总结,新版本主要更新亮点包括:
Sound Open Firmware 声音固件,它提供对 DSP 音频设备的支持;
用于挂载文件系统的新 API;
用于 ARM Mali 设备的新开源 GPU 驱动程序;
EXT4 文件系统中支持名称不区分大小写;
BFQ I/O 调度器的性能提升;
为 cgroups v2 添加了一个 freezer 控制器以释放资源;
实现了一个新的设备映射器“dust”,用于模拟具有读取失败或扇区失败的设备;
clone(2) 添加了一个 CLONE_PIDFD flag,用于在创建进程时获取 PID,它可以被 pidfd_send_signal(2) 使用,并可以为 Android 使用带来更好的监控条件;
安全方面,此版本带来了一个新的 CPU bug 基础架构,可以保护设备免受英特尔 MDS(Microarchitectural Data Sampling,微架构数据采样)硬件漏洞的影响,同时还有一个名为“mitigations=”的新的独立于架构的启动选项,以便更容易启用或禁用缓解 CPU 缺陷。
更多详情查看此处。
Linux Kernel 5.3 正式发布
Linux Kernel 5.3 稳定版是一个主要的版本,它带来了一些新特性、数十个改进和更新的驱动程序。新版本主要亮点包括:
提供了 Radeon RX 5700 Navi 系列支持
更好的 Intel Icelake Gen 11 图形支持
Intel HDR 显示支持
Intel Speed Select 支持
支持 Zhaoxin x86 处理器
使某些 Xeon 服务器上的功率调整更加容易
v5.3 还引入了一个新的 pidfd_open(2) 系统调用,该调用帮助服务管理人员处理 PID 重用问题、支持 umWait x86 指令以提高功耗效率、支持轻量级和灵活的 ACRN 嵌入式管理程序,以及支持 0.0.0.0/8 范围内的 1600 万个新 IPv 4 地址。5.3 内核系列中也包含了许多新的和更新的驱动程序,详情见发布说明。
Linux Kernel 5.4正式发布:支持exFAT和内核锁定
Linus Torvalds 宣布了 Linux 5.4 内核系列的全面可用性。该版本是一个主要版本,其添加了许多新功能,更强的安全性和更新的驱动程序,以提供更好的硬件支持。自 2019年10月初以来一直处在开发中,并一共获得了八个候选发布里程碑版本。这一系列努力让很多新功能得以被实现,首先是对 Microsoft 的 exFAT 文件系统的最初支持,现如今终于在内核中内置了该功能,以便为用户提供连接 exFAT 格式化驱动器时的即装即用体验。
同时,Linux 内核 5.4 中引入的另一个主要更改是内核锁定功能,该功能被实现为 Linux 安全模块,以限制某些应用程序访问内核。它增加了内置在内核中的新保护层,以使其能够按其创建者的意图运行软件,从而阻止了恶意行为者。另一方面,针对 Linux 游戏玩家的福音,Linux 内核 5.4 则增加了对 AMD Radeon Navi 12 和 14 GPU,AMD Radeon Arcturus GPU 以及 AMD Dali APU 支持的支持。此外,AMD Ryzen 3000 系列 CPU 获得了温度报告支持,而 AMD EPYC 微处理器改善了负载平衡。
其他一些功能还包括有,对 Intel Tiger Lake CPU 的支持;对 Qualcomm Snapdragon 855 SoC 的支持;对 Intel Lightning Mountain SoC 的支持;在 Android 上改进的应用程序内存管理;一种新的高性能 virtio 驱动程序,用于在主机和来宾之间共享文件,称为 virtio-fs;一种新的安全功能,用于检测文件篡改,称为 fs-verity,以及 dm-clone 用于实时克隆块设备。值得一提的是,该版本目前被标记为“主线”内核分支,此举也意味着它仍被视为尚未准备好进行大规模部署的预发行版本。当第一个发行点发布时,Linux 内核 5.4 将变得“稳定”并为大规模采用做好准备,而这通常会在正式发行后的一两个星期内发生。
Linux Kernel 5.5 最终删除 SYSCTL 系统调用
Linux Kernel 5.5 最终消除了支持 sysctl 系统调用的代码,该代码已被弃用了大约十年,目前对任何体系结构的现代系统都没有影响。长期以来,Linux sysctl 系统调用都不建议被使用,也不建议将其与通过 /proc/sys 公开的 sysctl 接口一起使用,这是读取/设置内核系统属性的首选方法。 Linux Kernel 5.5 的更改并未涉及 /proc/sys 支持,而只是将要把多年以来一直未使用的 Linux 上带有 sysctl 二进制接口的系统调用删除。
Linux 内核团队在邮件中表示,据了解,应该已经没有人启用 sysctl 系统调用了,不排除仍然有人在少数 defconfigs 中启用它,不过这种情形也非常少见。如果有任何用户想要这个系统调用,他们可能需要还原补丁。其实早在 2011 年,他们就想删除代码,但因需要保持兼容性,无法完全删除。那时剩下的代码是为了与旧的 C 库兼容,但是现在构建 Linux 5.5 的任何人都不想运行超级老式的 libc。
Eric W. Biederman 写了删除了该系统调用的补丁,他提到此前 “linux-next 中有一个新的 xtensa defconfig,它使系统可以调用此循环,但代码维护者回答说并非有意启用。” 从今天的 linux-next 树开始,defconfig 不再启用系统调用。
Linux Kernel 5.6 开发者已准备好应对 2038 年问题
2020年伊始,源自fossbytes的消息,Linux Kernel 5.6 的开发者已经准备好着手解决将在下一个十年到来的 2038 年问题(又称 “Y2038” 或 “Unix Y2K” 问题),Linux 5.6 也成为第一个为 32 位系统准备运行到 2038 年之后的主线内核。
2038 年问题与千年虫问题类似,它可能会导致某些软件在 2038 年 1 月 19 日 3 时 14 分 07 秒之后无法正常工作。届时,在大部分 32 位操作系统上,依据 “time_t” 标准,时间将会“绕回”且在内部被表示为一个负数,并造成程序无法工作,因为它们无法识别 2038 年,而可能会跳回 1970 年或 1901 年。现阶段还没有针对 2038 年问题的通用解决方案。Linux 5.6 已率先做好准备,并极有可能反向移植到 5.4/5.5 稳定分支。在 Linux 开发人员 Arnd Bergmann 寄给 Linus Torvalds 的邮件中,他提到,Linux Kernel 5.6 应该作为基础,使 32 位系统能够运行到 2038 年以后。他提出的 PR 包括对 time_t 的更改,即更改存储秒数(带符号的 32 位整数)。
Bergmann 表示,“我再次遍历了 time_t 的所有用户,以确保内核处于长期可维护的状态,用安全的替代方法替换了对 time_t 的所有剩余引用。该系列的一些相关部分被引入 nfsd,xfs,alsa 和 v4l2 树中。在 linux-mm 的五个分支全部合并之后,linux-mm 中的最后一组补丁将删除当前未使用的 time_t / timeval / timespec 类型和辅助函数,以确保没有新用户被合并”。由于 2038 年问题,Unix 时间戳将在 2038 年 1 月 19 日溢出,因为它无法存储带符号的 32 位整数,并且将限制更新 32 位系统。为了避免这一问题,根据 Bergmann 的说法,用户空间应用程序需要使用现代 Linux 内核系统调用,并且需要使用 GNU C Library 2.32 和 Musl libc 1.2 针对 64 位 time_t 构建用户空间。最后他还提到,64 位计算机上出现的所有 y2038 问题也适用于 32 位计算机。
Oracle 提交内核引导过程补丁使 Linux 引导提速
2020年05月03日,Oracle 团队提交的一个补丁将有望使 Linux 内核的引导时间大大缩减,平均提速 6%,最高可以提速 49%。
> Sometimes the kernel doesn't take full advantage of system memory
> bandwidth, leading to a single CPU spending excessive time in
> initialization paths where the data scales with memory size.
>
> Multithreading naturally addresses this problem, and this series is the first step.
>
> It extends padata, a framework that handles many parallel singlethreaded
> jobs, to handle multithreaded jobs as well by adding support for
> splitting up the work evenly, specifying a minimum amount of work that's
> appropriate for one helper thread to do, load balancing between helpers,
> and coordinating them. More documentation in patches 4 and 7.
>
> The first user is deferred struct page init, a large bottleneck in
> kernel boot--actually the largest for us and likely others too. This
> path doesn't require concurrency limits, resource control, or priority
> adjustments like future users will (vfio, hugetlb fallocate, munmap)
> because it happens during boot when the system is otherwise idle and
> waiting on page init to finish.
Oracle 开发者在邮件列表中指出,该补丁扩展了 padata,使其可以处理多线程作业。padata 原本只是可以用于处理多个并行单线程作业的框架,补丁添加了 padata 在 CPU 内核之间平均分配工作来处理多线程作业的能力,它会将最小工作量分配给适合处理的协作线程,并且在这些协作线程之间进行负载均衡。该补丁会推迟 Linux 引导中的 struct page init,这是内核引导过程中的一大性能瓶颈,它并不需要并发限制、资源控制或优先级调整。在各种 x86 系统上进行测试,开发者发现该补丁将延迟的初始化速度提高 63% 至 91%,而这可以将内核引导速度提高 6% 至 49%。尤其是在具有大量 RAM 的多节点环境中,性能改进更为明显。此补丁的改进同时也使启动虚拟机的时间缩减,这对于云计算环境来说非常重要,因为需要应对不断变化的容量/需求伸缩变化的情况。
Linux 5.8 即将发布
Linux 5.8-rc2 已发布,此版本的变化少于上个版本,一个值得关注的新特性是对每个索引节点的 EXT4 DAX 支持,以更好地处理持久性内存存储器上的直接访问。这个特性本应在 rc1 提供,不过因为错过了被拉取的最后期限,所以延后到了这个版本。其他的变化包括基础架构方面的修复,以及对 GPU 驱动、文件系统、selftests 等组件的修复。Linux Kernel 5.8 的部分重要更新:
针对 AMD Radeon 显卡驱动的改进
优化 SELinux与电源管理功能
在 Apple 键盘上支持交换 Fn 和 Ctrl 键
支持 Intel Tiger Lake Thunderbolt
支持 Habana Labs Gaudi 加速器
针对 Btrfs 的部分改进
针对 EXT4 和 exFAT 文件系统的代码清理和错误修复
对引导 POWER10 处理器的初始支持
2020年08月04日,Linux Kernel 5.8 正式发布。相较上一个 RC,此版本主要更新了驱动程序,增加了对一系列 Adreno GPU 芯片(如 405、640 和 650 版本)的支持,新的 Spectre 补丁以及 exFAT 改进。Radeon 驱动在此版本中也得到了更好的支持,POWER10 芯片也得到了改进。Linux 5.8 整体上的新特性包括:
内核并发处理器 Kernel Concurrency Sanitizer (KCSAN)
事件通知机制
块设备队列管理 blk-mq 中引入内联加密
私有 procfs 挂载
ARM64 支持 Shadow Call Stack 和 Branch Target Identification
BPF iterator 机制
更多完整更新内容可以查看这里。
Linux Kernel 5.9 正式发布
2020年10月12日,Linus Trovalds 宣布 Linux Kernel 5.9 正式发布。8月15日,Linus 宣布了 Linux 5.9-rc1,到现在已经历8个候选版(rc),Linus 表示,这次发布大部分是在 rc8 发行说明中已经提及的网络修复程序,大约一半的补丁(可能还有更多提交次数)来自网络方面(包括驱动程序和其他方面)。5.9首次支持 AMD RDNA 2,并且提供了更多的新硬件支持,该版本的一些更新亮点包括:
对即将到来的 AMD Radeon RX 6000显卡的初步支持
对英特尔 Rocket Lake 显卡的初步支持
对 io_uring 子系统中异步缓冲读取操作的全面支持
IBM 在 POWER10 CPU 的初步兼容
使用 FSGSBASE 指令
32位 x86 Clang 构建支持
对 x86 架构内核的 zstd 压缩支持,以加快启动时间
GPU 支持 Rocket Lake 处理器
2020年12月24日,Linux Kernel 5.9 系列宣布生命周期终止(KOL),建议用户考虑升级到 Linux Kernel 5.10 LTS 系列,Linux Kernel 5.10 LTS 近期也更新了一些功能,包括:
EXT4 文件系统的多个文件操作延迟降低
Btrfs 文件系统的 fsync()操作性能提升
支持在 EFI 系统上的 RISC-V 体系结构
不休眠的 BPF 程序和可同时在多个 flow 上传输数据
Linux 5.10 即将发布
2020年10月,在即将发布的 Linux 5.10 或将包括针对 2038 年问题(又称 “Y2038” 或 “Unix Y2K” 问题)的进一步修复。Linux 内核邮件列表显示,Oracle 文件系统开发人员 Darrick J. Wong 已提交了有关 XFS 文件系统的代码,其中添加了一个新功能以支持时间戳,直至 2486 年。
2038 年问题与千年虫问题类似,它可能会导致某些软件在 2038 年 1 月 19 日 3 时 14 分 07 秒之后无法正常工作。届时在大部分 32 位操作系统上,依据 “time_t” 标准,时间将会“绕回”且在内部被表示为一个负数,并造成程序无法工作,因为它们无法识别 2038 年,而可能会跳回 1970 年或 1901 年。

如 Phoronix 所述,XFS 支持了两项新的 on-disk meta-data 功能,具体为:分配组中现在会记录 inode btrees 的大小。这样做是为了增加冗余检查,并允许更快的安装时间。支持直到 2486 年的时间戳。这个“大时间戳”功能是对其时间戳和 inode 编码功能进行重构,以将时间戳作为 64 位纳秒计数器进行处理,并通过移位来增加有效大小。现在,这使 XFS 可以很好地克服 2038 年的问题(在那里,以秒为单位存储自 1970 年以来的时间将不再适合有符号的 32 位整数,因此无法环绕)到现在的 2486 年。使用以下命令创建新的XFS文件系统:启用 bigtime 允许的时间戳范围是 1901 年 12 月至 2486 年 7 月,而不是 1901 年 12 月至 2038 年 1 月。为了保持向后兼容,默认情况下当前未启用 big timestamps 功能。
在2020年年初,Linux Kernel 5.6 的开发者也早就准备好着手解决将在下一个十年到来的 2038 年问题。这也是第一个为 32 位系统准备运行到 2038 年之后的主线内核(上文有所表述)。为 ARM64 上的 Linux 5.10 启用了 HAVE_MOVE_PMD,可以改善 mremap() 的性能。mremap 系统调用可用于扩展/缩小现有的内存映射。早在 2018 年,大型内存区域上的 mremap 系统调用的内存管理提速大约 20 倍,但这个功能一直没有被合并到 ARM64 Linux 内核。此外,拉取请求中还提到了更多 ARM64 更新:
提高 specter -v2 在 Falkor cpu 上的缓解性能
选择 HAVE_MOVE_PMD
确保 LLVM 和 BFD 之间的链接器标志保持一致
修复损坏的版权标题
修复 KASLR 随机化线性映射等。
SM2 国密算法被 Linux 内核社区接受
2020年10月25日,有开发者发文称SM2 国密算法被 Linux 内核社区接受了。该作者表示,SM2 的补丁已经更新到了 v7 版本,这个版本的补丁最终被社区接受,目前已经合并到了 Linux 主线的 5.10-rc1,如不出意外会在 5.10 内核版本中正式发布。
国密,是国家商用密码的简称,由国家密码管理局制定算法标准,同时也制定了大量的产品及接口规范以及应用场景。随着近年来外部环境的变化和内部互联网的快速发展,IoT 领域的崛起,以及金融领域的变革。摆脱对国外技术和产品的过度依赖,建设行业网络安全环境,增强我国行业信息系统的安全可信显得尤为必要和迫切。密码算法是保障信息安全的核心技术,尤其是最关键的银行业核心领域长期以来都是沿用 3DES、SHA-1、RSA 等国际通用的密码算法体系及相关标准。
2010 年底,国家密码管理局公布了我国自主研制的“椭圆曲线公钥密码算法”(SM2 算法)。为保障重要经济系统密码应用安全,国家密码管理局于 2011 年发布了《关于做好公钥密码算法升级工作的通知》,明确要求“自 2011 年 3 月 1 日起,在建和拟建公钥密码基础设施电子认证系统和密钥管理系统应使用国密算法。自 2011 年 7 月 1 日起,投入运行并使用公钥密码的信息系统,应使用 SM2 算法”。自 2012 年以来,国家密码管理局以《中华人民共和国密码行业标准》的方式,陆续公布了 SM2/SM3/SM4 等密码算法标准及其应用规范。其中“SM”代表“商密”,即用于商用的、不涉及国家秘密的密码技术。
目前 Linux 内核已经较好地支持了 SM3 和 SM4 算法,这得益于无线局域网标准的广泛使用。但 SM2 算法和国密证书迟迟没有得到支持,也就无法基于国密来建立全栈可信和内核中的完整性验证,因此在内核中支持这一套体系也变得迫切起来。让内核社区接受 SM2 总共经过了 7 个回合。最初考虑是从 openssl 做移植,但需要移植 openssl 架构和基础设施代码,因为工作量巨大放弃。又经过几轮探讨测试之后,发现现有的 libgcrypt 已经有了完整的椭圆曲线基础算法,于是便尝试先在 libgcrypt 中实现 SM2,最终 SM2 算法作为 ECC 的一个子算法被社区接受。再之后,SM2 逐步被内核社区接受。
目前 libgcrypt 已经全面支持了国密算法 SM2/3/4,这些实现都会在下一个版本 1.9.0 正式发布。同时,作为 IMA 完整性签名的用户态工具,ima-evm-utils 对国密的支持也没有落下。最后,作者还总结了 SM2 的已知问题:
要支持国密证书验证,SM2 要么不编译,要么必须内建编译,不支持编译成模块。当然,SM2 作为一个非对称算法,只签名一个哈希或者基于国密的 IMA 验证,并没有这个限制。
IMA 签名工具 ima-evm-utils 以及内核计算文件 SM3 哈希所用的国密算法没有加 Za,这个是与规范的一点差异。
这其中值得我们关注的主要是以下公开的算法:
SM2:基于椭圆曲线密码(ECC)的公钥密码算法标准,提供数字签名,密钥交换,公钥加密,用于替换 RSA/ECDSA/ECDH 等国际算法
SM3:消息摘要算法,哈希结果为 256 位,用于替换 MD5/SHA1/SHA256 等国际算法
SM4:对称加密算法,密钥长度和分组长度均为 128 位,主要用于无线局域网标准,用于替换 DES/AES 等算法
国密证书:这里的国密证书指的是使用国密算法(SM2-with-SM3)的标准 X509 格式证书,证书使用 SM3 作为哈希算法,使用 SM2 作为数字签名算法
国密 SSL:采用国密算法,符合国密标准的安全传输协议,即 SSL/TLS 协议的国密版本
2020年12月15日,Linus Torvalds 宣布了 Linux 5.10 正式发布,这是当下最新的主线内核更新,也是最新的 "长期支持(LTS)"版本。内核开发人员计划一直维护 Linux 5.10 到 2026年(比 Linux 5.4 LTS 还多一年)。他在公告中表示,"这里面有相当多的修复,包括一些最后时刻没有修复的东西的还原,但没有什么让我觉得'我们还需要一个星期',发布过程看起来相当顺利"。此次更新中包含了许多大大小小的变化,一些功能和变化如下:
Linux 5.10 包含了一些文件系统和存储系统的改进。升级为 Btrfs fsync() 操作提供了 "显著的性能改进",并为直接 I/O 操作切换到了新的 iomap 基础设施。
EXT4的 "fast commits"支持大大提升了写入性能,并在 DAX/DIO 模式下获得了优化的文件覆盖。
"2038年 "问题已经被解决,这在上文有所提及。现在 XFS 文件系统中的时间戳将支持至 2486 年。
新的硬件支持,包括围绕英特尔 Rocket Lake 和 Alder Lake 的早期引入,对英特尔 Gen12/Xe 图形硬件的支持工作 。
支持任天堂 Switch Joy Cons 和 Pro、Sega Saturn 控制器。
Linux 5.10 允许 MIPS 处理器引导使用 zstd 压缩的内核,并允许 RISC-V 引导具有 EFI 固件的系统。
由于 I/O 请求的批量化,Linux 5.10 还拥有更快的休眠和恢复功能(在支持的地方)。
更多详细信息可查看发行公告。
2020年12月28日,长期支持(LTS)的 Linux Kernel 5.10 版本出现了 Btrfs 性能倒退的问题,在某些情况下 Btrfs 性能会急剧下降 500% 到 2000%。提交此问题的开发者表示,作为长期使用 Btrfs 的用户,他注意到在使用 5.10 内核时,一些日常 Linux 开发任务变得非常缓慢,例如解压一个大型 .tar.zst 文件,解压时间可能会从原本的 15 秒左右变成将近 5 分钟。
Btrfs(通常念成 Butter FS)是由 Oracle 于 2007 年推出的 COW(copy-on-write 式)文件系统,目标是取代Linux ext 文件系统。Btrfs 加入了 ext3/4 未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小等。目前 Btrfs 已经取代 ext4 成为 Fedora 33 桌面版中的默认文件系统,并在 SUSE、Ubuntu 等 Linux 发行版中被广泛使用。Btrfs也宣称专注在“容错、修复及易于管理”。
据悉,Linux 内核维护人员 Josef Bacik 已经在圣诞节之前找到了导致这一问题的根源,称这个问题之所以会在测试中漏掉,是“因为最近几个星期做了很多与 Btrfs I/O 性能相关的工作”。他们可能会在近期将修复补丁推送到 Linux Kernel 5.10 中,以解决此问题。尽管已经诞生了 13 年,但作为一个相对较新的文件系统,Btrfs 的使用在社区中一直存在质疑。而这次的问题无疑再次把该文件系统推上了风口浪尖。不少用户在提出该问题的帖子下评论“使用 Btrfs 多年,我已经厌倦了它的失败,最近我重建了我的文件系统并重新用回了 ext4。”
Linux 5.10.3 作为圣诞节后的首个稳定版更新发布了。主要变化是对整个庞大的代码库中的各种小 bug 进行了修复,但暂时还没有解决 Btrfs 性能严重衰退的问题,具体变更日志可以通过内核邮件列表找到。其中有一组修复值得指出:EXT4、UBIFS 和 F2FS 等使用的 FSCRYPT 文件系统加密框架出现了一点问题。这个 bug 可能会导致在添加目录的加密密钥的同时创建一个文件,从而创建重复的文件名。为修复在加密目录中出现重复文件名的问题,新的代码补丁已经被添加到 FSCRYPT,以及 UBIFS、EXT4 和 F2FS 中。这些补丁从 11 月底开始就一直在流传,但直到现在才出现在稳定树中。
Linux 5.10.8 发布,最终解决了 Btrfs 的性能问题
Linux 内核 5.10.8 已经于2021年1月18日发布,作为 Linux LTS 5.10 系列的最新版本,此次更新解决了 Btrfs 文件系统的性能问题。然而,2020年10月份的提交 "btrfs: use btrfs_start_delalloc_roots in shrink_delalloc" 引起了一个性能问题:此前在使用正常的写回路径来回收延迟分配空间时,我们会提供想要刷新的页面数,而此提交更改为刷新大量 inode,在某些情况下这个数量还会剧烈增加。这严重影响了性能。并且由于后续的 "btrfs: fix deadlock when cloning inline extent and low on free metadata space" 提交使用到了上述更改导致无法还原。经过测试,在 5.10 中解压 Firefox 的压缩文件(360MiB xz compressed/1.5GiB uncompressed)相比于在 5.9 中,要花费5到20倍的时间。这种现象在 SSD 中更明显。
因此,在 "btrfs: shrink delalloc pages instead of full inodes" 提交中,在 btrfs_start_delalloc_roots() 函数中提供要刷新的页面数,并通过 writeback_control 结构和 sync_inode() 函数来解决刷新问题。再次进行测试(256GiB of ram, 56 cores, 2TiB Intel NVMe drive),结果很不错。可以看见效果显著。此外,此次更新还包括修复使用较旧的 glibc 时 net.o 编译失败、修复硬件 TID 泄漏、使用 VMAP 堆栈修复 RTAS 机器检查、修复恢复过程中的死锁、修复 MTU 对于 XDP 太大时的错误消息等。更多详细内容请查看更新公告。
Linux 5.10 LTS 作为最新的长期支持版本在当初推出时只计划维护到 2022 年底,但在有足够多的公司介入来改善和测试之后,Linux 5.10 LTS 现在将被维护到 2026 年底。它原本只计划维护到2022年年底,而之前的内核如 Linux 5.4 LTS 将会被维护到 2024 年,甚至更早发布的 Linux 4.19 LTS 和 4.14 LTS 也会被维护至 2024 年。相比之下,Linux 5.10 LTS 的生命周期显得就很短暂,这主要是因为此前帮助测试新的候选版本和承诺使用这个内核 LTS 系列的开发者和组织的数量有限导致的。但是现在有足够的参与者加入到 5.10 LTS 中,Greg Kroah-Hartman 确认他将和 Sasha Levin 共同维护该版本直至 2026 年 12 月。这将使 Linux 5.10 LTS 获得六年的持续维护。同时,Linux 4.4 LTS 在运行六年后将于2022年年初结束支持。这对 Debian 11、以及 Android 12 操作系统等一系列使用 Linux 5.10 内核的分支系统而言都是一个利好消息。
Linux 5.11 将支持 OpenRISC 指令集架构
2020年12月22日,OpenRISC 和 RISC-V 处理器体系结构更新都已提交给正在进行的 Linux 5.11 合并窗口。OpenRISC 是 OpenCores 组织提供的基于 GPL 协议的开放源代码的 RISC(精简指令集计算机)处理器,有人认为其性能介于 ARM7 和 ARM9之间,适合一般的嵌入式系统使用。据悉,OpenRISC 目前已经投入使用了二十年,但是仍然没有任何专用的开放源 ASIC 基于该指令集架构进行开发。如今 OpenRISC 正在得到 Linux 5.11 的支持。
OpenRISC 拉取的代码带来了 LiteX SoC 控制器驱动程序以及有关 LiteRIS for OpenRISC 的其他支持。LiteX 是用于在 FPGA 上部署 Migen/MiSoC CPU/SoC 的构建器。LiteX 已经支持 PicoRV32,VexRISCV 等的软内核实现。Linux 5.11 内核主线对 LiteX OpenRISC 的支持将围绕 mor1kx 软核处理器进行。此外,Linux 5.11 还将对另一个开源指令集架构 RISC-V 添加相关更新,包括对连续内存分配器(CMA),IRQ 时间计费,堆栈跟踪,严格的 dev/mem,内核节保护等功能的支持。更多的参考请点击如下链接。
2021年2月14日消息,下面是即将推出的 Linux 5.11 版本中找到的 11 项值得关注的变化:
英特尔 IS 图形支持这是一种最受像素类游戏欢迎的技术,英特尔 Windows 上的驱动程序已经支持了一段时间,但现在 Linux 驱动程序也终于能够启用这个功能。
英特尔异步页面翻转支持是另一种开放源代码的图形性能优化技术。
对即将推出的 AMD Green Sardine 和 Van Gogh APU 带来支持。还支持 Dimgrey Cavefish,这是尚未发布的另一款 Radeon RX 6000 系列 GPU,对比当前的 Radeon RX 6800/6900「Sienna Cichlid」硬件,性能有所提高。
通过 Schedutil 获得更好的 AMD 性能,在本周修复了频率不变性性能回归之后,不仅回归问题得到了解决,而且对于许多工作负载来说,现在的情况比在 Linux 5.10 或更早版本上要好。
适用于 NVIDIA GA100 / GeForce RTX 3000 系列的 Nouveau KMS。这只是内核模式设置/显示支持,没有3D加速。因此,至少显示器能够亮起来,以使用户可以继续访问 NVIDIA 网站以安装专有驱动程序,直到开源 Nouveau 驱动程序在更高版本的内核中完全支持 Ampere。
新的 ARM 硬件支持,包括对风靡一时的 OUYA 游戏机带来支持。
Btrfs 性能改进
通用 IWLWIFI 驱动程序中的 WiFi 6E 技术支持英特尔 WiFi 6GHz 频段,与此同时 Linux 5.11 最终降低了 Intel WiMAX 的支持。
USB4和Thunderbolt支持改进,包括支持 Intel Maple Ridge 作为该公司的第一个独立 Thunderbolt 4控制器。
对英特尔 Alder Lake 以及其他 Alder Lake 设备的声音支持,以及今年晚些时候将会亮相的英特尔平台的附加功能。
系统调用用户调度,对于使用 Steam Play(Proton / Wine)在 Linux 上玩 Wine / Windows 游戏而言非常重要。
Linux Kernel 5.12 稳定版发布
2021年4月未旬,Linux Kernel 5.12 已正式发布。Linus Torvalds 在简短的 5.12 发布公告中写道:“感谢大家在上一周的耐心等待,这让我们在发布正式版 Linux Kernel 5.12 的时候感到更加愉快”。新版本内核主要变化:
提供对 Intel Xe GPU 的可变(自适应)刷新率的支持
对 Radeon RX 6000 系列的超频支持
对 Nintendo 64 的主线支持
增加 Sony PlayStation 5 DualSense 控制器驱动程序
对 CXL 2.0 Type-3 存储设备的支持
引入 KFENCE
新增动态抢占功能
优化 Clang 链接时间
改进对笔记本电脑支持等等
完整更新内容访问邮件列表。
5.13 将移除 WiMAX 支持的相关代码
2021年3月下旬消息,在 Linux 5.11 中,Linux 内核将 WiMAX 网络支持相关的代码降级到了内核中的"暂存"区域,并计划在未来将其彻底移除。而如今,官方正式确定 WiMAX 的支持将随着 Linux 5.13 的发布而被移除。WiMAX(全球互通微波访问,Worldwide Interoperability for Microwave Access)是一项高速无线数据网络标准,主要用在城域网,由 WiMAX 论坛提出并于 2001 年 6 月成形。WiMAX 能提供多种应用服务,包括最后一英里无线宽带接入、热点、移动通信回程线路以及作为商业用途在企业间的高速连线。通过 WiMAX 一致性测试的产品都能够对彼此创建无线连接并发送互联网分组数据。在概念上类似 WiFi,WiMAX 传送速率更快、传送范围距离更大,简单理解为一种经过扩展的 WiFi。WiMAX 达到的带宽及发送距离使其具有提供下列服务应用的潜力:
通过各种设备提供跨城市和国家的便携式移动宽带连接;
为"最后一英里"宽带接入提供有线电视和数字用户线路(DSL)的无线替代方案;
提供数据、电信(VoIP)和 IPTV 服务(三网合一);
长距离的通信:无线电波发送距离长,故涵盖率较佳;
作为业务连续性计划的一部分,提供互联网连接。
彼时,IEEE 802.16/WiMAX 是一项被人看好的技术,具有广阔的前景;但如今,放眼全球范围都没有多少人在采用这项技术。就连 WiMAX 论坛自己的认证产品注册表也已经下架了一段时间。尽管英特尔没有像以前那样努力参与维护,但 WiMAX 基础设施和 Intel i2400m 驱动程序已经在主线 Linux 内核中存在多年时间了。经过在内核的暂存区域中待了几个月的时间之后,WiMAX 仍然没有得到进一步维护,因此官方决定从 Linux 内核中删除相关代码。Linux 暂存区域的维护者 Greg Kroah-Hartman 已经在 Linux 5.13 的提交中将移除 WiMAX 代码加入了合并队列中。他在提交中写道:“WiMAX 代码已经死亡,没有已知的用户。它已经在暂存区域中待了 5 个月,在此过程中没有人愿意承担代码库的维护和支持,所以我们现在就把它完全删除吧。如果未来有人想要恢复它,简单的恢复这个补丁就可以了。"删除这些不再维护的代码可以减少 Linux 内核约 1.5 万行代码。
Linus 谈 Linux 中 Rust 支持:保持观望,驱动程序是首选
2021年3月消息,Linux 内核对 Rust 的支持一直是个备受关注的话题。此前Linus Torvalds曾回应称可以默认启用 Rust 支持;Linux 内核的稳定分支维护者 Greg Kroah-Hartman 也表示愿意接受用 Rust 开发 Linux 驱动,社区正在推动用 Rust 来编写内核代码的进展。针对此事,外媒 ZDNet 近日则进一步采访了 Linus 和 Greg,以询问他们的具体看法。
Rust 是一款流行的系统编程语言,将对性能的低级(low-level)控制与现代语言功能结合在一起,语法上类似于 C++,但是可以保证内存安全。目前,Debian Linux 开发者 Sylvestre Ledru 已将 Rust 版本的 Coreutils(GNU shell 的核心工具)移植到了 Linux。近年来,Rust 语言已越来越受到微软、AWS 等大厂的偏爱;这些都跟它注重内存安全的特性脱不了干系。AWS 产品经理 Samartha Chandrashekar 称,Rust 有助于确保线程安全,并防止与内存相关的错误(例如可能导致安全漏洞的缓冲区溢出)。他这一看法也得到了很多其他开发者的赞同。
目前,大约有三分之二的 Linux 内核漏洞均源自于内存安全问题。开发人员认为,理论上 Rust 可以通过使用该语言天生更安全的 API 来完全避免这些问题。Linux 开发者 Nelson Elhage 称,Linux Rust 的支持者并不是提议将 Linux 内核重写成 Rust,他们只是专注于走向一个可以用 Rust 编写新代码的世界。在 2020 Linux Plumbers 大会上,与会者曾集中讨论了 Linux 内核对 Rust 的支持可能涉及到的三个方面:内核中现有的 API、架构支持,和 ABI 与内核的兼容性问题。对此,Linus Torvalds 则表明,自己仍持一个观望的态度。“我对这个项目很感兴趣,但我认为这是由那些对 Rust 非常上头的人推动的,我想看看它最终如何在实践中发挥作用”。就个人而言,Linus 认为自己并不是一个推崇 Rust 的人,但考虑到该语言所允诺的一些优势以及其可以解决一些安全隐患的能力,Linus 对它仍持开放态度。不过 Linus 也表示,“但我也知道,有时候承诺是不会兑现的。”
在 Linux 内核中的尝试方面,Linus 指出,Rust 的首要目标应该是驱动程序。因为在那里可以找到许多不同的可能目标,且内核的这些各个部分都相当小且独立。“对一些人来说,这可能不是一个非常有趣的目标。但却是'obvious one'”。而先拿驱动程序开刀还有一个原因是,"任何对驱动程序的初步试验都只是架构方面的问题";Linus 称,很多驱动程序都只与几个目标架构有关,因此即使 Rust 代码在某些架构上不被支持,问题也不会显得很严重。
Greg 也赞同认为,驱动程序可能是第一个进行此等尝试的地方;因为它们依赖于核心内核功能,但却没有任何东西依赖于它们。此外,有些人曾向 Linus 反馈称他们根本不喜欢在用户空间中使用 Rust;并抱怨,用户空间中的 Rustification 对于未来内核的使用并不是一个好兆头。对此,Linus 则表示,内核与用户空间项目并不相同。内核“在某些方面更加困难(我们使用了很多非常奇怪的头文件,这些头文件突破了 C 的界限),但在许多其他方面却也比较容易(主要是因为内核是相当独立的,因此最终二进制文件不依赖其他项目)”。最后,Greg 总结称,"这一切都将归结于如何将用 C 语言编写的内核核心结构和寿命规则之间的交互映射到 Rust 结构和寿命规则中,以使得 Rust 中的驱动程序能够正确使用它们。为此,开发者们需要做很多细致的工作,我祝他们好运。"
虽然短时间内我们还不会看到 Linux 从 C 语言移植到 Rust 中。但鉴于人们对将基于 Rust 的用户空间程序、驱动程序,以及最终将基于 Rust 的 Linux 内核引入 Linux 操作系统的兴趣和行动力,未来几年内的发展或许值得期待。
Google 支持将 Rust 引入 Linux 内核开发
2021年4月中旬,在 Linux 内核开发邮件列表之外,Google 工程师亦在其官方安全博客中发表了关于将 Rust 引入 Linux 内核开发的看法。文中表示,尽管 C 语言是近半个世纪以来编写内核的首选语言,并且内核开发具有高标准的代码审查以及精心实施的保障措施,但内存安全漏洞仍然经常发生。因此其认为 Rust 现在已经可以引入到内核开发中,以帮助减少特权代码中潜在的 bug 和安全漏洞,同时兼顾其性能要求。此前,Google 已经允许 Rust 用于 Android 系统级代码开发。
文中谈论了 Binder 驱动的原型设计,以及在现有的 C 版本和它的 Rust 对应版本之间进行安全和性能特性的比较工作。其表示,使用 Rust 的目标不是将Linux 内核代码全部转换为 Rust,而是允许用 Rust 编写新代码,这种渐进式的方法既可以保证内核现有的高性能,也能为内核开发者提供新的工具,以提高内存安全并保证未来的性能。此外,博客还详细介绍了内核的 Rust 样本驱动,并与对应的 C 版本进行对比。最后,其表示已经将 Binder 所需要的几乎所有通用内核功能都封装在安全的Rust抽象中,并正在收集更广泛的 Linux 内核社区反馈,以将现有的 Rust 支持上游化。
红帽为 Linux 5.14 大幅优化设备映射器,最高提升十倍性能
2021年5月28日消息,红帽的工程师们对 DeviceMapper(DM,设备映射器)的代码进行了大幅的性能优化,这项改动现在已经进入了 Linux 5.14 的合并队列中。
设备映射器是一个由 Linux 内核提供的框架,用于将物理块设备映射到更高级别的虚拟块设备上。它构成了逻辑卷管理器(LVM)、软件 RAID 和 dm-crypt 磁盘加密的基础,并提供了额外的功能,如文件系统快照。设备映射器的工作原理是将数据从一个虚拟块设备(由设备映射器本身提供)传递到另一个块设备,数据也可以在转换中被修改。
该提交「dm space maps: improve performance with inc/dec on ranges of blocks 」(DM space maps:通过对区块范围的 inc/dec 提高性能)被总结为:"当我们打破 btree 节点上的共享时,我们通常需要对节点中持有的每个值增加引用计数。这可能会导致对 space maps 的大量重复调用。通过改变 space map inc/dec 方法的接口来解决这个问题,以获取要操作的相邻块的范围。"
虽然看起来这是一项很小的改动,但对性能的影响却是巨大的。对于使用大量快照的安装,这将使基本操作的 CPU 开销降低多达 10 倍。具体而言,此次更新的补丁在处理 DM 快照上,CPU 的开销可以降低 10 倍之多。除此之外另一个补丁,可以用于缓存少量的索引条目,有了这个变化,提供一个新的块相比以往可以降低 20% 的 CPU 时间。红帽的工程师们在持续改进 Linux 存储支持方面做了大量的工作,这些 DM 的改进也有助于 Stratis 存储工作。
Linux随机数生成器(LRNG)再度修正
2021年7月中旬消息,作为/dev/random的新替代品,"Linux随机数生成器"(LRNG)的工作现在已经进行到第41次修订,并且已经开发了超过5年。Stephan Müller今天发布了他对LRNG的最新补丁系列,作为他提出的处理/dev/random的新方法,同时也是对现有随机数生成器的API/ABI兼容的替代品。与目前的/dev/random相比,LRNG的目标是要快 "达130%",还有其他各种性能优化,各种加密处理的改进,可测试能力的提高,选项的更多可配置性,以及更现代的设计。
LRNG的v41补丁对初始播种代码进行了清理,将种子缓冲区归零,在熵值不足的情况下初始化熵值,加强了熵源配置,并对该随机数生成器代码进行了其他各种低级别的改进。LRNG是否/何时最终被认为可以用于主线内核还有待观察,但那些对围绕新的Linux随机数发生器实现的这一漫长旅程感到好奇的人可以在内核邮件列表中找到今天的13个补丁系列。
Linux Kernel 为支持 AV1 解码做准备
2021年8月中旬,目前市场上提供加速 AV1 编码的硬件平台数量仍然非常有限,但随着更多支持这种免版税视频编解码器编码/解码的硬件上市,Linux 内核的媒体子系统也正在准备就绪。8月10号,来自 Collabora 公司的 Daniel Almeida 发出了一个"request for comments"(RFC)系列补丁,用于在媒体子系统中为 Linux 内核实现无状态 AV1 user-space API(简称 AV1 uAPI)。
AV1 uAPI 围绕 AOMedia AV1 规范的设计和需求而建立,并且遵循媒体子系统一直在努力发展的无状态设计 (stateless design)。
随着此系列补丁的推出,"VIVPU" 也被用作虚拟驱动来展示 user-space API。VIVPU 并不尝试任何实际的解码/编码,只是为了实现 user-space API 以达到测试的目的。Collabora 也已经针对此虚拟驱动开发了一个 GStreamer 解码器。VIVPU 驱动补丁中提到:“即使没有可用的硬件或编解码器的内核 uAPI 尚未被上游接收,用户空间的实现也可以使用 vivpu 运行解码循环。这可以在早期发现错误,也使得它可以同时在内核 uAPI 上为编解码器和相应的用户空间实现进行工作”。如果对 Linux 媒体子系统围绕无状态 AV1 解码的工作感兴趣,查看此补丁。
2021年8月末旬,在 Linux 内核 30 周庆之际,Linus Torvalds 宣布推出了 Linux 5.14。他在公告中表示:所以我意识到你们一定都还在忙于所有的晚会和花哨的舞会以及所有其他的 30 周年纪念活动,但是在某些时候,你们一定对不断的浮华、烟火和香槟感到厌倦了。那件晚礼服或燕尾服也不是最舒服的东西。庆祝活动还将持续几周,但你们都可能需要从中得到喘息的机会。当这种情况发生时,我为你准备了一个东西--一个新的内核版本来测试和享受。因为 5.14 就在那里,正等着你去测验,并提醒自己所有的庆祝活动是怎么回事。Linux 5.14 带来了新的硬件支持、改进现有功能并添加了其他新的内核创新。其中一些更新亮点包括有:
核心调度支持
使用 MEMFD_SECRET 的秘密内存区域支持
围绕 Intel Alder Lake 的持续启用
Yellow Carp 和 Beige Goby AMD 图形支持
AMD SmartShift 笔记本电脑支持
Raspberry Pi 400 支持等等。
更多详情可查看发布公告。
Linux 系统补丁将禁用三星 SSD 上的 TRIM 和 NCQ
2021的9月上旬消息,三星 860 EVO SATA 固态硬盘是一款 2018 年推出的产品,而在 2019 年部分该型号固态硬盘的用户在 Linux 系统上开始遭遇硬盘问题。之后人们发现 870 EVO 型号也有同样或非常类似的故障。自此开始,Linux 工程师针对这一问题进行了漫长的调查,如今工程师证实,针对这个问题的补丁已经被送到上游进行最终部署。
根据工程师的研究调查,860 和 870 固态硬盘上的 Queued Trim 命令在英特尔、ASmedia 和 Marvell SATA AHCI 控制器上会产生问题,尤其是对较旧的 AMD 系统影响最大。因此在最新的补丁中,针对英特尔、ASMedia 和 Marvell SATA 控制器的 Queued Trims 已经被删除,而对较旧的 AMD 设备的 Native Command Queuing(NCQ)也已经被完全禁用,以对此前的硬盘故障进行修复。这已经不是三星 800 系列的固态硬盘第一次发生这样的问题了,早在三星 840/850 硬盘上就遇到过类似的问题,而三星在推出 860 时还明确表示过 860 型号的 Queued Trim 适用于 Linux。但根据如今的调查显示,三星当初的说法还是不够准确的。
NCQ 是一项基于 SATA 的技术,允许系统根据工作负荷管理数据队列和传输以获得最佳性能。而 TRIM 允许硬盘智能地释放那些经评估不再需要的空间,以便存储设备在不丢失重要数据的情况下保存。这可以防止在之前使用过的空间中进行重写,TRIM 是一项被公认为对硬盘健康有益的技术。有大量的用户仍在报告三星 860 和 870 固态硬盘与英特尔、ASmedia 或 Marvell SATA 控制器相结合的问题,根据已更新补丁的用户回报,在禁用 Queued Trim 后这些问题也随之消失。
在补丁的提交说明中指出:"许多用户报告说,三星 860 和 870 固态硬盘在与 AMD/ATI 的 SATA 控制器结合时会遇到各种问题,只有完全禁用 NCQ 才能有效避免这些问题。无论主机 SATA 适配器供应商如何,始终为三星 860/870 固态硬盘禁用 NCQ 将导致适配器的 I/O 性能下降。为了限制对 ATI 适配器的性能影响,引入 ATA_HORKAGE_NO_NCQ_ON_ATI 标志可以仅对部分适配器强制禁用NCQ。"
鉴于三星 800 系列的固态硬盘所遇到的这些问题,为了稳定性和数据安全,Linux 用户最好还是不要使用三星 800 系列的固态硬盘,已经在使用的用户最好也尽快更换其他型号的固态硬盘。
Linux 5.16 将支持更多华硕主板传感器
2021年9月下旬,一个支持通过华硕 WMI 功能访问 NCT677x 的补丁已经打上了 hwmon-next 标签,Linux 5.16 或将支持更多华硕主板上的传感器。
该补丁允许通过华硕 WMI 功能访问 NCT677x 系列驱动程序。在支持这种访问芯片方式的主板上,如果没有这个选项,驱动程序通常不会工作,因为 ACPI 会将 I/O 端口标记为已使用。现在在这种情况下将使用华硕 WMI 功能,使用 ACPI 固件接口与华硕的传感器通信。补丁还列出了随后适用于此传感器支持补丁的白名单,随着时间的推移,更多的华硕主板可能会被添加进来,这只是作为这个补丁的一部分,今年晚些时候的 Linux 5.16 合并窗口的初始列表中应该会有更多。
Facebook 持续研究 BOLT 来提升 Linux 内核性能
2021年9月下旬消息,Facebook 作为积极贡献 Linux 内核的厂商,近年来,其工程师一直在持续研究 BOLT,将此作为加速 Linux/ELF 二进制文件的方法。
BOLT 即"Binary Optimization and Layout Tool"(二进制优化和布局工具)的缩写,能够在配置文件后重新排列可执行文件,产生比编译器的 LTO 和 PGO 优化所能达到的更快性能。其最新目标之一是对 Linux 内核镜像进行优化。与对 Linux 内核进行配置文件引导优化 (PGO) 时产生的挑战类似,对 Linux 内核进行 BOLT 处理也面临着类似的复杂障碍,包括:正确地分析/采样具有相关工作负载的内核并进行优化、内核的大量代码库、模块与核心内核代码等对比。现有的 BOLT 只专注于优化 ELF 应用程序可执行文件。
在本周的 Linux Plumbers Conference 大会上,有来自 Facebook 的工程师讨论了对内核的 BOLT 处理,带来的性能提升如下图所示:

从数据可以看出,这是一项值得持续投入研究的工作,因为 Facebook 在 PGO+LTO 编译器优化之上通过 BOLT 优化获得了"两位数的速度提升"。此处的速度提升是通过优化可执行文件的代码布局来实现的,可更有效地使用硬件页面和指令缓存。如果对 Facebook 的 BOLT 优化工具感兴趣,或者对未来能够完全使用 BOLT 优化内核的前景感兴趣,可查阅 Facebook 工程师制作的幻灯片,BOLT 代码也已开源。
Linux 5.16 将支持 KVM 禁用 AMD PSF 功能
2021年9月末旬消息,在 Linux 5.16 内核中,AMD PSF 位现在将暴露给 KVM 来宾虚拟机,以便明确地禁用此 AMD CPU 功能。
PSF(Predictive Store Forwarding)是一种基于硬件的微架构优化,旨在通过预测负载和存储之间的地址依赖关系来提高代码执行的性能。现代 CPU 实现了一种称为存储到负载转发(STLF)的技术,存储的数据被直接转发到负载,不必等待它被写入内存。而 PSF 则通过推测负载结果提供性能优势,并允许后来的指令更早开始执行。
2021年 3 月,AMD 提供了一份 PSF 安全分析,认为尽管它有很小的可能性导致错误的 CPU 推测,但对于大多数应用来说仍是安全的,仍建议默认启用。因此 Linux 内核还没有启用/禁用 PSF 的接口。不过,此次提交的补丁将 PSF 位暴露给了 KVM(基于内核的虚拟机),这样来宾内核可以在需要时禁用该功能。
Linux 5.16 为 AMDGPU 驱动带来 DisplayPort 2.0 初步支持
2021年9月末旬消息,最新提交的 DRM-Next 功能更新信息透露,下一版的 Linux 内核将带来诸多功能更新;围绕 AMDGPU 驱动程序功能的工作正持续推进,计划于新年伊始在 Linux 5.16 稳定版中亮相。其中最引人注意的一个 pr,是 AMD Radeon 内核图形驱动中围绕 DisplayPort 2.0 的初步启用。
Phoronix 指出,当前一代 Radeon RX 6000 系列显卡最高仅支持到 DisplayPort 1.4,而新版内核驱动程序似乎正在为将采用 DisplayPort 2.0 的下一代 GPU 做准备。随着 Linux 5.16 的推出,在相关初步规划落实后,进一步的工作计划预计也会逐步上线。值得注意的是,英特尔的开源 Linux 图形驱动工程师也曾发布了一些补丁,致力于为他们的驱动提供 DisplayPort 2.0 支持。因此在多方努力下,预计 2022 年市场上或许会出现一些不错的 DP 2.0 采用。根据介绍,此次针对 DRM-Next 的 AMDGPU PR 的一些重点内容有:
DisplayPort 2.0 的初步支持。
更新了最新推出的 Yellow Carp 和 Cyan Skillfish 图形支持
Video Core Next(VCN)优先级处理
DCN 3.1 节电改进
一些其它 Bug 修复和代码更新,包括电源管理/BACO(Bus Active Chip Off) front、RAS 等。
完整补丁列表将于今年 11 月随 Linux 5.16 合并窗口的到来而发布。
为 Linux 5.16 准备的新版 Zstd 已就绪,最高带来 35% 的性能提升
2021年10月上旬消息,为 Linux 5.16 内核所准备的新版 Zstd 已提交至 linux-next 的合并中,以便在接下来的几周内进行更广泛的测试,如无意外我们将在下个月的 Linux 5.16 合并窗口中看到 Zstd 的更新代码。来自 Facebook 的 Zstd 维护者 Nick Terrell 最近开始重新尝试更新 Linux 内核的 Zstd 实现。前几天发布了最新的 Zstd 内核补丁(基于 Zstd 1.4.10),与现在的主线相比,该版本提供了一个更新的代码,将提供更好的性能并修复老版本 Zstd 中的大量的错误。
目前在 Linux 内核中的 Zstd 代码已经有四年的历史了(Zstd 1.3.1),因此内核中的 Zstd 代码已经严重过时了。过去这么多年以来,Zstd 在上游已经有了许多修复和性能改进。一旦内核引入此次 Zstd 更新,Btrfs Zstd 的压缩可以快 5%,Btrfs Zstd 解压可以快约 15%,SquashFS Zstd 解压也能快约 15%,F2FS Zstd 解压在读取时可以快约 20%,zRAM 解压可以快约 30%,内核 Zstd 图像解压可以快约 35%,initramfs Zstd 解压和构建能够快约 5%。
从上面的数据能够看出,这些补丁为 Linux 内核中的 Zstd 实现提供了很大的性能提升,尤其是在解压方面。除了性能上的提升,新的代码在 Zstd 中引入了一个新的封装 API,可以使代码的更新更顺利、更容易地进行。因此随着后续 Zstd 1.5.1 的发布,Linux 内核代码也会更易达到基于 Zstd 1.5.1 的状态。
Linux 5.16 将实现更好的 USB 低延迟音频播放
2021年10月上旬消息,Linux 内核开发者再次尝试增强其 USB 音频驱动程序的低延迟播放模式。据补丁描述,由于提前强行提交 URB 可能很容易触发 XRUN,因此之前的实现是通过在触发流开始之前用预先提交的无声数据来延迟提交实际数据避免的。而此次提交的补丁采取了类似于隐式反馈模式中使用的方法。URB 像以前一样在 PCM 触发开始时排队,但是在每次提交之前会检查缓冲区是否已经被填。通过这种方式,URB 的数量可以根据可用的数据动态地、灵活地变化,而不会影响到 XRUN。此外,还有一批其它的 usb-audio 补丁提交,包括限制共享时钟的速率、修复 URB 完成同步时可能出现的竞争、将自旋锁添加到 stop_urbs()、修复数据包大小计算回归等等。这些补丁都已经合并到 next 分支,如无意外,将会在 Linux 5.16 中推出。
2022年4月13日,Linux 内核 5.16 版本被标记为 EOL(生命周期结束),它不再接收内核开发人员的安全补丁、功能修复等更新内容。开发者 Greg Kroah-Hartman 发布了 Linux 5.16 的最后一个维护版本: Linux 5.16.20,并在邮件中宣布 Linux 5.16 已成为历史,建议用户升级到 Linux 5.17 :“注意,这是最后一个 5.16.y 内核版本,5.16 版本已 EOL,请移至 5.17.y 分支”。三个月前发布的 Linux 5.16 带来了多种新特性,比如:
合并改进后的 zstd,性能大幅提升
为树莓派 Compute Module 4 提供 mainline 支持
支持 AMD SEV/SEV-ES 主机内实时迁移
实现更好的 USB 低延迟音频播放
但它仍是一个非 LTS 版本,只有为期三个月的支持。如果用户正在使用由 Linux 5.16 内核驱动的 GNU/Linux 发行版,建议升级到 Linux 5.17 ,不过 Linux 5.17 也是非 LTS,将在2022年6月底 EOL。
Linux 将不再默认启用 AMD SME
2021年10月中旬消息,由于某些平台上的缺点,Linux 内核将不再默认在支持的硬件上使用 AMD 安全内存加密 (SME)。自从将 AMD SME 支持引入 Linux 内核以来,当内核中内置 SME 支持 (AMD_MEM_ENCRYPT) 时,安全内存加密都会默认激活。"AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT" 的默认设置允许开箱即用地使用安全内存加密,而无需指定任何额外的内核参数等。然而,这导致了某些平台上的启动失败,尤其是 IOMMU 以及一些图形驱动程序,不希望对内存进行加密。
默认情况下不使用 AMD SME 的更改源于相关平台问题 Raven Ridge,以及默认情况下尝试 SME 可能导致的启动失败。不过,由于 SME 需要在内核启动过程的早期阶段启用,至少目前不可能有增强的逻辑来以更健壮的方式确定何时可以在没有用户交互的情况下启用/禁用 SME。因此,随着 x86/urgent pr 进入 Linux 5.15,然后向后移植到以前的内核,AMD 内存加密将不会默认启用。如果当前内核已经包含了 AMD 内存加密代码,则仍然可以通过设置 "mem_encrypt=on "选项来启用安全内存加密。
Linux 5.15 发布,新的 NTFS 文件系统
再经过 7 个候选版本后,Linux 内核 5.15 现已于2021年11月初发布,这是 GNU/Linux 发行版的最新 LTS(长期支持)内核。主要更新内容:
新的 NTFS "NTFS3" 文件系统驱动程序,其最初由 Paragon Software 开发
KSMBD 被合并为内核 SMB 文件服务器,旨在实现高性能、支持 RDMA 和其他可以在内核空间中更容易实现的领域的高级功能,并且比 Samba 更轻巧
许多新的 RDNA2 PCI ID,可能用于 AMD Radeon RDNA2 显卡更新
对 Intel Xe HP 和 DG2/Alchemist 图形硬件的初步支持
围绕 Intel Alder Lake 的各种 PCI ID 添加和其他支持工作
AMD Zen 3 APU 温度监控终于到位,而且还更具前瞻性,Yellow Carp / Rembrandt APU 温度监控也出现在 k10temp 中
华硕 ACPI 平台配置文件支持
AMD Van Gogh APU音频驱动被合并,Steam Deck是受益于此的硬件之一
合并了 Realtek RTL8188EU WiFi 驱动程序以替换之前的 Realtek WiFi 驱动程序
PREEMPT_RT 锁定代码被合并为代表 Linux 内核的大量以前未完成的实时补丁
亚马逊的 DAMON 被合并为他们一直追求的数据访问监控框架,用于主动内存回收和其他目的
新的 "process_mrelease" 系统调用可以更快地释放死亡进程的内存
以安全的名义在上下文切换时选择加入 L1 数据缓存刷新,但考虑到性能影响,由系统管理员严格选择加入
添加了强化以允许在从内核函数返回之前清除调用者使用的寄存器,建立在 GCC 11+ 编译器端的支持之上
更多详细内容,请查看发行公告。
Linux 5.17 将正式迎来免重启更新系统固件
2021年12月30日消息,系统固件提供运行时服务,如:RAS(可靠性、可用性和可服务性)功能、UEFI 运行时服务和 ACPI 服务。目前,如果这些代码区域有任何固件代码的变化,就需要进行系统固件更新和重启。为此,英特尔在2021年9月向 Linux 内核引入了 Platform Firmware Runtime Update 和 Telemetry 驱动,以帮助用户更新固件而不需要重新启动,只不过当时相关的功能并未准备就绪。如今时隔三个月,英特尔工程师已经为 Platform Firmware Runtime Updates 和 Telemetry 驱动准备好了被命名为 "PFRUT"(两者的名称缩写)的相关技术支持,允许在支持的系统上进行固件更新,而不需要重启系统,以消除设备中断服务期间所造成的影响。
PFRUT 中的 PFRU 它允许平台固件组件即时更新而不需要重新启动系统。这样做的目的是为那些需要 "100% 时间可用" 的服务器和其他必须将停机时间保持在最低限度的设备所准备的。因为很多关键服务是需要系统一直处于运行状态,仅在有备用系统的情况下才能短暂关机或重启。这类系统不能承受与重启或关机有关的任何中断。除此之外,还有一些系统虽然能够承受重启或关机带来的影响,但可能目前正在进行的工作特别重要,因此也不能中断。PFRUT 中的 T 指的是 Telemetry(遥测)。作为 PFRUT 的一部分,该驱动用于以标准化的方式从固件中读取遥测数据。这些补丁都会被 Linux 电源管理中的 "linux-next" 分支接收,意味着这些补丁是下一个内核合并周期,也就是 Linux 5.17 中的内容,合并窗口将在 1 月中旬打开。
Linux 取消对 a.out 格式的支持并删除其相关代码
2022年1月中旬消息,在 2019 年,Linux 内核就弃用使用了几十年前的 a.out 文件格式支持,由新的 ELF 格式接管工作。时间来到 2022 年,a.out 的相关代码似乎都要从内核中删除了。Linux 一直依赖 a.out 格式,直到 90 年代中期的 v1.2,ELF 成为流行的二进制文件格式。虽然多年来 a.out 格式并未在 Linux 上广泛使用,但直到 2019 年,Linux 内核才弃用对在x86的32位上运行 a.out 二进制文件的支持。事实上,编译器和其他工具组件已经从 a.out 文件格式转移了多年。
据外媒 Phorinix报道,Borislav Petkov 提议从内核中移除对 a.out 支持的补丁,目前为止,所有响应的 Linux 上游开发人员都支持清除 a.out 支持的相关代码。一些旧的系统调用和其他未使用的内核代码也有可能在此过程中被清除。此移除补丁似乎并未进入 Linux 5.17 的合并窗口,也许将推迟到 v5.18,但无论如何,2022 年 Linux 内核都将完全退出 a.out 支持。
Linux getrandom() 获得千倍的性能提升
2022年2月下旬消息,Jason Donenfeld 是 WireGuard 的主要开发者,同时也是 Linux 内核随机数相关代码的维护者,近日在他的领导下,Linux 内核的随机数生成器代码有了巨大幅度的改进。在之前的 Linux 5.17 中,Jason Donenfeld 就在随机代码用 BLAKE2s 代替了 SHA1,由于 BLAKE2s 自带的特性,前者通常比后者更快更安全。经过测试,通过这个简单的转换就能获得 131% 左右的速度提升。
虽然在 Linux 5.17 中有了速度上的大幅提升,但 Jason Donenfeld 对此并没满足。因此在 Linux 5.18 中他对随机代码作出了更多的改进。通过查看 Linux 的 random.git 仓库的日志能够看出,开发者 Jason Donenfeld 在最近两天时间里进行了大量的代码提交。这些提交内容都将在 3 月下旬 Linux 5.18 的合并窗口启动时引入内核。在邮件中特别强调到,通过使用正在开发的最新代码,用于获取随机字节的 getrandom() 调用能够获得更好的性能。在配备英特尔 Xeon E5-2697 v2 @ 2.70GHz CPU 和 112G 内存的设备上进行 stress-ng getrandom() 基准测试后,更是获得了 8450% 的性能提升。
此次更改基本上会将之前的全局结构(实际上是 per-numa 节点结构)更改为 per-cpu 结构,这意味着快速路径上的许多锁都会消失。因此,当在具备多核的 CPU 上同时尝试 getrandom() 时,毫无疑问性能会出现提升。只不过没想到在测试中能带来 8450% 的提升。除此之外,当从 per-numa 更改为 per-cpu 后,也将不再需要被推迟到工作队列上线后才能进行。也正如我之前所说,此次改进将会为高核心数的电脑和服务器带来巨大收益。
Linux 内核升级 C 语言标准
2022年2月下旬根据 Linux 内核邮件列表的消息,社区近日讨论了是否要为内核采用现代 C 语言标准。虽然 Linux 内核在快速发展,但它同时依赖着一些非常古老的工具,其中之一就是内核代码仍在使用 1989 年版本的 C 语言标准——此标准在 30 多年前内核项目启动之前就已经编写完成。从讨论结果来看,这一情况有望在 5.18 版本内核中改变。
Jakob Koschel 在向 Linus Torvalds 递交的补丁 (Proposal for speculative safe list iterator) 中修复了内核链表相关的预测执行漏洞。起因是 Jakob 发现了一个问题,Linux 内核广泛使用由 struct list_head 定义的双向链表:
struct list_head {
struct list_head *next, *prev;
};
这种结构体通常被嵌入到其他结构体中,通过这种方式,开发者可以使用任何感兴趣的结构类型制作链表。除此之外,内核还提供了大量可用于遍历和操作链表的函数和宏。其中之一是 list_for_each_entry(),这是一个伪装成控制结构的宏。要了解如何使用此宏,请假设内核包含如下结构:
struct foo {
int fooness;
struct list_head list;
};
list 成员可用于创建 foo 结构体的双向链表,假设我们有一个叫做 foo_list 的结构声明作为此类链表的头,使用以下代码可以遍历此列表:
struct foo *iterator;
list_for_each_entry(iterator, &foo_list, list) {
do_something_with(iterator);
}
/* Should not use iterator here */
list 参数告诉宏在 foo 结构中 list_head 结构体的名称。此循环将为列表中的每个元素执行一次,迭代器指向该元素。由此导致了 USB 子系统中的一个 bug:传递给该宏的迭代器在退出宏后还能被使用。
Koschel 通过重新编写有问题的代码,以在循环后停止使用迭代器来解决问题。不过 Linus 却对补丁修复的问题表示不解,也没有看到它与预测执行漏洞的关系。Koschel 对此进行了进一步解释,对此 Linus 认为这只是一个普通的 bug。但不久之后 Linus 发现了问题的根源所在:传递给列表遍历宏的迭代器,必须在循环本身之外的范围内声明。随后,Linus 认为也许可以采用更直接的修复如块级变量声明。但 C89 不支持,而 1999 年发布的 C99 标准支持。所以 Linux 内核也许是时候转向使用 C99 标准了。Linus 说到,内核代码一直停留在 C89 的原因之一是编译器 gcc 的旧版本会出现奇怪的问题,导致初始化程序被破坏。不过现在内核要求的 GCC 最低版本已经提高到了 v5.1,那些 bug 可能不再相关了。
另一位密切关注架构编译器问题的内核开发者 Arnd Bergmann 提议直接升级到 C11 甚至 C2x,尽管他不确定 C11 是否会带来任何对内核有用的新内容。不过如果升级到 C17 或 C2x,会破坏对 gcc-5/6/7 的支持,因此升级到 C11 更容易实现,而且跨越太大内核社区未必接受。Linus 赞成了这个想法,在 Bergmann 确认应该可以这样做之后,Linus 宣布将在下一个内核版本 v5.18 中尝试使用 C11 标准。如果一切顺利,下一个内核版本使用的 C 语言标准有望升级到 C11。
Linux 内核 C 语言标准从 C89 升级到 C11 的工作在2022年3月中旬有了新进展。在将用于构建 Linux 内核的补丁集 target 由 "-std=gnu89" 快速修订为 "-std=gnu11" 后,Linus Torvalds 表示他希望尽快将其拉入下一个合并窗口(Linux 5.18),以免其他 PR 到最后才使用 C11。即将到来的 Linux 5.18 开发周期将把所使用的 C 标准升级到 C11,现在 linux-kbuild 的 kbuild-gnu11 分支已完成,它将在早期被提交到 Linux 5.18 的合并窗口。如果 Linux 5.17 在周日按时发布,该合并窗口将在下周启动。此次升级 C 语言标准的决定源于社区中关于 Linux 内核 C 标准从 C89 迁移到 C11 的讨论。到目前为止,Linux 内核的 C 语言仍使用旧的 C89 标准,因此社区成员希望升级到更现代的 C11。由于 Linux 5.15 已经将 GCC 编译器版本要求提高到 GCC 5.1,他们可以安全地开始使用 C11/GNU11 语言功能,而无需强加任何新的编译器要求。
Linux 5.18 支持更灵活的 LLVM 配置方式
2022年4月上旬消息,自从两年前支持主流化以来,使用 LLVM/Clang 而不是 GCC 构建 Linux 内核的技术一直在不断成熟,并且 Linux 内核继续可选地支持额外的 LLVM/Clang 功能。据外媒 phoronix 介绍, Linux 5.18 对 LLVM 环境变量的处理进行了改进,以处理版本化编译器二进制文件或 PATH 之外的编译器安装。ReiserFS 被正式标记为“弃用”,退出已经成为不可避免的结局。
LLVM = 1 当前用于定义 LLVM/Clang 工具变量,以使用该非 GNU 工具链构建 Linux 内核。 但是目前如果想在 PATH 之外使用 LLVM/Clang 安装,或者在 Debian/Ubuntu 和其他 Clang 二进制文件为版本后缀的发行版上使用,却并不轻松。随着 Linux 5.18 中的新改动,LLVM 的设置变得越发灵活,如果用户想要在 PATH 中定位系统的 LLVM/Clang 14 二进制文件,则可以指定 LLVM=-14。 或者想要针对 PATH 之外的编译器安装,可以设置 LLVM=/path/to-llvm。
Linux 5.19 支持经 Zstd 压缩过的固件
2022年5月上旬消息,Linux 5.19 内核即将合并可选的 Zstd 固件压缩支持选项。
从透明文件系统压缩到使用 Zstd 压缩内核映像,Linux 内核越来越多地使用 Zstd。谈到对经 Zstd 压缩过的固件的支持,使用 Zstd 压缩 Linux 固件树往往比使用现有的 XZ 稍大,但加载固件文件时的解压缩速度要快得多。目前来看,对于 Linux 5.19,使用 Zstd 压缩固件的代码似乎将被合并。截至上周末,Greg Kroah-Hartman 已将其排入driver-core-next。Zstd 压缩的固件基础设施以及自检都在 driver-core-next 的下一个排队,在 5 月底左右打开 Linux 5.19 合并窗口之前。
Zstd 固件压缩支持最终登陆 driver-core-next,这意味着它将提交到 Linux 5.19,该项功能支持将现有的 FW_LOADER_COMPRESS 拆分为通用 knob,将 XZ 固件压缩移动至新的 FW_LOADER_COMPRESS_XZ knob,同时添加 FW_LOADER_COMPRESS_ZSTD 以启用此 Zstd 压缩固件文件支持。当启用内核支持并且固件文件以 .zst 结尾时,将自动加载 Zstd 压缩的固件文件。
Linux Kernel 5.18发布
于2022年5月下旬正式发布了!该版本主要变化之一是将英特尔软件定义芯片(SDSi) 驱动程序包含到主线内核中,该功能引起了不小的争议,但英特尔尚未明确表示该驱动的具体用途:该驱动程序可能允许芯片制造商在用户支付许可证后启用新的芯片功能。硬件方面,Raspberry Pi Zero 2 W 在此版本中获得了完整的主线 Linux 内核支持;Tesla FSD 芯片进入上游;还为英特尔和AMD芯片带来了许多CPU和图形更新,支持特斯拉的全自动驾驶(FSD)芯片系统。该版本的主要新特性包括:
用于英特尔混合处理器的新硬件反馈接口 (HFI) 驱动程序
AMD EPYC 服务器的 NUMA 平衡调度程序更新
AMD HSMP 驱动程序
各种 AMD 嵌套虚拟化改进
英特尔至强处理器驱动程序支持
在 AMDGPU 驱动程序中默认启用FreeSync
Btrfs 支持编码 I/O 和更快的 fsync
带有触控栏的 MacBook Pro 的 FN 键映射
其他内容可参考社区关于 Linux 5.18 新功能的报道:
英特尔 CPU 内购功能 (SDSI)合并
支持更灵活的 LLVM 配置方式
对 exFAT 文件系统支持进行了两项关键改进
内核 C 标准从 C89 升级到 C11/GNU11
带来许多 Apple 键盘改进
随着 5.18 正式发布,5.19 的合并窗口已经打开,据 Linus 介绍:目前已经有一些 Linux 5.19 的 PR 等待处理。
Linux新闻网站Phoronix在过去八个月中一直在跟踪英特尔SDSi驱动程序的开发情况,该驱动程序将允许英特尔在用户购买许可协议后启用 CPU 中已有的功能。
英特尔Linux软件工程师David Box在9月份的Linux内核邮件列表中将SDSi描述为“激活其他硅功能的后期制造机制”,功能是通过许可证激活过程启用的。英特尔还发布了一份GitHub文档,解释了其支持SDSi的Xeon处理器“允许通过许可证激活过程配置额外的CPU功能”。SDSi 驱动程序为应用程序提供了一个接口,用于预配写入内存并用于对“功能激活负载”进行身份验证的“身份验证密钥证书”。令牌将应用于 CPU 以激活功能。
正如Phoronix在二月份英特尔的驱动程序被Linux 5.18接受时所指出的那样 - 正如英特尔的GitHub文件所暗示的那样 - SDSi可能仅限于未来的服务器和工作站处理器。例如,英特尔可以使用软件升级来为数据中心或其他工作负载定制CPU功能。该出版物的创始人兼主编乔纳森·科贝特(Jonathan Corbet)LWN.net 认为,软件定义芯片的好处对英特尔来说是显而易见的,但对买家来说却不清楚。
英特尔在2021年10月份向The Register发表的一份声明中表示,它“定期向Linux内核提交可用于未来产品的代码”,并补充说,如果它计划在未来的产品中实施该功能,它将提供更深入的解释。
Linux 5.19相关更新功能集(2022年5月)
将支持报告 FAT32 文件的创建时间
对于正在开发的 Linux 5.19 内核, FAT 文件系统将支持通过 statx () 系统调用来报告 FAT32 文件的诞生 / 创建时间。早在 2017 年,Linux 4.11 内核就添加了 statx 系统调用 ,以允许增强文件信息报告。从那时起,各种文件系统开始添加 Statx 支持,并在 Linux 的用户空间中逐步进入 Glibc 。目前这些 “扩展属性” 的 statx 系统调用已添加到 Glibc 和各种 Linux 文件系统的扩展信息位。近日,Andew Morton 分支的 “FAT 文件系统创建时间报告” 代码已成功添加到内核主线中,据外媒 Phorinix 报道,该补丁预计将在即将到来的 Linux 5.19 周期中合并。该提交则更改了在 statx 中报告 FAT16/FAT32 文件系统的创建时间。
获得近 50 万行新的图形驱动程序代码
David Airlie 发送了 Linux 5.19 合并窗口的 Direct Rendering Manager (DRM) 子系统更新。Linux 5.19 的 DRM 图形驱动程序更新包含对 AMD 和 Intel 最新版本显卡的完整驱动支持,因此代码数量有点超乎想象:更改共包含 1302 个文件,495,793 行新代码和 32,019 行删除代码。
具体的内容方面, Intel 的驱动工作主要集中在对 Arc Graphics DG2/Alchemist 的支持优化和初始 Raptor Lake 启用方面。比如为各种 DG2 笔记本 GPU 添加了 PCI ID、初始 Raptor Lake P/S 支持等等。AMD 则是为下一代 CDNA Instinct 产品和 RDNA3 Radeon RX 7000 系列显卡做准备。比如启用了各种新的 IP 块,例如 SMU 13.x、SOC21 等。
其他一些工作包括添加 eDP 支持的 Qualcomm MSM DRM 驱动程序、对 QXL 驱动程序的 AArch64 支持、Sun4i 驱动程序中的 Allwinner D1 支持、ASpeed AST 驱动程序中的 DisplayPort 支持、MediaTek MT8186 支持、Rockchip VOP2 支持以及对较小驱动程序的更改。
为XFS带来了大量的新代码
在 Linux 5.19 合并窗口期间进行了一项有关 XFS 文件系统的更新。据介绍这是一项包含了很多新代码的大更新;其中两个主要的新功能是对 Large Extent Counts 和 Logged Attribute Replay 的支持。开发者 Dave Chinner 表示,其计划将在这两个新的基础性功能之上构建 “more complex future features”。
Dave Chinner 解释称:对于即将到来的功能,需要能够在每个节点上存储数以亿计的 xattrs。Large Extent Count 功能消除了阻止这种规模的 xattr 存储的限制,当修改磁盘上的扩展计数格式时也将每个节点支持的数据扩展数从 2^32 增加到 2^47。我们还需要能够修改 xattrs 作为更大的 atomic transactions 的一部分,而不是作为 standalone transactions。Logged Attribute Replay 功能引入了允许我们在启动属性修改之前使用 intents 在日志中记录属性修改的基础架构,因此允许其他 atomic transactions 记录属性修改 intents,然后将实际修改推迟到以后进行。如果发生了崩溃,log recovery 会保证 attribute 在记录意图的 atomic transaction 的上下文中重放。
在此次合并中,有很大一部分 commit 是为了实现基本的 attribute replay 功能,以及与这个新功能相关的修复、改进和清理工作。Allison 值得感谢,因为她一直在努力让这个功能进入 XFS。还有许多其他较小的变化和改进,所以总的来说,这是一段时间以来较大的 XFS 合并请求之一。除了 XFS 将能够扩展到 40 亿个数据扩展和每个节点数十亿个 xattrs 之外,还有对实时范围核算的改进、rmap btree 搜索的改进,以及减少了 30% 的开销,xfs_scrub runtime 也减少了 15% 左右。还有其他各种改进可见 Git merge 。
RISC-V 支持在 64 位系统运行 32 位二进制文件
据外媒 Phoronix 报道,正在开发中的 Linux 5.19 内核合并了 RISC-V 架构的首轮更改,其中包含几个新功能。带来了新的 “compat” 子系统,用于在 64 位内核上运行 32 位二进制文件。这个 RV32 的支持很有意思,因为 Linux 内核一直在迎合 64 位 RISC-V ,对现代 RV32 的支持并不多。Linux for RISC-V 的另一个重大变化是 Svpbmt 对主管模式的扩展支持:基于页面的内存类型。RISC-V 的 Svpbmt 允许将内存属性直接编码在页面中。详细信息请参阅 riscv-isa-manual。还添加了对 kexec_file_load 的支持,它是基于文件的 Kexec 系统调用,依赖为内核和 initramfs 添加的 FD。此外,该合并还包含一个新的基于票据的自旋锁系统,和其他较小的修复。
龙芯 LoongArch CPU 架构的内核移植有望进入 Linux 5.19 主线
Linux 内核上游开发者正在讨论:基于 MIPS64 的 LoongArch CPU 架构的内核移植能否在 Linux 5.19 开发周期中被合并到主线。从上周末的讨论来看,答案是肯定的,但可能没有包含必要的硬件驱动程序。
龙芯 LoongArch CPU 架构的内核移植已经通过了 10 多轮的审查,以获得 Linux 内核的支持。它的要求之一在 GCC 12 中得到了满足,现在已经有一个 LoongArch 端口 —— 用于在合并内核 CPU 架构代码之前,可以获得必要的编译器支持。
不过根据内核维护者的说法,LoongArch PCI 代码存在一个问题,那就是目前还没有 review-by/signed-off 标签,还有一个问题是 irqchip 驱动程序也没有通过审查,因为它以非标准方式集成到 ACPI 和 PCI 中。LoongArch 的 ACPI 处理有点麻烦,但正在通过下一个 ACPI 标准更新来解决。无论如何,内核开发者正在确定如何进行。
从新近的讨论来看,LoongArch CPU 端口 / 架构代码可能会在月未进入 Linux 5.19 合并窗口,而启动此类系统所需的硬件驱动程序将在必要时进入最新的内核版本。为 Linux 5.19 引入 CPU 端口将解除 LoongArch 开发者向上游提交他们的 GNU C 库 (Glibc) 支持所遇到的障碍。他们对 Glibc 的支持以首先获得内核支持和用户空间 ABI 为条件。开发者希望看到 LoongArch 被合并到今年夏天晚些时候发布的 Glibc 2.38 中,为此他们需要将 Arch 代码合并到 Linux 5.19 中。
龙芯开发者迫切希望 Linux 内核能够合并他们的代码到主线 —— 即使缺少驱动程序。这是为了能够向 GNU C 库 (Glibc) 提交 LoongArch 的支持代码。他们认为,如需主线化 Glibc target,首先要有一个稳定的用户空间 ABI 来解决内核支持。但由于 Glibc 2.38 预计在2022年8月发布,LoongArch 需要先合并到 Linux 5.19,以便有足够的时间在 7 月发布,并使 Glibc LoongArch 代码在下一个版本完成。此外,现在合并 LoongArch CPU 的支持代码也减少了对 Linux 5.20 中可能出现的任何主线树变化的维护负担。据介绍,此次合并为 Linux 内核增加了 21000 行代码(未包括驱动程序),到今年夏天晚些时候 Linux 5.20 内核开发周期时,其余所需的驱动程序支持将通过审查,产生一个可启动的 LoongArch 系统。
2018年,知名 Linux 内核开发者 Arnd Bergmann 曾预测 C-SKY 将是 “我们最后一个添加到内核的新 CPU 架构”。C-SKY 是由中国开发的 CPU 架构,当时的想法是所有未来的 CPU 工作都拥抱 RISC-V。但现在看来,LoongArch 也许将是最后一个添加到 Linux 内核的新 CPU 架构。
已支持使用 Zstd 压缩固件
Linux 内核维护者 Greg Kroah-Hartman 已经开始向 Linux 5.19 提交他所负责的多个模块的重要特性 PR。随着新版本内核对驱动程序进行核心改动,现已支持使用流行的 Zstd 来压缩固件文件。该项功能支持将现有的 FW_LOADER_COMPRESS 拆分为通用 knob,将 XZ 固件压缩移动至新的 FW_LOADER_COMPRESS_XZ knob,同时添加 FW_LOADER_COMPRESS_ZSTD 以启用此 Zstd 压缩固件文件支持。当启用内核支持并且固件文件以 .zst 结尾时,将自动加载 Zstd 压缩的固件文件。
从透明文件系统压缩到使用 Zstd 压缩内核镜像,Linux 内核开始越来越多地使用 Zstd。谈到对经 Zstd 压缩过的固件的支持,使用 Zstd 压缩 Linux 固件树往往比使用现有的 XZ 稍大,但加载固件文件时的解压缩速度要快得多。多年来,一直有人提议在 Linux 内核的固件处理中增加对 Zstd 压缩的支持,以节省磁盘空间,同时提供快速的解压缩速度,并作为现有 XZ 压缩的替代方案。但这些补丁一直都没有完成,而随着 Linux 5.19 的推出,很快将会如愿提供。
对于想要使用 Zstandard 压缩算法的开发者。Zstd 压缩固件除了可以节省磁盘空间,还会提供由内核动态完成的快速解压缩。以 .zst 结尾的固件文件将由 Linux 内核的固件加载程序解压缩。
Linux 5.19 正式发布
Linus Torvalds 于2022年8月上旬发布了 Linux 5.19 , 作为 Linux 内核的最新稳定版本。发布公告中还提到这是在一台运行 AArch64 Apple M2 SoC 的 Apple MacBook 上进行的工作,这是他首次从 ARM64 笔记本电脑上发布新的 Linux 内核。Linux 5.19 带来了许多新功能,比如:
合并龙芯 LoongArch CPU 架构
支持报告 FAT32 文件的创建时间
引入 AMD “BRS” 分支采样功能
RISC-V :支持在 64 位系统运行 32 位二进制文件
支持使用 Zstd 压缩固件
获得近 50 万行新的图形驱动程序代码
除此之外还有一些不错的性能改进,详情可查看邮件公告。
联想公司预计在2022年将有 30 多个平台支持 Linux
在2022年7月举办的科索沃 DebConf22 会议上,联想内部领导 Linux 计划的 Mark Pearson 谈到了 2022 年其平台对 Linux 的支持进度,以及该公司在过去一年中的进展。其表示预计在 2022 年将有 30 多个笔记本、桌面平台支持 Linux,其中包括 L、E 和 Z 系列。新平台包括 Intel Alder Lake S/P/H、AMD Rembrandt 和 AMD Barcelo 型号。联想的 Linux 预装工作将继续专注于 Ubuntu 和 Fedora 产品,但他们也计划开始在这些设备上提供 Debian。
科技网站 Phoronix 指出,联想的 Linux 工程师在过去的一年里曾面临了面板刷新问题、WiFi 更改、英特尔网络驱动程序问题、AMD 电源问题、NVIDIA 能源认证驱动程序问题,以及供应链短缺等一系列挑战。但从好的方面来说,他们也继续与 OEM 硬件供应商建立了更密切的关系,从而提高 Linux 支持/兼容性。此外,最近由于禁用第三方 UEFI CA 证书而导致新联想系统默认不启动 Linux 的问题也被提出。它是由 Microsoft 授权提出的,但联想允许从系统 BIOS 轻松更改它。
Pearson 还提到了为装备高通骁龙 SoC 的 ThinkPad X13s 引入 Linux 的支持。目前,Linux Kernel 5.20 正在强调对高通骁龙 8cx Gen3 和 ThinkPad X13s ARM 的支持。
Linux Kernel 5.18 生命周期结束
Linux 5.18 已于2022年8月下旬结束生命周期,被标记为 EOL ,这意味着该版本不会再有任何 Bug 修复和安全补丁。5.18 于 2022 年 5 月底发布是一个非 LTS 版本,只有为期三个月的支持,在维护了 19 个版本之后退役。仍想留在 5.17 版本的用户建议更新到上述的 5.18.19 版本,但官方的建议是升级到最新的稳定版: Linux 5.19 。Linux 5.19 内核系列已更新到 5.19.3 版本,带来了大量新功能,比如:
合并龙芯 LoongArch CPU 架构
支持报告 FAT32 文件的创建时间
引入 AMD “BRS” 分支采样功能
RISC-V :支持在 64 位系统运行 32 位二进制文件
支持使用 Zstd 压缩固件
但 5.19 也是非 LTS 版本,将在 2022 年 10 月下旬 EOL,如果不想频繁更换版本可以选择 Linux 5.15 LTS 版本。
Linux Kernel 5.19 生命周期结束
Linux 5.19 已于2022年10月下旬结束生命周期,在 kernel.org 上被标记为 EOL ,这意味着该版本不会再有任何 Bug 修复和安全补丁。它于 2022 年 7 月底发布,这是一个非 LTS 版本,只有为期三个月的支持,在维护了 17 个版本之后退役。仍想留在 5.19 版本的用户建议更新到上述的 5.19.17 版本,但官方的建议是升级到最新的稳定版:Linux 6.0 。Linux 6.0 内核系列已更新到 5.19.3 版本,带来了大量新功能,比如:
引入 F2FS 低内存模式,用性能减少内存占用
为 LoongArch 架构启用 PCI 和其他功能支持
为 Arm64 添加 UEFI 镜像内存和 ACPI PRM 支持
将其 H.265/HEVC 用户空间 API 提升到稳定状态
合并大量 char/misc 代码,提供 Gaudi2 支持
但 6.0 也是非 LTS 版本,将在 2022 年 12 月下旬 EOL,如果不想频繁更换版本可以选择 Linux 5.15 LTS 版本。

此版本更新内容包括:
对能量感知调度的支持,例如将任务唤醒到手机中更节能的 CPU
引入用于低功率设备的 adiantum 文件系统加密
增加了对 AMD Freesync 的支持,FreeSync 是一种支持动态刷新率的 LCD 自适应同步技术,旨在提供低显示器延迟和平滑、几乎无间断的观看体验,它还有助于在不接收新图像时降低刷新率,从而延长电池寿命。
增加了对 UDP 中的 Receive Offload 和 MSG_ZEROCOPY 的支持
在 cgroupv2 中添加了对 cpuset 资源控制器的支持
增加了对 binderfs 命名空间的支持,它允许 android 运行多个实例
增加了对 btrfs 中交换文件的支持
增加了许多新的驱动程序
其它改进
关于AMD FreeSync
FreeSync 是一种支持动态刷新的液晶显示器自适应同步技术,旨在减少因内容帧速率不同步而导致的画面撕裂和卡顿。FreeSync 由 AMD 开发,于 2014 年推出,与 Nvidia 的专有 G-Sync 形成强有力的竞争关系。
详细的更新内容可以查看这里。
Linus Torvalds of Linux 5.0
The New Features & Improvements Of The Linux 5.0 Kernel
Linux Kernel将引入安全锁定功能
经过多年以来的无数次审查、讨论和代码重写,Linus Torvalds 通过了一项 Linux 内核新的安全功能,它被称为“锁定”(lockdown)。这项新功能将作为 LSM(Linux Security Module,Linux 安全模块)包含在即将发布的 Linux kernel 5.4 中。由于存在破坏现有系统的风险,因此该功能是可选的,并非默认开启。
这一新的锁定功能主要是为了防止 root 帐户篡改内核代码,从而在用户态进程和代码之间划清界限。启用该功能后,即便是 root 帐户也无法访问某些内核功能,从而保护操作系统免受受损的 root 帐户影响。Linus Torvalds 表示,启用锁定模块后,各种内核功能都会受到限制。其中包括对内核功能的访问限制;对 /dev/mem 的读写操作的阻止;对 CPU MSR 访问的限制;以及防止系统进入睡眠状态等等。锁定功能支持两种不同模式,可用于激活不同级别的限制。“完整性”(integrity)模式将禁止用户修改正在运行的内核功能。另一种“机密性”(confidentiality)模式则会禁止用户从内核中提取机密信息。
内核锁定功能的研究始于 2010 年代初期,由现在的 Google 工程师 Matthew Garrett 牵头。该功能背后的想法是创建一种安全机制,以防止具有特权的用户(甚至是“root”帐户)篡改内核的代码。在那个时候,即使 Linux 系统采用了安全启动机制,恶意软件仍然可以通过滥用具有特殊提升特权的驱动程序和 root 帐户等来篡改内核代码。多年以来,许多安全专家一直在要求 Linux 内核支持一种更有效的方式来限制 root 帐户,并提高内核安全性。
最初提出该功能时,Linus Torvalds 本人是最大的反对者之一,他对此提出了不少批评。结果,许多 Linux 发行版开发了自己的 Linux 内核补丁,这些补丁在主线内核之上都添加了锁定功能。直到 2018 年,支持派和反对派才逐渐达成中间立场,关于锁定功能的工作也终于在今年取得了新的进展。
新功能获得批准后,也在 Linux 和网络安全社区受到了广泛欢迎,更多详情可查看公告。
Linux Kernel 5.2 正式发布
2019年7月,本来发布计划中还有一个 RC 版本,但是自 RC 7 以来的 PR 问题都不大,所以最终 Linus 觉得没有理由再专门发 RC 8 了。根据 softpedia 的总结,新版本主要更新亮点包括:
Sound Open Firmware 声音固件,它提供对 DSP 音频设备的支持;
用于挂载文件系统的新 API;
用于 ARM Mali 设备的新开源 GPU 驱动程序;
EXT4 文件系统中支持名称不区分大小写;
BFQ I/O 调度器的性能提升;
为 cgroups v2 添加了一个 freezer 控制器以释放资源;
实现了一个新的设备映射器“dust”,用于模拟具有读取失败或扇区失败的设备;
clone(2) 添加了一个 CLONE_PIDFD flag,用于在创建进程时获取 PID,它可以被 pidfd_send_signal(2) 使用,并可以为 Android 使用带来更好的监控条件;
安全方面,此版本带来了一个新的 CPU bug 基础架构,可以保护设备免受英特尔 MDS(Microarchitectural Data Sampling,微架构数据采样)硬件漏洞的影响,同时还有一个名为“mitigations=”的新的独立于架构的启动选项,以便更容易启用或禁用缓解 CPU 缺陷。
更多详情查看此处。
Linux Kernel 5.3 正式发布
Linux Kernel 5.3 稳定版是一个主要的版本,它带来了一些新特性、数十个改进和更新的驱动程序。新版本主要亮点包括:
提供了 Radeon RX 5700 Navi 系列支持
更好的 Intel Icelake Gen 11 图形支持
Intel HDR 显示支持
Intel Speed Select 支持
支持 Zhaoxin x86 处理器
使某些 Xeon 服务器上的功率调整更加容易
v5.3 还引入了一个新的 pidfd_open(2) 系统调用,该调用帮助服务管理人员处理 PID 重用问题、支持 umWait x86 指令以提高功耗效率、支持轻量级和灵活的 ACRN 嵌入式管理程序,以及支持 0.0.0.0/8 范围内的 1600 万个新 IPv 4 地址。5.3 内核系列中也包含了许多新的和更新的驱动程序,详情见发布说明。
Linux Kernel 5.4正式发布:支持exFAT和内核锁定
Linus Torvalds 宣布了 Linux 5.4 内核系列的全面可用性。该版本是一个主要版本,其添加了许多新功能,更强的安全性和更新的驱动程序,以提供更好的硬件支持。自 2019年10月初以来一直处在开发中,并一共获得了八个候选发布里程碑版本。这一系列努力让很多新功能得以被实现,首先是对 Microsoft 的 exFAT 文件系统的最初支持,现如今终于在内核中内置了该功能,以便为用户提供连接 exFAT 格式化驱动器时的即装即用体验。
同时,Linux 内核 5.4 中引入的另一个主要更改是内核锁定功能,该功能被实现为 Linux 安全模块,以限制某些应用程序访问内核。它增加了内置在内核中的新保护层,以使其能够按其创建者的意图运行软件,从而阻止了恶意行为者。另一方面,针对 Linux 游戏玩家的福音,Linux 内核 5.4 则增加了对 AMD Radeon Navi 12 和 14 GPU,AMD Radeon Arcturus GPU 以及 AMD Dali APU 支持的支持。此外,AMD Ryzen 3000 系列 CPU 获得了温度报告支持,而 AMD EPYC 微处理器改善了负载平衡。
其他一些功能还包括有,对 Intel Tiger Lake CPU 的支持;对 Qualcomm Snapdragon 855 SoC 的支持;对 Intel Lightning Mountain SoC 的支持;在 Android 上改进的应用程序内存管理;一种新的高性能 virtio 驱动程序,用于在主机和来宾之间共享文件,称为 virtio-fs;一种新的安全功能,用于检测文件篡改,称为 fs-verity,以及 dm-clone 用于实时克隆块设备。值得一提的是,该版本目前被标记为“主线”内核分支,此举也意味着它仍被视为尚未准备好进行大规模部署的预发行版本。当第一个发行点发布时,Linux 内核 5.4 将变得“稳定”并为大规模采用做好准备,而这通常会在正式发行后的一两个星期内发生。
Linux Kernel 5.5 最终删除 SYSCTL 系统调用
Linux Kernel 5.5 最终消除了支持 sysctl 系统调用的代码,该代码已被弃用了大约十年,目前对任何体系结构的现代系统都没有影响。长期以来,Linux sysctl 系统调用都不建议被使用,也不建议将其与通过 /proc/sys 公开的 sysctl 接口一起使用,这是读取/设置内核系统属性的首选方法。 Linux Kernel 5.5 的更改并未涉及 /proc/sys 支持,而只是将要把多年以来一直未使用的 Linux 上带有 sysctl 二进制接口的系统调用删除。
Linux 内核团队在邮件中表示,据了解,应该已经没有人启用 sysctl 系统调用了,不排除仍然有人在少数 defconfigs 中启用它,不过这种情形也非常少见。如果有任何用户想要这个系统调用,他们可能需要还原补丁。其实早在 2011 年,他们就想删除代码,但因需要保持兼容性,无法完全删除。那时剩下的代码是为了与旧的 C 库兼容,但是现在构建 Linux 5.5 的任何人都不想运行超级老式的 libc。
Eric W. Biederman 写了删除了该系统调用的补丁,他提到此前 “linux-next 中有一个新的 xtensa defconfig,它使系统可以调用此循环,但代码维护者回答说并非有意启用。” 从今天的 linux-next 树开始,defconfig 不再启用系统调用。
Linux Kernel 5.6 开发者已准备好应对 2038 年问题
2020年伊始,源自fossbytes的消息,Linux Kernel 5.6 的开发者已经准备好着手解决将在下一个十年到来的 2038 年问题(又称 “Y2038” 或 “Unix Y2K” 问题),Linux 5.6 也成为第一个为 32 位系统准备运行到 2038 年之后的主线内核。
2038 年问题与千年虫问题类似,它可能会导致某些软件在 2038 年 1 月 19 日 3 时 14 分 07 秒之后无法正常工作。届时,在大部分 32 位操作系统上,依据 “time_t” 标准,时间将会“绕回”且在内部被表示为一个负数,并造成程序无法工作,因为它们无法识别 2038 年,而可能会跳回 1970 年或 1901 年。现阶段还没有针对 2038 年问题的通用解决方案。Linux 5.6 已率先做好准备,并极有可能反向移植到 5.4/5.5 稳定分支。在 Linux 开发人员 Arnd Bergmann 寄给 Linus Torvalds 的邮件中,他提到,Linux Kernel 5.6 应该作为基础,使 32 位系统能够运行到 2038 年以后。他提出的 PR 包括对 time_t 的更改,即更改存储秒数(带符号的 32 位整数)。
Bergmann 表示,“我再次遍历了 time_t 的所有用户,以确保内核处于长期可维护的状态,用安全的替代方法替换了对 time_t 的所有剩余引用。该系列的一些相关部分被引入 nfsd,xfs,alsa 和 v4l2 树中。在 linux-mm 的五个分支全部合并之后,linux-mm 中的最后一组补丁将删除当前未使用的 time_t / timeval / timespec 类型和辅助函数,以确保没有新用户被合并”。由于 2038 年问题,Unix 时间戳将在 2038 年 1 月 19 日溢出,因为它无法存储带符号的 32 位整数,并且将限制更新 32 位系统。为了避免这一问题,根据 Bergmann 的说法,用户空间应用程序需要使用现代 Linux 内核系统调用,并且需要使用 GNU C Library 2.32 和 Musl libc 1.2 针对 64 位 time_t 构建用户空间。最后他还提到,64 位计算机上出现的所有 y2038 问题也适用于 32 位计算机。
Oracle 提交内核引导过程补丁使 Linux 引导提速
2020年05月03日,Oracle 团队提交的一个补丁将有望使 Linux 内核的引导时间大大缩减,平均提速 6%,最高可以提速 49%。
> Sometimes the kernel doesn't take full advantage of system memory
> bandwidth, leading to a single CPU spending excessive time in
> initialization paths where the data scales with memory size.
>
> Multithreading naturally addresses this problem, and this series is the first step.
>
> It extends padata, a framework that handles many parallel singlethreaded
> jobs, to handle multithreaded jobs as well by adding support for
> splitting up the work evenly, specifying a minimum amount of work that's
> appropriate for one helper thread to do, load balancing between helpers,
> and coordinating them. More documentation in patches 4 and 7.
>
> The first user is deferred struct page init, a large bottleneck in
> kernel boot--actually the largest for us and likely others too. This
> path doesn't require concurrency limits, resource control, or priority
> adjustments like future users will (vfio, hugetlb fallocate, munmap)
> because it happens during boot when the system is otherwise idle and
> waiting on page init to finish.
Oracle 开发者在邮件列表中指出,该补丁扩展了 padata,使其可以处理多线程作业。padata 原本只是可以用于处理多个并行单线程作业的框架,补丁添加了 padata 在 CPU 内核之间平均分配工作来处理多线程作业的能力,它会将最小工作量分配给适合处理的协作线程,并且在这些协作线程之间进行负载均衡。该补丁会推迟 Linux 引导中的 struct page init,这是内核引导过程中的一大性能瓶颈,它并不需要并发限制、资源控制或优先级调整。在各种 x86 系统上进行测试,开发者发现该补丁将延迟的初始化速度提高 63% 至 91%,而这可以将内核引导速度提高 6% 至 49%。尤其是在具有大量 RAM 的多节点环境中,性能改进更为明显。此补丁的改进同时也使启动虚拟机的时间缩减,这对于云计算环境来说非常重要,因为需要应对不断变化的容量/需求伸缩变化的情况。
Linux 5.8 即将发布
Linux 5.8-rc2 已发布,此版本的变化少于上个版本,一个值得关注的新特性是对每个索引节点的 EXT4 DAX 支持,以更好地处理持久性内存存储器上的直接访问。这个特性本应在 rc1 提供,不过因为错过了被拉取的最后期限,所以延后到了这个版本。其他的变化包括基础架构方面的修复,以及对 GPU 驱动、文件系统、selftests 等组件的修复。Linux Kernel 5.8 的部分重要更新:
针对 AMD Radeon 显卡驱动的改进
优化 SELinux与电源管理功能
在 Apple 键盘上支持交换 Fn 和 Ctrl 键
支持 Intel Tiger Lake Thunderbolt
支持 Habana Labs Gaudi 加速器
针对 Btrfs 的部分改进
针对 EXT4 和 exFAT 文件系统的代码清理和错误修复
对引导 POWER10 处理器的初始支持
2020年08月04日,Linux Kernel 5.8 正式发布。相较上一个 RC,此版本主要更新了驱动程序,增加了对一系列 Adreno GPU 芯片(如 405、640 和 650 版本)的支持,新的 Spectre 补丁以及 exFAT 改进。Radeon 驱动在此版本中也得到了更好的支持,POWER10 芯片也得到了改进。Linux 5.8 整体上的新特性包括:
内核并发处理器 Kernel Concurrency Sanitizer (KCSAN)
事件通知机制
块设备队列管理 blk-mq 中引入内联加密
私有 procfs 挂载
ARM64 支持 Shadow Call Stack 和 Branch Target Identification
BPF iterator 机制
更多完整更新内容可以查看这里。
Linux Kernel 5.9 正式发布
2020年10月12日,Linus Trovalds 宣布 Linux Kernel 5.9 正式发布。8月15日,Linus 宣布了 Linux 5.9-rc1,到现在已经历8个候选版(rc),Linus 表示,这次发布大部分是在 rc8 发行说明中已经提及的网络修复程序,大约一半的补丁(可能还有更多提交次数)来自网络方面(包括驱动程序和其他方面)。5.9首次支持 AMD RDNA 2,并且提供了更多的新硬件支持,该版本的一些更新亮点包括:
对即将到来的 AMD Radeon RX 6000显卡的初步支持
对英特尔 Rocket Lake 显卡的初步支持
对 io_uring 子系统中异步缓冲读取操作的全面支持
IBM 在 POWER10 CPU 的初步兼容
使用 FSGSBASE 指令
32位 x86 Clang 构建支持
对 x86 架构内核的 zstd 压缩支持,以加快启动时间
GPU 支持 Rocket Lake 处理器
2020年12月24日,Linux Kernel 5.9 系列宣布生命周期终止(KOL),建议用户考虑升级到 Linux Kernel 5.10 LTS 系列,Linux Kernel 5.10 LTS 近期也更新了一些功能,包括:
EXT4 文件系统的多个文件操作延迟降低
Btrfs 文件系统的 fsync()操作性能提升
支持在 EFI 系统上的 RISC-V 体系结构
不休眠的 BPF 程序和可同时在多个 flow 上传输数据
Linux 5.10 即将发布
2020年10月,在即将发布的 Linux 5.10 或将包括针对 2038 年问题(又称 “Y2038” 或 “Unix Y2K” 问题)的进一步修复。Linux 内核邮件列表显示,Oracle 文件系统开发人员 Darrick J. Wong 已提交了有关 XFS 文件系统的代码,其中添加了一个新功能以支持时间戳,直至 2486 年。
2038 年问题与千年虫问题类似,它可能会导致某些软件在 2038 年 1 月 19 日 3 时 14 分 07 秒之后无法正常工作。届时在大部分 32 位操作系统上,依据 “time_t” 标准,时间将会“绕回”且在内部被表示为一个负数,并造成程序无法工作,因为它们无法识别 2038 年,而可能会跳回 1970 年或 1901 年。

如 Phoronix 所述,XFS 支持了两项新的 on-disk meta-data 功能,具体为:分配组中现在会记录 inode btrees 的大小。这样做是为了增加冗余检查,并允许更快的安装时间。支持直到 2486 年的时间戳。这个“大时间戳”功能是对其时间戳和 inode 编码功能进行重构,以将时间戳作为 64 位纳秒计数器进行处理,并通过移位来增加有效大小。现在,这使 XFS 可以很好地克服 2038 年的问题(在那里,以秒为单位存储自 1970 年以来的时间将不再适合有符号的 32 位整数,因此无法环绕)到现在的 2486 年。使用以下命令创建新的XFS文件系统:启用 bigtime 允许的时间戳范围是 1901 年 12 月至 2486 年 7 月,而不是 1901 年 12 月至 2038 年 1 月。为了保持向后兼容,默认情况下当前未启用 big timestamps 功能。
在2020年年初,Linux Kernel 5.6 的开发者也早就准备好着手解决将在下一个十年到来的 2038 年问题。这也是第一个为 32 位系统准备运行到 2038 年之后的主线内核(上文有所表述)。为 ARM64 上的 Linux 5.10 启用了 HAVE_MOVE_PMD,可以改善 mremap() 的性能。mremap 系统调用可用于扩展/缩小现有的内存映射。早在 2018 年,大型内存区域上的 mremap 系统调用的内存管理提速大约 20 倍,但这个功能一直没有被合并到 ARM64 Linux 内核。此外,拉取请求中还提到了更多 ARM64 更新:
提高 specter -v2 在 Falkor cpu 上的缓解性能
选择 HAVE_MOVE_PMD
确保 LLVM 和 BFD 之间的链接器标志保持一致
修复损坏的版权标题
修复 KASLR 随机化线性映射等。
SM2 国密算法被 Linux 内核社区接受
2020年10月25日,有开发者发文称SM2 国密算法被 Linux 内核社区接受了。该作者表示,SM2 的补丁已经更新到了 v7 版本,这个版本的补丁最终被社区接受,目前已经合并到了 Linux 主线的 5.10-rc1,如不出意外会在 5.10 内核版本中正式发布。
国密,是国家商用密码的简称,由国家密码管理局制定算法标准,同时也制定了大量的产品及接口规范以及应用场景。随着近年来外部环境的变化和内部互联网的快速发展,IoT 领域的崛起,以及金融领域的变革。摆脱对国外技术和产品的过度依赖,建设行业网络安全环境,增强我国行业信息系统的安全可信显得尤为必要和迫切。密码算法是保障信息安全的核心技术,尤其是最关键的银行业核心领域长期以来都是沿用 3DES、SHA-1、RSA 等国际通用的密码算法体系及相关标准。
2010 年底,国家密码管理局公布了我国自主研制的“椭圆曲线公钥密码算法”(SM2 算法)。为保障重要经济系统密码应用安全,国家密码管理局于 2011 年发布了《关于做好公钥密码算法升级工作的通知》,明确要求“自 2011 年 3 月 1 日起,在建和拟建公钥密码基础设施电子认证系统和密钥管理系统应使用国密算法。自 2011 年 7 月 1 日起,投入运行并使用公钥密码的信息系统,应使用 SM2 算法”。自 2012 年以来,国家密码管理局以《中华人民共和国密码行业标准》的方式,陆续公布了 SM2/SM3/SM4 等密码算法标准及其应用规范。其中“SM”代表“商密”,即用于商用的、不涉及国家秘密的密码技术。
目前 Linux 内核已经较好地支持了 SM3 和 SM4 算法,这得益于无线局域网标准的广泛使用。但 SM2 算法和国密证书迟迟没有得到支持,也就无法基于国密来建立全栈可信和内核中的完整性验证,因此在内核中支持这一套体系也变得迫切起来。让内核社区接受 SM2 总共经过了 7 个回合。最初考虑是从 openssl 做移植,但需要移植 openssl 架构和基础设施代码,因为工作量巨大放弃。又经过几轮探讨测试之后,发现现有的 libgcrypt 已经有了完整的椭圆曲线基础算法,于是便尝试先在 libgcrypt 中实现 SM2,最终 SM2 算法作为 ECC 的一个子算法被社区接受。再之后,SM2 逐步被内核社区接受。
目前 libgcrypt 已经全面支持了国密算法 SM2/3/4,这些实现都会在下一个版本 1.9.0 正式发布。同时,作为 IMA 完整性签名的用户态工具,ima-evm-utils 对国密的支持也没有落下。最后,作者还总结了 SM2 的已知问题:
要支持国密证书验证,SM2 要么不编译,要么必须内建编译,不支持编译成模块。当然,SM2 作为一个非对称算法,只签名一个哈希或者基于国密的 IMA 验证,并没有这个限制。
IMA 签名工具 ima-evm-utils 以及内核计算文件 SM3 哈希所用的国密算法没有加 Za,这个是与规范的一点差异。
这其中值得我们关注的主要是以下公开的算法:
SM2:基于椭圆曲线密码(ECC)的公钥密码算法标准,提供数字签名,密钥交换,公钥加密,用于替换 RSA/ECDSA/ECDH 等国际算法
SM3:消息摘要算法,哈希结果为 256 位,用于替换 MD5/SHA1/SHA256 等国际算法
SM4:对称加密算法,密钥长度和分组长度均为 128 位,主要用于无线局域网标准,用于替换 DES/AES 等算法
国密证书:这里的国密证书指的是使用国密算法(SM2-with-SM3)的标准 X509 格式证书,证书使用 SM3 作为哈希算法,使用 SM2 作为数字签名算法
国密 SSL:采用国密算法,符合国密标准的安全传输协议,即 SSL/TLS 协议的国密版本
2020年12月15日,Linus Torvalds 宣布了 Linux 5.10 正式发布,这是当下最新的主线内核更新,也是最新的 "长期支持(LTS)"版本。内核开发人员计划一直维护 Linux 5.10 到 2026年(比 Linux 5.4 LTS 还多一年)。他在公告中表示,"这里面有相当多的修复,包括一些最后时刻没有修复的东西的还原,但没有什么让我觉得'我们还需要一个星期',发布过程看起来相当顺利"。此次更新中包含了许多大大小小的变化,一些功能和变化如下:
Linux 5.10 包含了一些文件系统和存储系统的改进。升级为 Btrfs fsync() 操作提供了 "显著的性能改进",并为直接 I/O 操作切换到了新的 iomap 基础设施。
EXT4的 "fast commits"支持大大提升了写入性能,并在 DAX/DIO 模式下获得了优化的文件覆盖。
"2038年 "问题已经被解决,这在上文有所提及。现在 XFS 文件系统中的时间戳将支持至 2486 年。
新的硬件支持,包括围绕英特尔 Rocket Lake 和 Alder Lake 的早期引入,对英特尔 Gen12/Xe 图形硬件的支持工作 。
支持任天堂 Switch Joy Cons 和 Pro、Sega Saturn 控制器。
Linux 5.10 允许 MIPS 处理器引导使用 zstd 压缩的内核,并允许 RISC-V 引导具有 EFI 固件的系统。
由于 I/O 请求的批量化,Linux 5.10 还拥有更快的休眠和恢复功能(在支持的地方)。
更多详细信息可查看发行公告。
2020年12月28日,长期支持(LTS)的 Linux Kernel 5.10 版本出现了 Btrfs 性能倒退的问题,在某些情况下 Btrfs 性能会急剧下降 500% 到 2000%。提交此问题的开发者表示,作为长期使用 Btrfs 的用户,他注意到在使用 5.10 内核时,一些日常 Linux 开发任务变得非常缓慢,例如解压一个大型 .tar.zst 文件,解压时间可能会从原本的 15 秒左右变成将近 5 分钟。
Btrfs(通常念成 Butter FS)是由 Oracle 于 2007 年推出的 COW(copy-on-write 式)文件系统,目标是取代Linux ext 文件系统。Btrfs 加入了 ext3/4 未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小等。目前 Btrfs 已经取代 ext4 成为 Fedora 33 桌面版中的默认文件系统,并在 SUSE、Ubuntu 等 Linux 发行版中被广泛使用。Btrfs也宣称专注在“容错、修复及易于管理”。
据悉,Linux 内核维护人员 Josef Bacik 已经在圣诞节之前找到了导致这一问题的根源,称这个问题之所以会在测试中漏掉,是“因为最近几个星期做了很多与 Btrfs I/O 性能相关的工作”。他们可能会在近期将修复补丁推送到 Linux Kernel 5.10 中,以解决此问题。尽管已经诞生了 13 年,但作为一个相对较新的文件系统,Btrfs 的使用在社区中一直存在质疑。而这次的问题无疑再次把该文件系统推上了风口浪尖。不少用户在提出该问题的帖子下评论“使用 Btrfs 多年,我已经厌倦了它的失败,最近我重建了我的文件系统并重新用回了 ext4。”
Linux 5.10.3 作为圣诞节后的首个稳定版更新发布了。主要变化是对整个庞大的代码库中的各种小 bug 进行了修复,但暂时还没有解决 Btrfs 性能严重衰退的问题,具体变更日志可以通过内核邮件列表找到。其中有一组修复值得指出:EXT4、UBIFS 和 F2FS 等使用的 FSCRYPT 文件系统加密框架出现了一点问题。这个 bug 可能会导致在添加目录的加密密钥的同时创建一个文件,从而创建重复的文件名。为修复在加密目录中出现重复文件名的问题,新的代码补丁已经被添加到 FSCRYPT,以及 UBIFS、EXT4 和 F2FS 中。这些补丁从 11 月底开始就一直在流传,但直到现在才出现在稳定树中。
Linux 5.10.8 发布,最终解决了 Btrfs 的性能问题
Linux 内核 5.10.8 已经于2021年1月18日发布,作为 Linux LTS 5.10 系列的最新版本,此次更新解决了 Btrfs 文件系统的性能问题。然而,2020年10月份的提交 "btrfs: use btrfs_start_delalloc_roots in shrink_delalloc" 引起了一个性能问题:此前在使用正常的写回路径来回收延迟分配空间时,我们会提供想要刷新的页面数,而此提交更改为刷新大量 inode,在某些情况下这个数量还会剧烈增加。这严重影响了性能。并且由于后续的 "btrfs: fix deadlock when cloning inline extent and low on free metadata space" 提交使用到了上述更改导致无法还原。经过测试,在 5.10 中解压 Firefox 的压缩文件(360MiB xz compressed/1.5GiB uncompressed)相比于在 5.9 中,要花费5到20倍的时间。这种现象在 SSD 中更明显。
因此,在 "btrfs: shrink delalloc pages instead of full inodes" 提交中,在 btrfs_start_delalloc_roots() 函数中提供要刷新的页面数,并通过 writeback_control 结构和 sync_inode() 函数来解决刷新问题。再次进行测试(256GiB of ram, 56 cores, 2TiB Intel NVMe drive),结果很不错。可以看见效果显著。此外,此次更新还包括修复使用较旧的 glibc 时 net.o 编译失败、修复硬件 TID 泄漏、使用 VMAP 堆栈修复 RTAS 机器检查、修复恢复过程中的死锁、修复 MTU 对于 XDP 太大时的错误消息等。更多详细内容请查看更新公告。
Linux 5.10 LTS 作为最新的长期支持版本在当初推出时只计划维护到 2022 年底,但在有足够多的公司介入来改善和测试之后,Linux 5.10 LTS 现在将被维护到 2026 年底。它原本只计划维护到2022年年底,而之前的内核如 Linux 5.4 LTS 将会被维护到 2024 年,甚至更早发布的 Linux 4.19 LTS 和 4.14 LTS 也会被维护至 2024 年。相比之下,Linux 5.10 LTS 的生命周期显得就很短暂,这主要是因为此前帮助测试新的候选版本和承诺使用这个内核 LTS 系列的开发者和组织的数量有限导致的。但是现在有足够的参与者加入到 5.10 LTS 中,Greg Kroah-Hartman 确认他将和 Sasha Levin 共同维护该版本直至 2026 年 12 月。这将使 Linux 5.10 LTS 获得六年的持续维护。同时,Linux 4.4 LTS 在运行六年后将于2022年年初结束支持。这对 Debian 11、以及 Android 12 操作系统等一系列使用 Linux 5.10 内核的分支系统而言都是一个利好消息。
Linux 5.11 将支持 OpenRISC 指令集架构
2020年12月22日,OpenRISC 和 RISC-V 处理器体系结构更新都已提交给正在进行的 Linux 5.11 合并窗口。OpenRISC 是 OpenCores 组织提供的基于 GPL 协议的开放源代码的 RISC(精简指令集计算机)处理器,有人认为其性能介于 ARM7 和 ARM9之间,适合一般的嵌入式系统使用。据悉,OpenRISC 目前已经投入使用了二十年,但是仍然没有任何专用的开放源 ASIC 基于该指令集架构进行开发。如今 OpenRISC 正在得到 Linux 5.11 的支持。
OpenRISC 拉取的代码带来了 LiteX SoC 控制器驱动程序以及有关 LiteRIS for OpenRISC 的其他支持。LiteX 是用于在 FPGA 上部署 Migen/MiSoC CPU/SoC 的构建器。LiteX 已经支持 PicoRV32,VexRISCV 等的软内核实现。Linux 5.11 内核主线对 LiteX OpenRISC 的支持将围绕 mor1kx 软核处理器进行。此外,Linux 5.11 还将对另一个开源指令集架构 RISC-V 添加相关更新,包括对连续内存分配器(CMA),IRQ 时间计费,堆栈跟踪,严格的 dev/mem,内核节保护等功能的支持。更多的参考请点击如下链接。
2021年2月14日消息,下面是即将推出的 Linux 5.11 版本中找到的 11 项值得关注的变化:
英特尔 IS 图形支持这是一种最受像素类游戏欢迎的技术,英特尔 Windows 上的驱动程序已经支持了一段时间,但现在 Linux 驱动程序也终于能够启用这个功能。
英特尔异步页面翻转支持是另一种开放源代码的图形性能优化技术。
对即将推出的 AMD Green Sardine 和 Van Gogh APU 带来支持。还支持 Dimgrey Cavefish,这是尚未发布的另一款 Radeon RX 6000 系列 GPU,对比当前的 Radeon RX 6800/6900「Sienna Cichlid」硬件,性能有所提高。
通过 Schedutil 获得更好的 AMD 性能,在本周修复了频率不变性性能回归之后,不仅回归问题得到了解决,而且对于许多工作负载来说,现在的情况比在 Linux 5.10 或更早版本上要好。
适用于 NVIDIA GA100 / GeForce RTX 3000 系列的 Nouveau KMS。这只是内核模式设置/显示支持,没有3D加速。因此,至少显示器能够亮起来,以使用户可以继续访问 NVIDIA 网站以安装专有驱动程序,直到开源 Nouveau 驱动程序在更高版本的内核中完全支持 Ampere。
新的 ARM 硬件支持,包括对风靡一时的 OUYA 游戏机带来支持。
Btrfs 性能改进
通用 IWLWIFI 驱动程序中的 WiFi 6E 技术支持英特尔 WiFi 6GHz 频段,与此同时 Linux 5.11 最终降低了 Intel WiMAX 的支持。
USB4和Thunderbolt支持改进,包括支持 Intel Maple Ridge 作为该公司的第一个独立 Thunderbolt 4控制器。
对英特尔 Alder Lake 以及其他 Alder Lake 设备的声音支持,以及今年晚些时候将会亮相的英特尔平台的附加功能。
系统调用用户调度,对于使用 Steam Play(Proton / Wine)在 Linux 上玩 Wine / Windows 游戏而言非常重要。
Linux Kernel 5.12 稳定版发布
2021年4月未旬,Linux Kernel 5.12 已正式发布。Linus Torvalds 在简短的 5.12 发布公告中写道:“感谢大家在上一周的耐心等待,这让我们在发布正式版 Linux Kernel 5.12 的时候感到更加愉快”。新版本内核主要变化:
提供对 Intel Xe GPU 的可变(自适应)刷新率的支持
对 Radeon RX 6000 系列的超频支持
对 Nintendo 64 的主线支持
增加 Sony PlayStation 5 DualSense 控制器驱动程序
对 CXL 2.0 Type-3 存储设备的支持
引入 KFENCE
新增动态抢占功能
优化 Clang 链接时间
改进对笔记本电脑支持等等
完整更新内容访问邮件列表。
5.13 将移除 WiMAX 支持的相关代码
2021年3月下旬消息,在 Linux 5.11 中,Linux 内核将 WiMAX 网络支持相关的代码降级到了内核中的"暂存"区域,并计划在未来将其彻底移除。而如今,官方正式确定 WiMAX 的支持将随着 Linux 5.13 的发布而被移除。WiMAX(全球互通微波访问,Worldwide Interoperability for Microwave Access)是一项高速无线数据网络标准,主要用在城域网,由 WiMAX 论坛提出并于 2001 年 6 月成形。WiMAX 能提供多种应用服务,包括最后一英里无线宽带接入、热点、移动通信回程线路以及作为商业用途在企业间的高速连线。通过 WiMAX 一致性测试的产品都能够对彼此创建无线连接并发送互联网分组数据。在概念上类似 WiFi,WiMAX 传送速率更快、传送范围距离更大,简单理解为一种经过扩展的 WiFi。WiMAX 达到的带宽及发送距离使其具有提供下列服务应用的潜力:
通过各种设备提供跨城市和国家的便携式移动宽带连接;
为"最后一英里"宽带接入提供有线电视和数字用户线路(DSL)的无线替代方案;
提供数据、电信(VoIP)和 IPTV 服务(三网合一);
长距离的通信:无线电波发送距离长,故涵盖率较佳;
作为业务连续性计划的一部分,提供互联网连接。
彼时,IEEE 802.16/WiMAX 是一项被人看好的技术,具有广阔的前景;但如今,放眼全球范围都没有多少人在采用这项技术。就连 WiMAX 论坛自己的认证产品注册表也已经下架了一段时间。尽管英特尔没有像以前那样努力参与维护,但 WiMAX 基础设施和 Intel i2400m 驱动程序已经在主线 Linux 内核中存在多年时间了。经过在内核的暂存区域中待了几个月的时间之后,WiMAX 仍然没有得到进一步维护,因此官方决定从 Linux 内核中删除相关代码。Linux 暂存区域的维护者 Greg Kroah-Hartman 已经在 Linux 5.13 的提交中将移除 WiMAX 代码加入了合并队列中。他在提交中写道:“WiMAX 代码已经死亡,没有已知的用户。它已经在暂存区域中待了 5 个月,在此过程中没有人愿意承担代码库的维护和支持,所以我们现在就把它完全删除吧。如果未来有人想要恢复它,简单的恢复这个补丁就可以了。"删除这些不再维护的代码可以减少 Linux 内核约 1.5 万行代码。
Linus 谈 Linux 中 Rust 支持:保持观望,驱动程序是首选
2021年3月消息,Linux 内核对 Rust 的支持一直是个备受关注的话题。此前Linus Torvalds曾回应称可以默认启用 Rust 支持;Linux 内核的稳定分支维护者 Greg Kroah-Hartman 也表示愿意接受用 Rust 开发 Linux 驱动,社区正在推动用 Rust 来编写内核代码的进展。针对此事,外媒 ZDNet 近日则进一步采访了 Linus 和 Greg,以询问他们的具体看法。
Rust 是一款流行的系统编程语言,将对性能的低级(low-level)控制与现代语言功能结合在一起,语法上类似于 C++,但是可以保证内存安全。目前,Debian Linux 开发者 Sylvestre Ledru 已将 Rust 版本的 Coreutils(GNU shell 的核心工具)移植到了 Linux。近年来,Rust 语言已越来越受到微软、AWS 等大厂的偏爱;这些都跟它注重内存安全的特性脱不了干系。AWS 产品经理 Samartha Chandrashekar 称,Rust 有助于确保线程安全,并防止与内存相关的错误(例如可能导致安全漏洞的缓冲区溢出)。他这一看法也得到了很多其他开发者的赞同。
目前,大约有三分之二的 Linux 内核漏洞均源自于内存安全问题。开发人员认为,理论上 Rust 可以通过使用该语言天生更安全的 API 来完全避免这些问题。Linux 开发者 Nelson Elhage 称,Linux Rust 的支持者并不是提议将 Linux 内核重写成 Rust,他们只是专注于走向一个可以用 Rust 编写新代码的世界。在 2020 Linux Plumbers 大会上,与会者曾集中讨论了 Linux 内核对 Rust 的支持可能涉及到的三个方面:内核中现有的 API、架构支持,和 ABI 与内核的兼容性问题。对此,Linus Torvalds 则表明,自己仍持一个观望的态度。“我对这个项目很感兴趣,但我认为这是由那些对 Rust 非常上头的人推动的,我想看看它最终如何在实践中发挥作用”。就个人而言,Linus 认为自己并不是一个推崇 Rust 的人,但考虑到该语言所允诺的一些优势以及其可以解决一些安全隐患的能力,Linus 对它仍持开放态度。不过 Linus 也表示,“但我也知道,有时候承诺是不会兑现的。”
在 Linux 内核中的尝试方面,Linus 指出,Rust 的首要目标应该是驱动程序。因为在那里可以找到许多不同的可能目标,且内核的这些各个部分都相当小且独立。“对一些人来说,这可能不是一个非常有趣的目标。但却是'obvious one'”。而先拿驱动程序开刀还有一个原因是,"任何对驱动程序的初步试验都只是架构方面的问题";Linus 称,很多驱动程序都只与几个目标架构有关,因此即使 Rust 代码在某些架构上不被支持,问题也不会显得很严重。
Greg 也赞同认为,驱动程序可能是第一个进行此等尝试的地方;因为它们依赖于核心内核功能,但却没有任何东西依赖于它们。此外,有些人曾向 Linus 反馈称他们根本不喜欢在用户空间中使用 Rust;并抱怨,用户空间中的 Rustification 对于未来内核的使用并不是一个好兆头。对此,Linus 则表示,内核与用户空间项目并不相同。内核“在某些方面更加困难(我们使用了很多非常奇怪的头文件,这些头文件突破了 C 的界限),但在许多其他方面却也比较容易(主要是因为内核是相当独立的,因此最终二进制文件不依赖其他项目)”。最后,Greg 总结称,"这一切都将归结于如何将用 C 语言编写的内核核心结构和寿命规则之间的交互映射到 Rust 结构和寿命规则中,以使得 Rust 中的驱动程序能够正确使用它们。为此,开发者们需要做很多细致的工作,我祝他们好运。"
虽然短时间内我们还不会看到 Linux 从 C 语言移植到 Rust 中。但鉴于人们对将基于 Rust 的用户空间程序、驱动程序,以及最终将基于 Rust 的 Linux 内核引入 Linux 操作系统的兴趣和行动力,未来几年内的发展或许值得期待。
Google 支持将 Rust 引入 Linux 内核开发
2021年4月中旬,在 Linux 内核开发邮件列表之外,Google 工程师亦在其官方安全博客中发表了关于将 Rust 引入 Linux 内核开发的看法。文中表示,尽管 C 语言是近半个世纪以来编写内核的首选语言,并且内核开发具有高标准的代码审查以及精心实施的保障措施,但内存安全漏洞仍然经常发生。因此其认为 Rust 现在已经可以引入到内核开发中,以帮助减少特权代码中潜在的 bug 和安全漏洞,同时兼顾其性能要求。此前,Google 已经允许 Rust 用于 Android 系统级代码开发。
文中谈论了 Binder 驱动的原型设计,以及在现有的 C 版本和它的 Rust 对应版本之间进行安全和性能特性的比较工作。其表示,使用 Rust 的目标不是将Linux 内核代码全部转换为 Rust,而是允许用 Rust 编写新代码,这种渐进式的方法既可以保证内核现有的高性能,也能为内核开发者提供新的工具,以提高内存安全并保证未来的性能。此外,博客还详细介绍了内核的 Rust 样本驱动,并与对应的 C 版本进行对比。最后,其表示已经将 Binder 所需要的几乎所有通用内核功能都封装在安全的Rust抽象中,并正在收集更广泛的 Linux 内核社区反馈,以将现有的 Rust 支持上游化。
红帽为 Linux 5.14 大幅优化设备映射器,最高提升十倍性能
2021年5月28日消息,红帽的工程师们对 DeviceMapper(DM,设备映射器)的代码进行了大幅的性能优化,这项改动现在已经进入了 Linux 5.14 的合并队列中。
设备映射器是一个由 Linux 内核提供的框架,用于将物理块设备映射到更高级别的虚拟块设备上。它构成了逻辑卷管理器(LVM)、软件 RAID 和 dm-crypt 磁盘加密的基础,并提供了额外的功能,如文件系统快照。设备映射器的工作原理是将数据从一个虚拟块设备(由设备映射器本身提供)传递到另一个块设备,数据也可以在转换中被修改。
该提交「dm space maps: improve performance with inc/dec on ranges of blocks 」(DM space maps:通过对区块范围的 inc/dec 提高性能)被总结为:"当我们打破 btree 节点上的共享时,我们通常需要对节点中持有的每个值增加引用计数。这可能会导致对 space maps 的大量重复调用。通过改变 space map inc/dec 方法的接口来解决这个问题,以获取要操作的相邻块的范围。"
虽然看起来这是一项很小的改动,但对性能的影响却是巨大的。对于使用大量快照的安装,这将使基本操作的 CPU 开销降低多达 10 倍。具体而言,此次更新的补丁在处理 DM 快照上,CPU 的开销可以降低 10 倍之多。除此之外另一个补丁,可以用于缓存少量的索引条目,有了这个变化,提供一个新的块相比以往可以降低 20% 的 CPU 时间。红帽的工程师们在持续改进 Linux 存储支持方面做了大量的工作,这些 DM 的改进也有助于 Stratis 存储工作。
Linux随机数生成器(LRNG)再度修正
2021年7月中旬消息,作为/dev/random的新替代品,"Linux随机数生成器"(LRNG)的工作现在已经进行到第41次修订,并且已经开发了超过5年。Stephan Müller今天发布了他对LRNG的最新补丁系列,作为他提出的处理/dev/random的新方法,同时也是对现有随机数生成器的API/ABI兼容的替代品。与目前的/dev/random相比,LRNG的目标是要快 "达130%",还有其他各种性能优化,各种加密处理的改进,可测试能力的提高,选项的更多可配置性,以及更现代的设计。
LRNG的v41补丁对初始播种代码进行了清理,将种子缓冲区归零,在熵值不足的情况下初始化熵值,加强了熵源配置,并对该随机数生成器代码进行了其他各种低级别的改进。LRNG是否/何时最终被认为可以用于主线内核还有待观察,但那些对围绕新的Linux随机数发生器实现的这一漫长旅程感到好奇的人可以在内核邮件列表中找到今天的13个补丁系列。
Linux Kernel 为支持 AV1 解码做准备
2021年8月中旬,目前市场上提供加速 AV1 编码的硬件平台数量仍然非常有限,但随着更多支持这种免版税视频编解码器编码/解码的硬件上市,Linux 内核的媒体子系统也正在准备就绪。8月10号,来自 Collabora 公司的 Daniel Almeida 发出了一个"request for comments"(RFC)系列补丁,用于在媒体子系统中为 Linux 内核实现无状态 AV1 user-space API(简称 AV1 uAPI)。
AV1 uAPI 围绕 AOMedia AV1 规范的设计和需求而建立,并且遵循媒体子系统一直在努力发展的无状态设计 (stateless design)。
随着此系列补丁的推出,"VIVPU" 也被用作虚拟驱动来展示 user-space API。VIVPU 并不尝试任何实际的解码/编码,只是为了实现 user-space API 以达到测试的目的。Collabora 也已经针对此虚拟驱动开发了一个 GStreamer 解码器。VIVPU 驱动补丁中提到:“即使没有可用的硬件或编解码器的内核 uAPI 尚未被上游接收,用户空间的实现也可以使用 vivpu 运行解码循环。这可以在早期发现错误,也使得它可以同时在内核 uAPI 上为编解码器和相应的用户空间实现进行工作”。如果对 Linux 媒体子系统围绕无状态 AV1 解码的工作感兴趣,查看此补丁。
2021年8月末旬,在 Linux 内核 30 周庆之际,Linus Torvalds 宣布推出了 Linux 5.14。他在公告中表示:所以我意识到你们一定都还在忙于所有的晚会和花哨的舞会以及所有其他的 30 周年纪念活动,但是在某些时候,你们一定对不断的浮华、烟火和香槟感到厌倦了。那件晚礼服或燕尾服也不是最舒服的东西。庆祝活动还将持续几周,但你们都可能需要从中得到喘息的机会。当这种情况发生时,我为你准备了一个东西--一个新的内核版本来测试和享受。因为 5.14 就在那里,正等着你去测验,并提醒自己所有的庆祝活动是怎么回事。Linux 5.14 带来了新的硬件支持、改进现有功能并添加了其他新的内核创新。其中一些更新亮点包括有:
核心调度支持
使用 MEMFD_SECRET 的秘密内存区域支持
围绕 Intel Alder Lake 的持续启用
Yellow Carp 和 Beige Goby AMD 图形支持
AMD SmartShift 笔记本电脑支持
Raspberry Pi 400 支持等等。
更多详情可查看发布公告。
Linux 系统补丁将禁用三星 SSD 上的 TRIM 和 NCQ
2021的9月上旬消息,三星 860 EVO SATA 固态硬盘是一款 2018 年推出的产品,而在 2019 年部分该型号固态硬盘的用户在 Linux 系统上开始遭遇硬盘问题。之后人们发现 870 EVO 型号也有同样或非常类似的故障。自此开始,Linux 工程师针对这一问题进行了漫长的调查,如今工程师证实,针对这个问题的补丁已经被送到上游进行最终部署。
根据工程师的研究调查,860 和 870 固态硬盘上的 Queued Trim 命令在英特尔、ASmedia 和 Marvell SATA AHCI 控制器上会产生问题,尤其是对较旧的 AMD 系统影响最大。因此在最新的补丁中,针对英特尔、ASMedia 和 Marvell SATA 控制器的 Queued Trims 已经被删除,而对较旧的 AMD 设备的 Native Command Queuing(NCQ)也已经被完全禁用,以对此前的硬盘故障进行修复。这已经不是三星 800 系列的固态硬盘第一次发生这样的问题了,早在三星 840/850 硬盘上就遇到过类似的问题,而三星在推出 860 时还明确表示过 860 型号的 Queued Trim 适用于 Linux。但根据如今的调查显示,三星当初的说法还是不够准确的。
NCQ 是一项基于 SATA 的技术,允许系统根据工作负荷管理数据队列和传输以获得最佳性能。而 TRIM 允许硬盘智能地释放那些经评估不再需要的空间,以便存储设备在不丢失重要数据的情况下保存。这可以防止在之前使用过的空间中进行重写,TRIM 是一项被公认为对硬盘健康有益的技术。有大量的用户仍在报告三星 860 和 870 固态硬盘与英特尔、ASmedia 或 Marvell SATA 控制器相结合的问题,根据已更新补丁的用户回报,在禁用 Queued Trim 后这些问题也随之消失。
在补丁的提交说明中指出:"许多用户报告说,三星 860 和 870 固态硬盘在与 AMD/ATI 的 SATA 控制器结合时会遇到各种问题,只有完全禁用 NCQ 才能有效避免这些问题。无论主机 SATA 适配器供应商如何,始终为三星 860/870 固态硬盘禁用 NCQ 将导致适配器的 I/O 性能下降。为了限制对 ATI 适配器的性能影响,引入 ATA_HORKAGE_NO_NCQ_ON_ATI 标志可以仅对部分适配器强制禁用NCQ。"
鉴于三星 800 系列的固态硬盘所遇到的这些问题,为了稳定性和数据安全,Linux 用户最好还是不要使用三星 800 系列的固态硬盘,已经在使用的用户最好也尽快更换其他型号的固态硬盘。
Linux 5.16 将支持更多华硕主板传感器
2021年9月下旬,一个支持通过华硕 WMI 功能访问 NCT677x 的补丁已经打上了 hwmon-next 标签,Linux 5.16 或将支持更多华硕主板上的传感器。
该补丁允许通过华硕 WMI 功能访问 NCT677x 系列驱动程序。在支持这种访问芯片方式的主板上,如果没有这个选项,驱动程序通常不会工作,因为 ACPI 会将 I/O 端口标记为已使用。现在在这种情况下将使用华硕 WMI 功能,使用 ACPI 固件接口与华硕的传感器通信。补丁还列出了随后适用于此传感器支持补丁的白名单,随着时间的推移,更多的华硕主板可能会被添加进来,这只是作为这个补丁的一部分,今年晚些时候的 Linux 5.16 合并窗口的初始列表中应该会有更多。
Facebook 持续研究 BOLT 来提升 Linux 内核性能
2021年9月下旬消息,Facebook 作为积极贡献 Linux 内核的厂商,近年来,其工程师一直在持续研究 BOLT,将此作为加速 Linux/ELF 二进制文件的方法。
BOLT 即"Binary Optimization and Layout Tool"(二进制优化和布局工具)的缩写,能够在配置文件后重新排列可执行文件,产生比编译器的 LTO 和 PGO 优化所能达到的更快性能。其最新目标之一是对 Linux 内核镜像进行优化。与对 Linux 内核进行配置文件引导优化 (PGO) 时产生的挑战类似,对 Linux 内核进行 BOLT 处理也面临着类似的复杂障碍,包括:正确地分析/采样具有相关工作负载的内核并进行优化、内核的大量代码库、模块与核心内核代码等对比。现有的 BOLT 只专注于优化 ELF 应用程序可执行文件。
在本周的 Linux Plumbers Conference 大会上,有来自 Facebook 的工程师讨论了对内核的 BOLT 处理,带来的性能提升如下图所示:

从数据可以看出,这是一项值得持续投入研究的工作,因为 Facebook 在 PGO+LTO 编译器优化之上通过 BOLT 优化获得了"两位数的速度提升"。此处的速度提升是通过优化可执行文件的代码布局来实现的,可更有效地使用硬件页面和指令缓存。如果对 Facebook 的 BOLT 优化工具感兴趣,或者对未来能够完全使用 BOLT 优化内核的前景感兴趣,可查阅 Facebook 工程师制作的幻灯片,BOLT 代码也已开源。
Linux 5.16 将支持 KVM 禁用 AMD PSF 功能
2021年9月末旬消息,在 Linux 5.16 内核中,AMD PSF 位现在将暴露给 KVM 来宾虚拟机,以便明确地禁用此 AMD CPU 功能。
PSF(Predictive Store Forwarding)是一种基于硬件的微架构优化,旨在通过预测负载和存储之间的地址依赖关系来提高代码执行的性能。现代 CPU 实现了一种称为存储到负载转发(STLF)的技术,存储的数据被直接转发到负载,不必等待它被写入内存。而 PSF 则通过推测负载结果提供性能优势,并允许后来的指令更早开始执行。
2021年 3 月,AMD 提供了一份 PSF 安全分析,认为尽管它有很小的可能性导致错误的 CPU 推测,但对于大多数应用来说仍是安全的,仍建议默认启用。因此 Linux 内核还没有启用/禁用 PSF 的接口。不过,此次提交的补丁将 PSF 位暴露给了 KVM(基于内核的虚拟机),这样来宾内核可以在需要时禁用该功能。
Linux 5.16 为 AMDGPU 驱动带来 DisplayPort 2.0 初步支持
2021年9月末旬消息,最新提交的 DRM-Next 功能更新信息透露,下一版的 Linux 内核将带来诸多功能更新;围绕 AMDGPU 驱动程序功能的工作正持续推进,计划于新年伊始在 Linux 5.16 稳定版中亮相。其中最引人注意的一个 pr,是 AMD Radeon 内核图形驱动中围绕 DisplayPort 2.0 的初步启用。
Phoronix 指出,当前一代 Radeon RX 6000 系列显卡最高仅支持到 DisplayPort 1.4,而新版内核驱动程序似乎正在为将采用 DisplayPort 2.0 的下一代 GPU 做准备。随着 Linux 5.16 的推出,在相关初步规划落实后,进一步的工作计划预计也会逐步上线。值得注意的是,英特尔的开源 Linux 图形驱动工程师也曾发布了一些补丁,致力于为他们的驱动提供 DisplayPort 2.0 支持。因此在多方努力下,预计 2022 年市场上或许会出现一些不错的 DP 2.0 采用。根据介绍,此次针对 DRM-Next 的 AMDGPU PR 的一些重点内容有:
DisplayPort 2.0 的初步支持。
更新了最新推出的 Yellow Carp 和 Cyan Skillfish 图形支持
Video Core Next(VCN)优先级处理
DCN 3.1 节电改进
一些其它 Bug 修复和代码更新,包括电源管理/BACO(Bus Active Chip Off) front、RAS 等。
完整补丁列表将于今年 11 月随 Linux 5.16 合并窗口的到来而发布。
为 Linux 5.16 准备的新版 Zstd 已就绪,最高带来 35% 的性能提升
2021年10月上旬消息,为 Linux 5.16 内核所准备的新版 Zstd 已提交至 linux-next 的合并中,以便在接下来的几周内进行更广泛的测试,如无意外我们将在下个月的 Linux 5.16 合并窗口中看到 Zstd 的更新代码。来自 Facebook 的 Zstd 维护者 Nick Terrell 最近开始重新尝试更新 Linux 内核的 Zstd 实现。前几天发布了最新的 Zstd 内核补丁(基于 Zstd 1.4.10),与现在的主线相比,该版本提供了一个更新的代码,将提供更好的性能并修复老版本 Zstd 中的大量的错误。
目前在 Linux 内核中的 Zstd 代码已经有四年的历史了(Zstd 1.3.1),因此内核中的 Zstd 代码已经严重过时了。过去这么多年以来,Zstd 在上游已经有了许多修复和性能改进。一旦内核引入此次 Zstd 更新,Btrfs Zstd 的压缩可以快 5%,Btrfs Zstd 解压可以快约 15%,SquashFS Zstd 解压也能快约 15%,F2FS Zstd 解压在读取时可以快约 20%,zRAM 解压可以快约 30%,内核 Zstd 图像解压可以快约 35%,initramfs Zstd 解压和构建能够快约 5%。
从上面的数据能够看出,这些补丁为 Linux 内核中的 Zstd 实现提供了很大的性能提升,尤其是在解压方面。除了性能上的提升,新的代码在 Zstd 中引入了一个新的封装 API,可以使代码的更新更顺利、更容易地进行。因此随着后续 Zstd 1.5.1 的发布,Linux 内核代码也会更易达到基于 Zstd 1.5.1 的状态。
Linux 5.16 将实现更好的 USB 低延迟音频播放
2021年10月上旬消息,Linux 内核开发者再次尝试增强其 USB 音频驱动程序的低延迟播放模式。据补丁描述,由于提前强行提交 URB 可能很容易触发 XRUN,因此之前的实现是通过在触发流开始之前用预先提交的无声数据来延迟提交实际数据避免的。而此次提交的补丁采取了类似于隐式反馈模式中使用的方法。URB 像以前一样在 PCM 触发开始时排队,但是在每次提交之前会检查缓冲区是否已经被填。通过这种方式,URB 的数量可以根据可用的数据动态地、灵活地变化,而不会影响到 XRUN。此外,还有一批其它的 usb-audio 补丁提交,包括限制共享时钟的速率、修复 URB 完成同步时可能出现的竞争、将自旋锁添加到 stop_urbs()、修复数据包大小计算回归等等。这些补丁都已经合并到 next 分支,如无意外,将会在 Linux 5.16 中推出。
2022年4月13日,Linux 内核 5.16 版本被标记为 EOL(生命周期结束),它不再接收内核开发人员的安全补丁、功能修复等更新内容。开发者 Greg Kroah-Hartman 发布了 Linux 5.16 的最后一个维护版本: Linux 5.16.20,并在邮件中宣布 Linux 5.16 已成为历史,建议用户升级到 Linux 5.17 :“注意,这是最后一个 5.16.y 内核版本,5.16 版本已 EOL,请移至 5.17.y 分支”。三个月前发布的 Linux 5.16 带来了多种新特性,比如:
合并改进后的 zstd,性能大幅提升
为树莓派 Compute Module 4 提供 mainline 支持
支持 AMD SEV/SEV-ES 主机内实时迁移
实现更好的 USB 低延迟音频播放
但它仍是一个非 LTS 版本,只有为期三个月的支持。如果用户正在使用由 Linux 5.16 内核驱动的 GNU/Linux 发行版,建议升级到 Linux 5.17 ,不过 Linux 5.17 也是非 LTS,将在2022年6月底 EOL。
Linux 将不再默认启用 AMD SME
2021年10月中旬消息,由于某些平台上的缺点,Linux 内核将不再默认在支持的硬件上使用 AMD 安全内存加密 (SME)。自从将 AMD SME 支持引入 Linux 内核以来,当内核中内置 SME 支持 (AMD_MEM_ENCRYPT) 时,安全内存加密都会默认激活。"AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT" 的默认设置允许开箱即用地使用安全内存加密,而无需指定任何额外的内核参数等。然而,这导致了某些平台上的启动失败,尤其是 IOMMU 以及一些图形驱动程序,不希望对内存进行加密。
默认情况下不使用 AMD SME 的更改源于相关平台问题 Raven Ridge,以及默认情况下尝试 SME 可能导致的启动失败。不过,由于 SME 需要在内核启动过程的早期阶段启用,至少目前不可能有增强的逻辑来以更健壮的方式确定何时可以在没有用户交互的情况下启用/禁用 SME。因此,随着 x86/urgent pr 进入 Linux 5.15,然后向后移植到以前的内核,AMD 内存加密将不会默认启用。如果当前内核已经包含了 AMD 内存加密代码,则仍然可以通过设置 "mem_encrypt=on "选项来启用安全内存加密。
Linux 5.15 发布,新的 NTFS 文件系统
再经过 7 个候选版本后,Linux 内核 5.15 现已于2021年11月初发布,这是 GNU/Linux 发行版的最新 LTS(长期支持)内核。主要更新内容:
新的 NTFS "NTFS3" 文件系统驱动程序,其最初由 Paragon Software 开发
KSMBD 被合并为内核 SMB 文件服务器,旨在实现高性能、支持 RDMA 和其他可以在内核空间中更容易实现的领域的高级功能,并且比 Samba 更轻巧
许多新的 RDNA2 PCI ID,可能用于 AMD Radeon RDNA2 显卡更新
对 Intel Xe HP 和 DG2/Alchemist 图形硬件的初步支持
围绕 Intel Alder Lake 的各种 PCI ID 添加和其他支持工作
AMD Zen 3 APU 温度监控终于到位,而且还更具前瞻性,Yellow Carp / Rembrandt APU 温度监控也出现在 k10temp 中
华硕 ACPI 平台配置文件支持
AMD Van Gogh APU音频驱动被合并,Steam Deck是受益于此的硬件之一
合并了 Realtek RTL8188EU WiFi 驱动程序以替换之前的 Realtek WiFi 驱动程序
PREEMPT_RT 锁定代码被合并为代表 Linux 内核的大量以前未完成的实时补丁
亚马逊的 DAMON 被合并为他们一直追求的数据访问监控框架,用于主动内存回收和其他目的
新的 "process_mrelease" 系统调用可以更快地释放死亡进程的内存
以安全的名义在上下文切换时选择加入 L1 数据缓存刷新,但考虑到性能影响,由系统管理员严格选择加入
添加了强化以允许在从内核函数返回之前清除调用者使用的寄存器,建立在 GCC 11+ 编译器端的支持之上
更多详细内容,请查看发行公告。
Linux 5.17 将正式迎来免重启更新系统固件
2021年12月30日消息,系统固件提供运行时服务,如:RAS(可靠性、可用性和可服务性)功能、UEFI 运行时服务和 ACPI 服务。目前,如果这些代码区域有任何固件代码的变化,就需要进行系统固件更新和重启。为此,英特尔在2021年9月向 Linux 内核引入了 Platform Firmware Runtime Update 和 Telemetry 驱动,以帮助用户更新固件而不需要重新启动,只不过当时相关的功能并未准备就绪。如今时隔三个月,英特尔工程师已经为 Platform Firmware Runtime Updates 和 Telemetry 驱动准备好了被命名为 "PFRUT"(两者的名称缩写)的相关技术支持,允许在支持的系统上进行固件更新,而不需要重启系统,以消除设备中断服务期间所造成的影响。
PFRUT 中的 PFRU 它允许平台固件组件即时更新而不需要重新启动系统。这样做的目的是为那些需要 "100% 时间可用" 的服务器和其他必须将停机时间保持在最低限度的设备所准备的。因为很多关键服务是需要系统一直处于运行状态,仅在有备用系统的情况下才能短暂关机或重启。这类系统不能承受与重启或关机有关的任何中断。除此之外,还有一些系统虽然能够承受重启或关机带来的影响,但可能目前正在进行的工作特别重要,因此也不能中断。PFRUT 中的 T 指的是 Telemetry(遥测)。作为 PFRUT 的一部分,该驱动用于以标准化的方式从固件中读取遥测数据。这些补丁都会被 Linux 电源管理中的 "linux-next" 分支接收,意味着这些补丁是下一个内核合并周期,也就是 Linux 5.17 中的内容,合并窗口将在 1 月中旬打开。
Linux 取消对 a.out 格式的支持并删除其相关代码
2022年1月中旬消息,在 2019 年,Linux 内核就弃用使用了几十年前的 a.out 文件格式支持,由新的 ELF 格式接管工作。时间来到 2022 年,a.out 的相关代码似乎都要从内核中删除了。Linux 一直依赖 a.out 格式,直到 90 年代中期的 v1.2,ELF 成为流行的二进制文件格式。虽然多年来 a.out 格式并未在 Linux 上广泛使用,但直到 2019 年,Linux 内核才弃用对在x86的32位上运行 a.out 二进制文件的支持。事实上,编译器和其他工具组件已经从 a.out 文件格式转移了多年。
据外媒 Phorinix报道,Borislav Petkov 提议从内核中移除对 a.out 支持的补丁,目前为止,所有响应的 Linux 上游开发人员都支持清除 a.out 支持的相关代码。一些旧的系统调用和其他未使用的内核代码也有可能在此过程中被清除。此移除补丁似乎并未进入 Linux 5.17 的合并窗口,也许将推迟到 v5.18,但无论如何,2022 年 Linux 内核都将完全退出 a.out 支持。
Linux getrandom() 获得千倍的性能提升
2022年2月下旬消息,Jason Donenfeld 是 WireGuard 的主要开发者,同时也是 Linux 内核随机数相关代码的维护者,近日在他的领导下,Linux 内核的随机数生成器代码有了巨大幅度的改进。在之前的 Linux 5.17 中,Jason Donenfeld 就在随机代码用 BLAKE2s 代替了 SHA1,由于 BLAKE2s 自带的特性,前者通常比后者更快更安全。经过测试,通过这个简单的转换就能获得 131% 左右的速度提升。
虽然在 Linux 5.17 中有了速度上的大幅提升,但 Jason Donenfeld 对此并没满足。因此在 Linux 5.18 中他对随机代码作出了更多的改进。通过查看 Linux 的 random.git 仓库的日志能够看出,开发者 Jason Donenfeld 在最近两天时间里进行了大量的代码提交。这些提交内容都将在 3 月下旬 Linux 5.18 的合并窗口启动时引入内核。在邮件中特别强调到,通过使用正在开发的最新代码,用于获取随机字节的 getrandom() 调用能够获得更好的性能。在配备英特尔 Xeon E5-2697 v2 @ 2.70GHz CPU 和 112G 内存的设备上进行 stress-ng getrandom() 基准测试后,更是获得了 8450% 的性能提升。
此次更改基本上会将之前的全局结构(实际上是 per-numa 节点结构)更改为 per-cpu 结构,这意味着快速路径上的许多锁都会消失。因此,当在具备多核的 CPU 上同时尝试 getrandom() 时,毫无疑问性能会出现提升。只不过没想到在测试中能带来 8450% 的提升。除此之外,当从 per-numa 更改为 per-cpu 后,也将不再需要被推迟到工作队列上线后才能进行。也正如我之前所说,此次改进将会为高核心数的电脑和服务器带来巨大收益。
Linux 内核升级 C 语言标准
2022年2月下旬根据 Linux 内核邮件列表的消息,社区近日讨论了是否要为内核采用现代 C 语言标准。虽然 Linux 内核在快速发展,但它同时依赖着一些非常古老的工具,其中之一就是内核代码仍在使用 1989 年版本的 C 语言标准——此标准在 30 多年前内核项目启动之前就已经编写完成。从讨论结果来看,这一情况有望在 5.18 版本内核中改变。
Jakob Koschel 在向 Linus Torvalds 递交的补丁 (Proposal for speculative safe list iterator) 中修复了内核链表相关的预测执行漏洞。起因是 Jakob 发现了一个问题,Linux 内核广泛使用由 struct list_head 定义的双向链表:
struct list_head {
struct list_head *next, *prev;
};
这种结构体通常被嵌入到其他结构体中,通过这种方式,开发者可以使用任何感兴趣的结构类型制作链表。除此之外,内核还提供了大量可用于遍历和操作链表的函数和宏。其中之一是 list_for_each_entry(),这是一个伪装成控制结构的宏。要了解如何使用此宏,请假设内核包含如下结构:
struct foo {
int fooness;
struct list_head list;
};
list 成员可用于创建 foo 结构体的双向链表,假设我们有一个叫做 foo_list 的结构声明作为此类链表的头,使用以下代码可以遍历此列表:
struct foo *iterator;
list_for_each_entry(iterator, &foo_list, list) {
do_something_with(iterator);
}
/* Should not use iterator here */
list 参数告诉宏在 foo 结构中 list_head 结构体的名称。此循环将为列表中的每个元素执行一次,迭代器指向该元素。由此导致了 USB 子系统中的一个 bug:传递给该宏的迭代器在退出宏后还能被使用。
Koschel 通过重新编写有问题的代码,以在循环后停止使用迭代器来解决问题。不过 Linus 却对补丁修复的问题表示不解,也没有看到它与预测执行漏洞的关系。Koschel 对此进行了进一步解释,对此 Linus 认为这只是一个普通的 bug。但不久之后 Linus 发现了问题的根源所在:传递给列表遍历宏的迭代器,必须在循环本身之外的范围内声明。随后,Linus 认为也许可以采用更直接的修复如块级变量声明。但 C89 不支持,而 1999 年发布的 C99 标准支持。所以 Linux 内核也许是时候转向使用 C99 标准了。Linus 说到,内核代码一直停留在 C89 的原因之一是编译器 gcc 的旧版本会出现奇怪的问题,导致初始化程序被破坏。不过现在内核要求的 GCC 最低版本已经提高到了 v5.1,那些 bug 可能不再相关了。
另一位密切关注架构编译器问题的内核开发者 Arnd Bergmann 提议直接升级到 C11 甚至 C2x,尽管他不确定 C11 是否会带来任何对内核有用的新内容。不过如果升级到 C17 或 C2x,会破坏对 gcc-5/6/7 的支持,因此升级到 C11 更容易实现,而且跨越太大内核社区未必接受。Linus 赞成了这个想法,在 Bergmann 确认应该可以这样做之后,Linus 宣布将在下一个内核版本 v5.18 中尝试使用 C11 标准。如果一切顺利,下一个内核版本使用的 C 语言标准有望升级到 C11。
Linux 内核 C 语言标准从 C89 升级到 C11 的工作在2022年3月中旬有了新进展。在将用于构建 Linux 内核的补丁集 target 由 "-std=gnu89" 快速修订为 "-std=gnu11" 后,Linus Torvalds 表示他希望尽快将其拉入下一个合并窗口(Linux 5.18),以免其他 PR 到最后才使用 C11。即将到来的 Linux 5.18 开发周期将把所使用的 C 标准升级到 C11,现在 linux-kbuild 的 kbuild-gnu11 分支已完成,它将在早期被提交到 Linux 5.18 的合并窗口。如果 Linux 5.17 在周日按时发布,该合并窗口将在下周启动。此次升级 C 语言标准的决定源于社区中关于 Linux 内核 C 标准从 C89 迁移到 C11 的讨论。到目前为止,Linux 内核的 C 语言仍使用旧的 C89 标准,因此社区成员希望升级到更现代的 C11。由于 Linux 5.15 已经将 GCC 编译器版本要求提高到 GCC 5.1,他们可以安全地开始使用 C11/GNU11 语言功能,而无需强加任何新的编译器要求。
Linux 5.18 支持更灵活的 LLVM 配置方式
2022年4月上旬消息,自从两年前支持主流化以来,使用 LLVM/Clang 而不是 GCC 构建 Linux 内核的技术一直在不断成熟,并且 Linux 内核继续可选地支持额外的 LLVM/Clang 功能。据外媒 phoronix 介绍, Linux 5.18 对 LLVM 环境变量的处理进行了改进,以处理版本化编译器二进制文件或 PATH 之外的编译器安装。ReiserFS 被正式标记为“弃用”,退出已经成为不可避免的结局。
LLVM = 1 当前用于定义 LLVM/Clang 工具变量,以使用该非 GNU 工具链构建 Linux 内核。 但是目前如果想在 PATH 之外使用 LLVM/Clang 安装,或者在 Debian/Ubuntu 和其他 Clang 二进制文件为版本后缀的发行版上使用,却并不轻松。随着 Linux 5.18 中的新改动,LLVM 的设置变得越发灵活,如果用户想要在 PATH 中定位系统的 LLVM/Clang 14 二进制文件,则可以指定 LLVM=-14。 或者想要针对 PATH 之外的编译器安装,可以设置 LLVM=/path/to-llvm。
Linux 5.19 支持经 Zstd 压缩过的固件
2022年5月上旬消息,Linux 5.19 内核即将合并可选的 Zstd 固件压缩支持选项。
从透明文件系统压缩到使用 Zstd 压缩内核映像,Linux 内核越来越多地使用 Zstd。谈到对经 Zstd 压缩过的固件的支持,使用 Zstd 压缩 Linux 固件树往往比使用现有的 XZ 稍大,但加载固件文件时的解压缩速度要快得多。目前来看,对于 Linux 5.19,使用 Zstd 压缩固件的代码似乎将被合并。截至上周末,Greg Kroah-Hartman 已将其排入driver-core-next。Zstd 压缩的固件基础设施以及自检都在 driver-core-next 的下一个排队,在 5 月底左右打开 Linux 5.19 合并窗口之前。
Zstd 固件压缩支持最终登陆 driver-core-next,这意味着它将提交到 Linux 5.19,该项功能支持将现有的 FW_LOADER_COMPRESS 拆分为通用 knob,将 XZ 固件压缩移动至新的 FW_LOADER_COMPRESS_XZ knob,同时添加 FW_LOADER_COMPRESS_ZSTD 以启用此 Zstd 压缩固件文件支持。当启用内核支持并且固件文件以 .zst 结尾时,将自动加载 Zstd 压缩的固件文件。
Linux Kernel 5.18发布
于2022年5月下旬正式发布了!该版本主要变化之一是将英特尔软件定义芯片(SDSi) 驱动程序包含到主线内核中,该功能引起了不小的争议,但英特尔尚未明确表示该驱动的具体用途:该驱动程序可能允许芯片制造商在用户支付许可证后启用新的芯片功能。硬件方面,Raspberry Pi Zero 2 W 在此版本中获得了完整的主线 Linux 内核支持;Tesla FSD 芯片进入上游;还为英特尔和AMD芯片带来了许多CPU和图形更新,支持特斯拉的全自动驾驶(FSD)芯片系统。该版本的主要新特性包括:
用于英特尔混合处理器的新硬件反馈接口 (HFI) 驱动程序
AMD EPYC 服务器的 NUMA 平衡调度程序更新
AMD HSMP 驱动程序
各种 AMD 嵌套虚拟化改进
英特尔至强处理器驱动程序支持
在 AMDGPU 驱动程序中默认启用FreeSync
Btrfs 支持编码 I/O 和更快的 fsync
带有触控栏的 MacBook Pro 的 FN 键映射
其他内容可参考社区关于 Linux 5.18 新功能的报道:
英特尔 CPU 内购功能 (SDSI)合并
支持更灵活的 LLVM 配置方式
对 exFAT 文件系统支持进行了两项关键改进
内核 C 标准从 C89 升级到 C11/GNU11
带来许多 Apple 键盘改进
随着 5.18 正式发布,5.19 的合并窗口已经打开,据 Linus 介绍:目前已经有一些 Linux 5.19 的 PR 等待处理。
Linux新闻网站Phoronix在过去八个月中一直在跟踪英特尔SDSi驱动程序的开发情况,该驱动程序将允许英特尔在用户购买许可协议后启用 CPU 中已有的功能。
英特尔Linux软件工程师David Box在9月份的Linux内核邮件列表中将SDSi描述为“激活其他硅功能的后期制造机制”,功能是通过许可证激活过程启用的。英特尔还发布了一份GitHub文档,解释了其支持SDSi的Xeon处理器“允许通过许可证激活过程配置额外的CPU功能”。SDSi 驱动程序为应用程序提供了一个接口,用于预配写入内存并用于对“功能激活负载”进行身份验证的“身份验证密钥证书”。令牌将应用于 CPU 以激活功能。
正如Phoronix在二月份英特尔的驱动程序被Linux 5.18接受时所指出的那样 - 正如英特尔的GitHub文件所暗示的那样 - SDSi可能仅限于未来的服务器和工作站处理器。例如,英特尔可以使用软件升级来为数据中心或其他工作负载定制CPU功能。该出版物的创始人兼主编乔纳森·科贝特(Jonathan Corbet)LWN.net 认为,软件定义芯片的好处对英特尔来说是显而易见的,但对买家来说却不清楚。
英特尔在2021年10月份向The Register发表的一份声明中表示,它“定期向Linux内核提交可用于未来产品的代码”,并补充说,如果它计划在未来的产品中实施该功能,它将提供更深入的解释。
Linux 5.19相关更新功能集(2022年5月)
将支持报告 FAT32 文件的创建时间
对于正在开发的 Linux 5.19 内核, FAT 文件系统将支持通过 statx () 系统调用来报告 FAT32 文件的诞生 / 创建时间。早在 2017 年,Linux 4.11 内核就添加了 statx 系统调用 ,以允许增强文件信息报告。从那时起,各种文件系统开始添加 Statx 支持,并在 Linux 的用户空间中逐步进入 Glibc 。目前这些 “扩展属性” 的 statx 系统调用已添加到 Glibc 和各种 Linux 文件系统的扩展信息位。近日,Andew Morton 分支的 “FAT 文件系统创建时间报告” 代码已成功添加到内核主线中,据外媒 Phorinix 报道,该补丁预计将在即将到来的 Linux 5.19 周期中合并。该提交则更改了在 statx 中报告 FAT16/FAT32 文件系统的创建时间。
获得近 50 万行新的图形驱动程序代码
David Airlie 发送了 Linux 5.19 合并窗口的 Direct Rendering Manager (DRM) 子系统更新。Linux 5.19 的 DRM 图形驱动程序更新包含对 AMD 和 Intel 最新版本显卡的完整驱动支持,因此代码数量有点超乎想象:更改共包含 1302 个文件,495,793 行新代码和 32,019 行删除代码。
具体的内容方面, Intel 的驱动工作主要集中在对 Arc Graphics DG2/Alchemist 的支持优化和初始 Raptor Lake 启用方面。比如为各种 DG2 笔记本 GPU 添加了 PCI ID、初始 Raptor Lake P/S 支持等等。AMD 则是为下一代 CDNA Instinct 产品和 RDNA3 Radeon RX 7000 系列显卡做准备。比如启用了各种新的 IP 块,例如 SMU 13.x、SOC21 等。
其他一些工作包括添加 eDP 支持的 Qualcomm MSM DRM 驱动程序、对 QXL 驱动程序的 AArch64 支持、Sun4i 驱动程序中的 Allwinner D1 支持、ASpeed AST 驱动程序中的 DisplayPort 支持、MediaTek MT8186 支持、Rockchip VOP2 支持以及对较小驱动程序的更改。
为XFS带来了大量的新代码
在 Linux 5.19 合并窗口期间进行了一项有关 XFS 文件系统的更新。据介绍这是一项包含了很多新代码的大更新;其中两个主要的新功能是对 Large Extent Counts 和 Logged Attribute Replay 的支持。开发者 Dave Chinner 表示,其计划将在这两个新的基础性功能之上构建 “more complex future features”。
Dave Chinner 解释称:对于即将到来的功能,需要能够在每个节点上存储数以亿计的 xattrs。Large Extent Count 功能消除了阻止这种规模的 xattr 存储的限制,当修改磁盘上的扩展计数格式时也将每个节点支持的数据扩展数从 2^32 增加到 2^47。我们还需要能够修改 xattrs 作为更大的 atomic transactions 的一部分,而不是作为 standalone transactions。Logged Attribute Replay 功能引入了允许我们在启动属性修改之前使用 intents 在日志中记录属性修改的基础架构,因此允许其他 atomic transactions 记录属性修改 intents,然后将实际修改推迟到以后进行。如果发生了崩溃,log recovery 会保证 attribute 在记录意图的 atomic transaction 的上下文中重放。
在此次合并中,有很大一部分 commit 是为了实现基本的 attribute replay 功能,以及与这个新功能相关的修复、改进和清理工作。Allison 值得感谢,因为她一直在努力让这个功能进入 XFS。还有许多其他较小的变化和改进,所以总的来说,这是一段时间以来较大的 XFS 合并请求之一。除了 XFS 将能够扩展到 40 亿个数据扩展和每个节点数十亿个 xattrs 之外,还有对实时范围核算的改进、rmap btree 搜索的改进,以及减少了 30% 的开销,xfs_scrub runtime 也减少了 15% 左右。还有其他各种改进可见 Git merge 。
RISC-V 支持在 64 位系统运行 32 位二进制文件
据外媒 Phoronix 报道,正在开发中的 Linux 5.19 内核合并了 RISC-V 架构的首轮更改,其中包含几个新功能。带来了新的 “compat” 子系统,用于在 64 位内核上运行 32 位二进制文件。这个 RV32 的支持很有意思,因为 Linux 内核一直在迎合 64 位 RISC-V ,对现代 RV32 的支持并不多。Linux for RISC-V 的另一个重大变化是 Svpbmt 对主管模式的扩展支持:基于页面的内存类型。RISC-V 的 Svpbmt 允许将内存属性直接编码在页面中。详细信息请参阅 riscv-isa-manual。还添加了对 kexec_file_load 的支持,它是基于文件的 Kexec 系统调用,依赖为内核和 initramfs 添加的 FD。此外,该合并还包含一个新的基于票据的自旋锁系统,和其他较小的修复。
龙芯 LoongArch CPU 架构的内核移植有望进入 Linux 5.19 主线
Linux 内核上游开发者正在讨论:基于 MIPS64 的 LoongArch CPU 架构的内核移植能否在 Linux 5.19 开发周期中被合并到主线。从上周末的讨论来看,答案是肯定的,但可能没有包含必要的硬件驱动程序。
龙芯 LoongArch CPU 架构的内核移植已经通过了 10 多轮的审查,以获得 Linux 内核的支持。它的要求之一在 GCC 12 中得到了满足,现在已经有一个 LoongArch 端口 —— 用于在合并内核 CPU 架构代码之前,可以获得必要的编译器支持。
不过根据内核维护者的说法,LoongArch PCI 代码存在一个问题,那就是目前还没有 review-by/signed-off 标签,还有一个问题是 irqchip 驱动程序也没有通过审查,因为它以非标准方式集成到 ACPI 和 PCI 中。LoongArch 的 ACPI 处理有点麻烦,但正在通过下一个 ACPI 标准更新来解决。无论如何,内核开发者正在确定如何进行。
从新近的讨论来看,LoongArch CPU 端口 / 架构代码可能会在月未进入 Linux 5.19 合并窗口,而启动此类系统所需的硬件驱动程序将在必要时进入最新的内核版本。为 Linux 5.19 引入 CPU 端口将解除 LoongArch 开发者向上游提交他们的 GNU C 库 (Glibc) 支持所遇到的障碍。他们对 Glibc 的支持以首先获得内核支持和用户空间 ABI 为条件。开发者希望看到 LoongArch 被合并到今年夏天晚些时候发布的 Glibc 2.38 中,为此他们需要将 Arch 代码合并到 Linux 5.19 中。
龙芯开发者迫切希望 Linux 内核能够合并他们的代码到主线 —— 即使缺少驱动程序。这是为了能够向 GNU C 库 (Glibc) 提交 LoongArch 的支持代码。他们认为,如需主线化 Glibc target,首先要有一个稳定的用户空间 ABI 来解决内核支持。但由于 Glibc 2.38 预计在2022年8月发布,LoongArch 需要先合并到 Linux 5.19,以便有足够的时间在 7 月发布,并使 Glibc LoongArch 代码在下一个版本完成。此外,现在合并 LoongArch CPU 的支持代码也减少了对 Linux 5.20 中可能出现的任何主线树变化的维护负担。据介绍,此次合并为 Linux 内核增加了 21000 行代码(未包括驱动程序),到今年夏天晚些时候 Linux 5.20 内核开发周期时,其余所需的驱动程序支持将通过审查,产生一个可启动的 LoongArch 系统。
2018年,知名 Linux 内核开发者 Arnd Bergmann 曾预测 C-SKY 将是 “我们最后一个添加到内核的新 CPU 架构”。C-SKY 是由中国开发的 CPU 架构,当时的想法是所有未来的 CPU 工作都拥抱 RISC-V。但现在看来,LoongArch 也许将是最后一个添加到 Linux 内核的新 CPU 架构。
已支持使用 Zstd 压缩固件
Linux 内核维护者 Greg Kroah-Hartman 已经开始向 Linux 5.19 提交他所负责的多个模块的重要特性 PR。随着新版本内核对驱动程序进行核心改动,现已支持使用流行的 Zstd 来压缩固件文件。该项功能支持将现有的 FW_LOADER_COMPRESS 拆分为通用 knob,将 XZ 固件压缩移动至新的 FW_LOADER_COMPRESS_XZ knob,同时添加 FW_LOADER_COMPRESS_ZSTD 以启用此 Zstd 压缩固件文件支持。当启用内核支持并且固件文件以 .zst 结尾时,将自动加载 Zstd 压缩的固件文件。
从透明文件系统压缩到使用 Zstd 压缩内核镜像,Linux 内核开始越来越多地使用 Zstd。谈到对经 Zstd 压缩过的固件的支持,使用 Zstd 压缩 Linux 固件树往往比使用现有的 XZ 稍大,但加载固件文件时的解压缩速度要快得多。多年来,一直有人提议在 Linux 内核的固件处理中增加对 Zstd 压缩的支持,以节省磁盘空间,同时提供快速的解压缩速度,并作为现有 XZ 压缩的替代方案。但这些补丁一直都没有完成,而随着 Linux 5.19 的推出,很快将会如愿提供。
对于想要使用 Zstandard 压缩算法的开发者。Zstd 压缩固件除了可以节省磁盘空间,还会提供由内核动态完成的快速解压缩。以 .zst 结尾的固件文件将由 Linux 内核的固件加载程序解压缩。
Linux 5.19 正式发布
Linus Torvalds 于2022年8月上旬发布了 Linux 5.19 , 作为 Linux 内核的最新稳定版本。发布公告中还提到这是在一台运行 AArch64 Apple M2 SoC 的 Apple MacBook 上进行的工作,这是他首次从 ARM64 笔记本电脑上发布新的 Linux 内核。Linux 5.19 带来了许多新功能,比如:
合并龙芯 LoongArch CPU 架构
支持报告 FAT32 文件的创建时间
引入 AMD “BRS” 分支采样功能
RISC-V :支持在 64 位系统运行 32 位二进制文件
支持使用 Zstd 压缩固件
获得近 50 万行新的图形驱动程序代码
除此之外还有一些不错的性能改进,详情可查看邮件公告。
联想公司预计在2022年将有 30 多个平台支持 Linux
在2022年7月举办的科索沃 DebConf22 会议上,联想内部领导 Linux 计划的 Mark Pearson 谈到了 2022 年其平台对 Linux 的支持进度,以及该公司在过去一年中的进展。其表示预计在 2022 年将有 30 多个笔记本、桌面平台支持 Linux,其中包括 L、E 和 Z 系列。新平台包括 Intel Alder Lake S/P/H、AMD Rembrandt 和 AMD Barcelo 型号。联想的 Linux 预装工作将继续专注于 Ubuntu 和 Fedora 产品,但他们也计划开始在这些设备上提供 Debian。
科技网站 Phoronix 指出,联想的 Linux 工程师在过去的一年里曾面临了面板刷新问题、WiFi 更改、英特尔网络驱动程序问题、AMD 电源问题、NVIDIA 能源认证驱动程序问题,以及供应链短缺等一系列挑战。但从好的方面来说,他们也继续与 OEM 硬件供应商建立了更密切的关系,从而提高 Linux 支持/兼容性。此外,最近由于禁用第三方 UEFI CA 证书而导致新联想系统默认不启动 Linux 的问题也被提出。它是由 Microsoft 授权提出的,但联想允许从系统 BIOS 轻松更改它。
Pearson 还提到了为装备高通骁龙 SoC 的 ThinkPad X13s 引入 Linux 的支持。目前,Linux Kernel 5.20 正在强调对高通骁龙 8cx Gen3 和 ThinkPad X13s ARM 的支持。
Linux Kernel 5.18 生命周期结束
Linux 5.18 已于2022年8月下旬结束生命周期,被标记为 EOL ,这意味着该版本不会再有任何 Bug 修复和安全补丁。5.18 于 2022 年 5 月底发布是一个非 LTS 版本,只有为期三个月的支持,在维护了 19 个版本之后退役。仍想留在 5.17 版本的用户建议更新到上述的 5.18.19 版本,但官方的建议是升级到最新的稳定版: Linux 5.19 。Linux 5.19 内核系列已更新到 5.19.3 版本,带来了大量新功能,比如:
合并龙芯 LoongArch CPU 架构
支持报告 FAT32 文件的创建时间
引入 AMD “BRS” 分支采样功能
RISC-V :支持在 64 位系统运行 32 位二进制文件
支持使用 Zstd 压缩固件
但 5.19 也是非 LTS 版本,将在 2022 年 10 月下旬 EOL,如果不想频繁更换版本可以选择 Linux 5.15 LTS 版本。
Linux Kernel 5.19 生命周期结束
Linux 5.19 已于2022年10月下旬结束生命周期,在 kernel.org 上被标记为 EOL ,这意味着该版本不会再有任何 Bug 修复和安全补丁。它于 2022 年 7 月底发布,这是一个非 LTS 版本,只有为期三个月的支持,在维护了 17 个版本之后退役。仍想留在 5.19 版本的用户建议更新到上述的 5.19.17 版本,但官方的建议是升级到最新的稳定版:Linux 6.0 。Linux 6.0 内核系列已更新到 5.19.3 版本,带来了大量新功能,比如:
引入 F2FS 低内存模式,用性能减少内存占用
为 LoongArch 架构启用 PCI 和其他功能支持
为 Arm64 添加 UEFI 镜像内存和 ACPI PRM 支持
将其 H.265/HEVC 用户空间 API 提升到稳定状态
合并大量 char/misc 代码,提供 Gaudi2 支持
但 6.0 也是非 LTS 版本,将在 2022 年 12 月下旬 EOL,如果不想频繁更换版本可以选择 Linux 5.15 LTS 版本。
该文章最后由 阿炯 于 2024-11-28 13:48:26 更新,目前是第 5 版。