英特爾希望將其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 做準備。
審核編輯 :李倩
-
英特爾
+關注
關注
61文章
9983瀏覽量
171944 -
代碼
+關注
關注
30文章
4801瀏覽量
68734 -
Lam
+關注
關注
0文章
6瀏覽量
6731
原文標題:Linus批評英特爾的LAM代碼,拒絕將其合并到內核
文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論