BIOS设置中的PCI Latency timer选项

首先什么是PCI Latency timer ?

译成中文就是:PCI延迟时钟。
这个指pci设备独占pci总线的时间,值越大,则这个设备利用带宽越充分,但是后面排队的设备就必须等待更长的时间才能开始独占pci总线并工作;所以设置大了可以提高一个设备的速度,设置小了则提高对多个pci设备的响应效率。主板一般默认是32,Omega小组推荐设置成64。

那么回望现在的主板设计,一般新平台上pci设备已经极度缩减。对只有一块pci声卡,或pci设备很少的用户,建议调大这个值以达到更好的声卡回放听感!同时也可以解决一部分创新声卡的兼容性问题。

PCI延迟计时器是一种总线控制总线控制设备的一种机制,可以公平地共享PCI总线。在这种情况下,“公平”意味着设备不会使用如此大的可用的PCI总线带宽,而其他设备无法完成所需的工作。

它的工作原理是,每个可以在总线主控模式下运行的PCI设备都需要实现一个计时器,称为延迟计时器,它限制了设备可以容纳PCI总线的时间。当设备获得总线所有权时,计时器开始计时,并以PCI时钟的速度计数。当计数器达到零时,设备被要求释放总线。如果没有其他设备等待总线所有权,它可能会再次抓取总线并传输更多的数据。

如果延迟计时器设置得太低,PCI设备将不必要地中断它们的传输,从而降低性能。如果设置得太高,需要频繁总线访问的设备可能会溢出缓冲区,从而丢失数据。
所以从理论上讲,有一种折衷方案可以在两者之间达成,所有设备都能获得良好的性能,并有合理的保证,他们将及时获得BUS的使用权。

以下是我对你处理计时器的各种方式的最佳状况:

坏的方法是:不要设置它们(在所有情况下,我都在未设置中看到了这个结果)。

更好的方法是:选择一个值(我的代码中使用了48),并将所有的device和bridges设置成这种状态。

从理论上讲,最好的方法是:

对于每张卡片,请阅读mingnt和maxlat值,并计算以下内容:

  • latency_multiplier = (8 for 33MHz) (一个四分之一秒的PCI时钟的数量。)
  • min_grant_clocks= latency_multiplier * min_gnt
  • max_latency_clocks= latency_multiplier * max_lat

然后,计算每个设备所需的延迟计时器值,例如:

  1. 每张卡片的延迟计时器应该大于该卡的mingrant时钟。
  2. 每个卡片的延迟计时器应该设置为尽可能高。这是因为延迟计时器将在它过期时截断pci总线主控周期,因此太低的设置会影响性能。
  3. 所有的延迟计时器都应该设置得足够低,如果A、B和C都开始进行最大长度传输,那么在maxlatency时钟运行之前,D仍然会得到总线。所以,A.latency_timer + B.latency_timer + C.latency_timer < D.max_latency_clocks;   当然,设备制造商可能在计算中包含了自己,在这种情况下,需求将是:A.latency_timer + B.latency_timer + C.latency_timer + D.latency_timer < D.max_latency_clocks,这更容易计算,因为a+b+c+d可以简单地称为systemmax潜伏期。如果它比任何一张卡的上号时钟都大,你可能会有麻烦。

 

阅读更多

没有更多推荐了,返回首页