AMD AGP Linux内核补丁

AMD软件架构师Richard Brunner解释了Linux内核中,当高级推测缓存与AGP显卡冲突时,这个Bug是如何产生的,并提供了一个解决它的补丁。

AMD一直与SuSE的Andrea Arcangeli、Andi Kleen和Dave Jones合作,研究Linux内核中一个看起来像是缓存属性冲突的Bug,该Bug在新版本的AMD Athlon处理器(AthlonXP和AthlonMP)中被暴露出来。好消息是,短期修复很容易实现,并且一些长期修复可以做得更好。

x86架构允许对标记为写回缓存的内存进行许多重要的性能优化。其中一个重要的优化是允许处理器推测性地读取内存并将其缓存。更新的AMD处理器,例如AthlonXP和AthlonMP,利用了对推测性读所有权访问(RFO)的积极写回缓存优化。当Linux AGPGART驱动程序将分配的物理DRAM页面映射到光圈物理页面时,就会发生缓存属性冲突。但是,数据损坏通常不会发生,直到一个面向图形的线程开始写入图形光圈。这会导致数据损坏,因为并非所有软件和处理器都将内存视为写回,因此缓存一致性协议无法帮助确保正确性。

理论上,在内核中存在许多可能发生此冲突的情况。但是,AMD已经看到,在Linux内核和AMD系统中,当存在AGP卡并且AGPGART驱动程序向内核请求页面以映射到图形光圈中时,发生的情况最多。请注意,如果AGPGART驱动程序在从内核分配页面时刷新所有处理器的缓存,则问题不会得到解决。简单地避免使用4MB页面(通过使用启动行选项 mem="nopentium")也无法解决该问题。

一个简单的、短期的解决方案,不会对内核造成重大更改,需要通过对arch/i386/kernel/setup.c进行简单补丁来“约束”Athlon推测逻辑。AMD已经对一个内核补丁进行了严格的测试,并且到目前为止没有发现任何失败。我们正在进行更多的测试,但相信该补丁已经准备好公之于众。它位于 ftp.suse.com/pub/people/ak/v2.4/amd-adv-spec-caching-disable-2.4.19pre9-1

最好的解决方案包括修复内核向需要非标准缓存属性的分配器提供页面的方式,以及修复这些分配器的请求大小。分配器不应一次分配一个页面,而应在一次调用中尽可能多地请求,并从这些更大的集群中返回内存。一个在2.4内核中执行所有这些操作的实验性补丁是可用的。

AMD在幕后与关键内核开发人员和Linux发行版合作,以最大限度地减少此内核Bug的影响。我们希望通过提供大量在线详细信息,并提供随时可用的补丁,是以正确的方式让社区了解这一点。

© . All rights reserved.