正在對主線 Linux 6.4 內核進行修復,並且還標記為向後移植到現有的穩定內核系列,以修復英特爾混合系統的 x86 拓撲報告。對於 Meteor Lake 筆記本電腦,內核中的拓撲錯誤變得更加明顯,目前英特爾內部測試筆記本電腦可以報告系統具有 11 個 CPU 插槽,而不是一個 CPU 插槽中包含的正確數量的內核。
雖然自 2021 年底以來英特爾混合 CPU 設計已經很普遍,但 Linux 內核到目前為止還沒有正確處理“smp_num_siblings”變量,該變量又傳播到用戶空間並最終可能報告不正確的信息。在即將推出的 Intel Meteor Lake P 平台的情況下,此時使用通用 lscpu 命令的 Linux 內核會報告系統有 11 個 CPU 插槽,每個插槽都有一個內核。實際上,它是一台總共有 16 個內核的單路筆記本電腦。
除了出於參考目的將錯誤信息傳播到用戶空間之外,這種不正確的 smp_num_siblings 處理最終可能會對 Linux 內核調度程序決策產生影響。正如英特爾工程師張銳評論的那樣,“這也有望讓調度程序做一些相當不穩定的事情。”
他進一步解釋了這個未決的補丁:
“傳統上,系統中的所有 CPU 都有相同數量的 SMT 兄弟。隨著混合處理器的變化,一些邏輯 CPU 有一個兄弟,而另一些則沒有。
今天,當每個 CPU 線程被引入時,CPU 引導代碼設置全局變量 smp_num_siblings最後啟動的線程將用 *that* 線程的兄弟姐妹數覆蓋它。最後啟動的線程將“獲勝”。如果線程是 Pcore,smp_num_siblings==2。如果它是 Ecore,smp_num_siblings==1.
smp_num_siblings 描述*系統*是否支持SMT。它應該指定所有內核中SMT線程的最大數量。
確保smp_num_siblings代表系統範圍的最大值通過不斷增加其價值來增加兄弟姐妹的數量。永遠不要讓它減少。
在 MeteorLake-P 平台上,這修復了 Ecore CPU 在任何 cpu sibling map 中都沒有更新的問題,因為在探測 Ecore CPU 時系統被視為 UP 系統。”
該補丁昨天被 TIP 的 x86/urgent 分支選中。反過來,這可能會在周末作為緊急修復提交給 Linux 6.4 內核。該補丁也被標記為向後移植到現有的 Linux內核穩定版本以確保在 Intel 混合平台上正確報告 SMP 兄弟計數。