IT之家 4 月 7 日消息,一名英偉達工程師近日在 Linux 內核中提交了一個修復補丁,解決了 AMD 集成和獨立 GPU 硬體上出現的性能倒退問題。然而令人意外的是,這位工程師正是最初引入這一問題的“始作俑者”。
據 Phoronix 報導,這位英偉達工程師上周對 Linux 內核進行了修改,試圖將 PCI 基地址寄存器(BAR)空間擴展至超過 10TiB。然而,這一旨在提升擁有大記憶體空間的系統性能的改動,卻意外地將 AMD 的 GPU 錯誤地標記為“受限”,從而嚴重影響了其性能表現。所幸的是,這一問題很快被社區發現並得到修復。
據悉,此次性能衰退的根本原因是上周提交的一個旨在擴展 PCI BAR 空間的 commit。該 commit 在提升大記憶體系統潛力的同時,也間接降低了消費級 x86 設備上的內核位址空間佈局隨機化(KASLR)熵值。KASLR 是一項重要的安全特性,它通過在每次啟動時隨機化內核數據載入到記憶體中的位置來增強系統安全性。與此同時,該 commit 還人為地擴大了內核可訪問的物理記憶體範圍(direct_map_physmem_end),通常會擴展至 64TiB。
在 Linux 系統中,記憶體被劃分為不同的區域(zone),其中一種是設備區域(zone device),可以與 GPU 相關聯。此次問題的關鍵在於,當內核為 Radeon GPU 初始化設備區域記憶體時,一個名為“max_pfn”的關聯變數(代表內核可尋址的總 RAM)被人為地增加到了 64TiB。
由於 GPU 很可能無法訪問整個 64TiB 的位址範圍,這導致系統錯誤地將“dma_addressing_limited ()”標記為 True。該變數實際上限制了 GPU 只能使用 DMA32 區域,該區域僅提供 4GB 的記憶體,這就解釋了性能大幅下降的原因。
幸運的是,這一問題很快被發現並得到了修復。英偉達工程師迅速提交了修復補丁,解決了這一性能倒退問題。根據 Linux 內核的開發流程,該修復補丁預計將在 Linux 6.15-rc1 合併窗口關閉前(即今日)被合併。
這一事件也體現了開源社區的協作精神。儘管 AMD 和 Nvidia 在 GPU 市場上是競爭對手,但在開源領域,他們共同遵循“誰破壞,誰修復”的原則。據IT之家瞭解,Linux 內核作為開源專案,接受來自全球開發者的貢獻,並通過嚴格的代碼審查機制確保代碼品質。這種合作模式不僅推動了技術的進步,也促進了不同技術陣營之間的交流與合作。
隨著修復補丁的合併,預計 Linux 6.15 穩定版將在六到八周后發佈,大約在 5 月底或 6 月初。屆時,用戶將能夠體驗到修復后的系統性能,而 AMD 和 Nvidia 的 GPU 硬體也將更加穩定地運行在 Linux 平臺上。