英伟达(Nvidia)工程师近日向Linux内核推送修复程序,成功解决了AMD集成显卡与独立显卡出现的性能衰退问题。更具戏剧性的是,这位工程师正是上周通过内核修改意外引发该问题的始作俑者——当时他试图将PCI BAR空间扩展到10TiB以上,却错误地将GPU标记为受限状态导致性能下降,所幸问题被及时发现并修复。
在开源生态中,修复自己引入的问题已成潜规则。Linux内核作为开源项目接受全球开发者提交的代码修改,相关贡献者有责任解决由其改动引发的问题。尽管AMD与英伟达在GPU市场存在竞争关系,但自由开源软件(FOSS)为两者搭建了合作桥梁。
该问题源于一项旨在为超大内存系统扩展PCI BAR空间至10TiB以上的提交。这项改动间接降低了消费级x86设备的KASLR熵值(该参数决定内核数据每次启动时加载到内存中的随机性以提升安全性),同时人为将内核可访问内存范围(direct_map_physmem_end)扩大到64TiB。
Linux系统将内存划分为不同区域,其中包含可与GPU关联的“zone device”区域。当内核为Radeon显卡初始化该区域时,代表内核可寻址内存总量的变量(max_pfn)被人为提升至64TiB。由于GPU实际无法访问完整的64TiB范围,系统错误地将dma_addressing_limited()标记为真值,迫使显卡只能使用仅提供4GB内存的DMA32区域,从而引发性能衰退。
该修复程序将在Linux 6.15-rc1合并窗口关闭前完成审核。按照每6-8周发布新版内核的节奏,稳定版Linux 6.15预计将于5月下旬或6月初推出。