在这个看似不可能的故事中,我们见证了科技界的一次小插曲。一位来自Nvidia的工程师,在尝试提升系统性能时,“意外地”影响了竞争对手AMD的GPU表现。但是,就像所有好的故事一样,结局是圆满的——问题被迅速发现并解决了。
你没听错,Nvidia的工程师通过向Linux内核提交了一个补丁,解决了AMD集成和独立GPU硬件上的性能退化问题(感谢Phoronix提供的信息)。但最有趣的部分是,这个问题最初就是由这位工程师上周对内核进行一系列修改时无意间引入的。他的初衷是将PCI BAR空间扩展到超过10TiB,以支持具有更大内存空间的系统。然而,这却错误地标记了GPU的能力限制,导致其性能受到了影响。
在开源的世界里,有一个不成文的规定:打破的东西,自己来修。Linux内核作为一个开源项目,接受来自世界各地开发者的贡献,并对其进行审查。负责任的贡献者应该帮助解决因自己的更改而产生的任何问题。因此,尽管在GPU市场上AMD和Nvidia是竞争对手,但在自由/开源软件(FOSS)领域,他们之间的鸿沟被巧妙地架起了一座桥梁。
这次的问题源于一个旨在扩大PCI BAR(Base Address Register)空间的提交,这个改动间接减少了消费者x86设备上的KASLR(Kernel Address Space Layout Randomization)熵值,这是一种用于增强每次启动时内核数据加载位置随机性的安全措施。同时,这也人为地扩大了内核可访问内存的范围至通常的64TiB。由于GPU实际上无法访问这么大的内存范围,这就导致了一个变量dma_addressing_limited()被标记为True,从而限制了GPU只能使用提供4GB内存的DMA32区,这就是性能下降的原因。
术语解释:
- PCI BAR空间
:这是指外围组件互连总线上的基址寄存器空间,允许设备直接访问主存储器的一部分。增加这个空间可以提高系统性能,特别是对于那些需要大量内存的设备。
- KASLR熵值
:KASLR是一种安全技术,通过随机化内核和其数据结构在内存中的位置来增加攻击难度。熵值越高,意味着随机性越强,安全性越好。
- dma_addressing_limited()
:这是一个标志位,当设置为True时,表明GPU的直接内存访问(DMA)地址能力受限,可能需要使用较小的内存区域(如DMA32区),这会影响性能。
扩展阅读: