创新这个词在科技行业的使用频率几乎和革命一样高,因此很难区分夸张的说法和真正令人兴奋的东西。 Linux 内核被称为创新,但也有人称它为现代计算中最大的黑客行为,是微观世界中的庞然大物。
抛开营销和建模,Linux 可以说是开源世界中最受欢迎的内核,在其近 30 年的生命周期中,它带来了一些真正的变革。
Cgroups (2.6.24)
早在 2007 年,Paul Menage 和 Rohit Seth 将深奥的 控制组 (cgroups) 功能添加到内核中(当前 cgroups 的实现是 Tejun Heo 的重写。)这项新技术最初被用作一种确保特定任务集的服务质量的方法。
例如,您可以为与您的 Web 服务器关联的所有任务创建一个控制组定义 (cgroup),为常规备份创建另一个 cgroup,以及为常规操作系统要求创建另一个 cgroup。 然后,您可以控制每个 cgroup 的资源百分比,以便您的操作系统和 Web 服务器获得大部分系统资源,而您的备份进程可以访问剩余的任何资源。
然而,cgroups 最出名的是它作为当今云驱动技术(容器)的角色。 事实上,cgroups 最初被命名为 进程容器。 当它们被 LXC、CoreOS 和 Docker 等项目采用时,这并不令人惊讶。
闸门打开后,术语容器名副其实地成为 Linux 的代名词,而基于微服务风格的基于云的“应用程序”的概念迅速成为常态。 如今,很难摆脱 cgroups,它们太普遍了。 每个大型基础设施(可能还有您的笔记本电脑,如果您运行 Linux)都以有意义的方式利用 cgroups,使您的计算体验比以往任何时候都更易于管理和更灵活。
例如,您可能已经在计算机上安装了 Flathub 或 Flatpak,或者您可能已经开始使用 Kubernetes 和/或 OpenShift 在工作中。 无论如何,如果术语“容器”对您来说仍然模糊不清,您可以从 Linux 容器幕后花絮 中获得对容器的实践理解。
LKMM (4.17)
在 2018 年,Jade Alglave、Alan Stern、Andrea Parri、Luc Maranget、Paul McKenney 和其他几位人士的辛勤工作被合并到主线 Linux 内核中,以提供正式的内存模型。 Linux 内核内存[一致性]模型 (LKMM) 子系统是一组描述 Linux 内存一致性模型的工具,以及生成用于测试的石蕊测试(特别是 klitmus)。
随着系统在物理设计上变得越来越复杂(添加了更多的 CPU 核心,缓存和 RAM 增加等等),它们更难知道哪个 CPU 需要哪个地址空间以及何时需要。 例如,如果 CPU0 需要将数据写入内存中的共享变量,而 CPU1 需要读取该值,则 CPU0 必须在 CPU1 尝试读取之前写入。 同样,如果值以某种顺序写入内存,那么人们期望无论哪个 CPU 正在进行读取,它们也会以相同的顺序读取。
即使在单个 CPU 上,内存管理也需要特定的任务顺序。 像 x = y 这样的简单动作需要 CPU 从内存中加载 y 的值,然后将该值存储在 x 中。 将存储在 y 中的值放入 x 变量不能在 CPU 从内存中读取该值之前发生。 还有地址依赖关系:x[n] = 6 要求在 CPU 可以存储六的值之前加载 n。
LKMM 帮助识别和跟踪代码中的这些内存模式。 它部分地使用一个名为 herd 的工具来完成此操作,该工具定义了内存模型施加的约束(以逻辑公理的形式),然后枚举所有与这些约束一致的可能结果。
低延迟补丁 (2.6.38)
很久以前,在 2011 年之前,如果您想在 Linux 上进行“严肃的” 多媒体工作,您必须获得低延迟内核。 这主要适用于在添加大量实时效果时进行 音频录制(例如对着麦克风唱歌并添加混响,并在耳机中听到您的声音,而没有明显的延迟)。 有一些发行版,例如 Ubuntu Studio,可以可靠地提供这样的内核,所以在实践中,这不是很大的障碍,只是在选择您的发行版作为艺术家时的重要注意事项。
但是,如果您没有使用 Ubuntu Studio,或者您需要更新内核,而您的发行版还没有完成,那么您必须转到 rt-patches 网页,下载内核补丁,将它们应用于您的内核源代码,编译并手动安装。
然后,随着内核版本 2.6.38 的发布,这个过程就结束了。 Linux 内核突然间,仿佛魔术一般,默认情况下内置了低延迟代码(根据基准测试,延迟至少降低了 10 倍)。 不再下载补丁,不再编译。 一切都正常工作,这仅仅是因为 Mike Galbraith 实施了一个小的 200 行补丁。
对于全世界的开源多媒体艺术家来说,这是一个游戏规则改变者。 从 2011 年开始,事情变得如此之好,以至于在 2016 年,我挑战自己 在 Raspberry Pi v1(型号 B)上构建一个数字音频工作站 (DAW),并发现它出奇地好用。
RCU (2.5)
RCU 或 Read-Copy-Update 是一种计算机科学中定义的系统,允许多个处理器线程从共享内存中读取。 它通过延迟更新来实现这一点,但也将其标记为已更新,以确保数据的使用者读取最新版本。 实际上,这意味着读取与更新同时发生。
典型的 RCU 周期有点像这样
- 删除指向数据的指针,以防止其他读者引用它。
- 等待读者完成他们的关键流程。
- 回收内存空间。
将更新阶段分为删除和回收阶段意味着更新程序立即执行删除,同时延迟回收,直到所有活动的读者完成(通过阻止他们或通过注册一个在完成时调用的回调)。
虽然读取-复制-更新的概念不是为 Linux 内核发明的,但它在 Linux 中的实现是该技术的一个定义性示例。
协作 (0.01)
关于 Linux 内核创新的最终答案将始终是,最重要的是,协作。 称其为良好的时机,称其为技术优势,称其为可破解性,或者只是称其为开源,但 Linux 内核及其启用的许多项目都是协作和合作的光辉典范。
它远远超出了内核的范围。 来自各行各业的人都为开源做出了贡献,可以说因为 Linux 内核。 Linux 过去是,并且直到今天仍然是 自由软件 的主要力量,它激励用户将其代码、艺术、想法或仅仅是他们自己带到一个全球性的、富有成效的和多样化的人类社区。
您最喜欢的创新是什么?
此列表偏向于我自己的兴趣:容器、非统一内存访问 (NUMA) 和多媒体。 我肯定已经从列表中遗漏了您最喜欢的内核创新。 请在评论中告诉我!
1 条评论