4 月 7 日消息来自 IT 之家。一名英伟达工程师近期在 Linux 内核里提交了一个修复补丁。这个补丁解决了 AMD 集成以及独立 GPU 硬件上出现的性能倒退问题。然而让人感到意外的是,这位工程师恰恰就是最初导致这一问题出现的“始作俑者”。
英伟达工程师上周对 Linux 内核进行了修改。据 Phoronix 报道,他试图将 PCI 基地址寄存器(BAR)空间扩展至超过 10TiB。这一改动旨在提升拥有大内存空间的系统性能。然而,该改动却意外地将 AMD 的 GPU 错误地标记为“受限”,进而严重影响了其性能表现。所幸的是,这一问题很快被社区发现并得到修复。
据悉,此次性能衰退有一个根本原因。这个原因是上周提交的一个 commit,该 commit 的目的是扩展 PCI BAR 空间。这个 commit 在提升大内存系统潜力的同时,也间接降低了消费级 x86 设备上的内核地址空间布局随机化(KASLR)熵值。KASLR 是一项具有重要性的安全特性。它能够在每次启动时,将内核数据加载到内存中的位置进行随机化,以此来增强系统的安全性。在这个过程中,该 commit 还做出了一个举动,即人为地把内核可访问的物理内存范围(direct_map_physmem_end)进行了扩大,一般情况下会扩展到 64TiB。
在 Linux 系统里,内存被划分成不同的区域,其中有一个是设备区域。这个设备区域可以与 GPU 相联系。此次问题的关键之处在于,当内核给 Radeon GPU 初始化设备区域内存的时候,有一个名为“max_pfn”的关联变量被进行了人为的操作,这个变量代表着内核可寻址的总 RAM,并且被增加到了 64TiB。
GPU 很可能无法访问整个 64TiB 的地址范围,所以系统错误地将“dma_addressing_limited ()”标记为 True。该变量限制了 GPU 只能使用 DMA32 区域,而 DMA32 区域仅提供 4GB 的内存,这解释了性能大幅下降的原因。
幸运的是,这一问题很快被察觉并且得到了修复。英伟达的工程师迅速递交了修复补丁,从而解决了这一性能倒退的问题。依据 Linux 内核的开发流程,该修复补丁预计会在 Linux 6.15 - rc1 合并窗口关闭之前(也就是今日)被纳入其中。
这一事件体现了开源社区的协作精神。AMD 和 Nvidia 在 GPU 市场上是竞争对手,然而在开源领域,他们都遵循“谁破坏,谁修复”的原则。IT 之家了解到,Linux 内核作为开源项目,会接受来自全球开发者的贡献,并且通过严格的代码审查机制来确保代码质量。这种合作模式促进了不同技术阵营之间的合作。
随着修复补丁被合并,Linux 6.15 稳定版预计在六到八周之后发布。大概会在 5 月底或者 6 月初。到那个时候,用户能够体验到经过修复后的系统性能,并且 AMD 和 Nvidia 的 GPU 硬件在 Linux 平台上也会运行得更加稳定。