Linus 批评英特尔的 LAM 代码,拒绝将其合并到内核


英特尔希望将其 LAM(Linear Address Masking :线性地址掩码) 功能合并到 Linux 6.2,但该功能被 Linus 批评了一番,并拒绝了该合并。

英特尔线性地址掩码 (LAM) 允许软件将 64 位线性地址的未转换地址位用于元数据,线性地址使用 48 位(4 级分页)或 57 位(5 级分页),而 LAM 允许将 64 位线性地址的剩余空间用于元数据。

简而言之,英特尔 LAM 在使用用户空间地址的未翻译地址位,因此它可用于用户空间内存清理和标记等元数据的多种用途,它的本质上类似于 AMD 的高位地址忽略“UAI”(Upper Address Ignore )以及 Arm 的顶部字节忽略“TBI”(Top-Bits-Ignore)功能。

英特尔在 2020 年初次对外展示 LAM,从那以后一直致力于 Linux 内核支持。11月中旬,英特尔工程师为 Linux 6.2 的 x86/mm 分支提交了大量补丁,希望将该功能代码合并到内核中。

然而,LAM 随即遭受了 Linus 的猛烈批评,不仅是内核实现代码,Linus 甚至连“LAM” 这个名称都不满意:

现在要求英特尔将这个  LAM 功能称为“Top-Bits-Ignore” (TBI) ,会不会有些太晚了?

...

整个 LAM  功能不是特定于 mm ,它可以轻松影响每个线程。

想象一下,有一个设置,其中一些线程使用标记指针,而一些线程不使用。例如,地址的高位可能包含一个仅在虚拟机中使用的标签,甚至可以让“本机”模式使用完整的地址空间,并将其自身及私有数据虚拟地放在高位。

再想象一下,使用虚拟地址掩码不仅能实现内存清理器,还能实现一种真实的分离功能(例如,JITed 代码可能基本上只能访问较低的位,而 JITter 本身可以看到整个地址空间)。

也许这不是 LAM 在 x86 上的工作方式,但它对 untagged_addr() 的更改并不是 x86 特定的。所以我真的认为这是完全错误的,除了命名之外, 它全都是一些无效的假设。事实上,这个特定于 mm 的 LAM 功能,最后只会成为代码中一个活跃的 Bug ,即使在 x86-64 上也是如此。

所以我真的认为 LAM 是一个根本性的设计错误,虽然我把它拉出来并解决了琐碎的冲突,但我又把它拉了下来,因为它的设计是错误的。

Linux 内核邮件列表讨论了对英特尔的 LAM 的 Linux 实现方式的设计更改。但 Linus 认为英特尔 LAM 代码还没有为 Linux 做好准备,因此最终没有合并代码。英特尔已提交新的 x86/mm pull ,但删除了 LAM 代码。英特尔 Linux 工程师将重新编写 LAM 代码,为 Linux 6.3 做准备。


相關推薦

2023-05-02

曾被 Linus 点名批评的英特尔 LAM(Linear Address Masking :线性地址掩码) 功能,终于合并到  Linux 6.4 中。 英特尔线性地址掩码 (LAM) 允许软件将 64 位线性地址的未转换地址位用于元数据,可用于用户空间内存清理和标记

2023-05-10

去年年底英特尔将 LAM(Linear Address Masking :线性地址掩码) 功能提交到 Linux 6.2 的合并窗口,但该功能受到 Linus 的批评并拒绝合并。在经历了一段时间的代码改进后,Linus 终于同意将 LAM 代码合并到 Linux 6.4 窗口。 但 Linus 似乎

2022-10-12

缺且昂贵,无法用合理的价格获取。他为此还公开批评了英特尔的市场营销策略——宣称 ECC 内存是为服务器和嵌入式设备服务的,导致一般用户难以购买到价格合理的 ECC 内存。 延伸阅读 Linus 新年第一怼:英特尔正在扼杀

2022-02-21

英特尔的软件定义芯片(SDSi),即我们此前报道的英特尔 CPU 内购功能,已完全准备好与  Linux 5.18 内核合并:intel_sdsi 驱动程序已排入x86 平台驱动程序的 “for-next” Git 分支。除非英特尔突然改变路线,或 Linus Torvalds 对该功

2022-10-20

Linus 前两天发布了 Linux 6.0 首个 RC 版本,他在邮件中除了介绍新版本的变化外,还呼吁内核开发者不要在合并窗口关闭前的最后期限才提交补丁,因为“在最后几天收到大量 PR 真的很烦人”。 一般来说,在一个内核版本发布

2022-08-16

x 6.0 带来了超百万行代码,这些代码主要来源于 AMD GPU 和英特尔 Habana Labs Gaudi2 支持代码。下面是该版本一些重要的变更: 合并大量 char/misc 代码,提供 Gaudi2 支持 引入 F2FS 低内存模式,用性能减少内存占用  为 LoongArch

2022-11-30

要再给他发送明显不是错误的信息。 延伸阅读 Linus 批评内核开发者赶 Deadline

2023-04-17

还买了一份 MINIX。 As and Bs 游戏搞定后,Linus 开始学习英特尔汇编语言,并在某一天向 Lars 展示了他编写的一个执行多任务处理的程序:一个任务或线程会在屏幕上写入字母“A”的流,另一个是“B”;当流 As 变成 Bs 时,上下

2021-12-13

论和修订,Linus 这时就坚定 say no。这一年里,Linus 一边批评一边拒不参与,说了不少狠话。 “我当然希望最终的 GPLv3 不会有什么明显问题,但我对这些草稿非常不满意。”不仅是 Linus,当时在 Linux 的核心开发小组, 29 个高

2024-09-21

内核。 从 Linux 6.12 开始,所有发行版都将包含实时 Linux 代码。这意味着 Linux 将开始运行在更多任务关键设备 (mission-critical devices) 和工业硬件上。 通过 ‘PREEMPT_RT’ 补丁,Linux 内核实现了完全可抢占 (fully preemptible) 特性,从

2022-10-11

交了大量针对 Linux 6.1合并窗口的内存管理(简称“MM”)代码。其中最值得注意的是多代 LRU “MGLRU” 页面回收策略和 Maple Tree 功能。 多代 LRU “MGLRU” 由 Google 开发,可用于改进 Linux 内核的页面回收策略。MGLRU 已被证明能

2023-03-07

去年我们报道了 Linux 内核拟放弃支持英特尔 ICC 编译器,如今该讨论终于有了结果。在 Linux 6.3 内核合并窗口打开的最后一天,Linus Torvalds 合并了“删除 Intel ICC 编译器支持” 补丁,从内核中移除了 Intel  ICC  编译器的支

2022-09-30

Kconfig 将启用 Rust 支持,并继续构建任何假定的 Rust 内核代码,以至少查看其是否正确构建。 2020 年 LPC (Linux Plumbers Conference) 大会上,内核开发者基本达成共识,他们不打算将已有的内核用 Rust 重写,只专注于可以用 Rust 编写

2021-11-23

urnal 》的发行量达到了一万本。Linux 系统也能同时适用于英特尔处理器、DEC 的处理器以及 Sun 公司的SPARC处理器了。Linux 跨出了一大步。 几年以后, Linux 社区的开发者已经成千上万,他们依靠邮件列表以及彼此之间制定的规