扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
解决一个问题,发现另一个
一段时间后,我发现禁用 AGP 可以使 NVIDIA 驱动程序运行正常,但有一点慢。尽管不想这样做,但目前驱动程序的版本允许关闭 AGP,这可以在 XF86Config 中简单地添加一行来实现。关闭 AGP,我将视频的内存带宽降低了 4x,但是相当慢的 3D 仍然比根本无硬件 3D 加速快很多。在禁用 AGP 后,终于有了一个稳定的系统!然而,这种临时解决方案又造成另一个问题。每当运行 3D OpenGL 动画,声音回放会变得极端扭曲并且断断续续。唷!
幸运的是,能够找到解决声音问题的方案。用 setpci 实用程序为 PCI 设备设置较理想的等待时间。过一会儿,我会向您演示具体的解决方案 -但首先介绍一些背景知识。
您可能知道,PCI 总线是共享资源 - 所有 PCI 卡通过总线轮流进行通信,通常情况下,一切都正常。但由于 PCI 总线是具有有限带宽(虽然通常情况下足够)的共享资源,某个 PCI 卡可能会对系统中的其它 PCI 卡产生负面影响。例如,如果 PCI 卡 A 正在通过总线发送数据,同时,PCI 卡 B 也想发送数据,这会发生什么情况?卡 A 是优雅地让出总线,还是继续进行数据传输 -如果这样,要多长时间?
PCI 等待时间计时器
回答这个问题与每个 PCI 设备的配置设置,PCI 总线等待时间计时器,密切相关。通常,Linux 驱动程序为系统中的每个 PCI 设备设置了合适的 PCI 总线等待时间计时器值,大多数情况缺省设置是足够的(如果不是最优),所有设备相处融洽,系统工作正常。PCI 总线等待时间计时器可以取 0~248 之间的值。如果某个设备的设置为 0,那么当另一个设备要传输数据时,它会立即释放总线。如果设备的设置为 248,那么在停止之前会持续使用总线较长时间,而另一个设备等待轮到。
如果所有设备都有相对较高的 PCI 总线等待时间计时器设置,并且有大量数据正在通过总线发送,那么 PCI 卡通常在取得总线控制权且开始发送数据前,会等待较长一段时间。然而,一旦取得总线控制权后,在将总线释放给其它设备之前,它们会通过总线突发传输大量数据。这正是高的 PCI 总线等待时间计时器设置不但增加了等待时间(通过总线发送数据时的延迟)而且也 增加了有效带宽的原因。由于每个设备可以不中断地通过总线突发地传输大量数据,所以可以更加有效地使用 PCI 总线,并且 PCI 设备可以传输更多的数据。
另一方面,如果所有 PCI 设备具有低的 PCI 总线等待时间设置,那么当另一块卡需要传输数据时,它们会很高兴地放弃总线。这导致相当低的数据传输等待时间,因而没有设备会长期控制总线,造成其它设备等待。所有这些的负面影响是当两个或多个 PCI 设备同时要使用总线时,低的 PCI 总线等待时间设置减少了有效的 PCI 总线带宽。这种现象的发生是由于突发的大量数据传输很少发生,而且总线控制权切换频繁,增加了开销。
大多数 Linux 分发版包含称为 pci-utils 的工具,该工具允许您查看和改变 PCI 设备的等待时间设置。要查看当前 PCI 设备的等待时间设置,请输入:
|
输入该命令将显示所有 PCI 设备的非常详细的信息。每个设备的 PCI 等待时间设置在第 3 行上列出,正好在 IRQ 设置之前。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者