Windows 7 QueryPerformanceFrequency返回2.4 MHz-ish?

时间:2011-05-04 17:47:07

标签: windows performancecounter

我在各种操作系统上运行一些计时代码。我注意到QueryPerformanceCounter

的结果有以下模式

标准Windows XP使用处理器频率,这意味着它正在使用RDTSC。

Vista使用HPET,14,318,180 Hz

使用/ usepmtimer的任何Windows版本都使用ACPI时钟,3,579,545 Hz

Windows 7使用未确定原点的时钟,返回2.4到2.6 MHz左右的不同数字。

有人知道Windows 7默认使用的是什么时钟吗?为什么它甚至比ACPI时钟慢?有没有办法强制Windows 7使用HPET?

2 个答案:

答案 0 :(得分:4)

Windows 7将根据可用的处理器/硬件在启动时选择不同的QPC源 - 我相信SP1中也会有相应的变化。

Vista的变化很可能是出于AppCompat的原因,因为在读取RDTSC的多核CPU上,它们不能保证同步,因此在多个CPU上安排的应用程序有时会看到QPC倒退而且会变得怪异进行。

答案 1 :(得分:3)

好的,这只是部分答案,因为我仍在确定它,但这个2.x MHz频率等于标称TSC速度除以1024.

尝试使用您的QPF结果和您自己的CPU速度进行数学计算,它应该是正确的。

我最初认为它是HPET费率的一个分区,但似乎并非如此。

现在的问题是:LAPIC定时器以系统总线速率运行,但TSC也是如此(在应用mult coeff之前),因此我们不知道在最终分割之前使用了什么计数器(可能是TSC / 1024)或BUS /别的东西)但我们知道它使用的是主板水晶(驱动总线的那个)

听起来不错的是,某些MSDN文章似乎暗示LAPIC计时器几乎没有使用(管理程序/虚拟机除外),但考虑到HPET由于许多实现问题而无法兑现其承诺,以及大多数新平台都有一个不变的TSC,它们正在改变方向。

我没有找到微软关于Win7中使用的新源的任何正式证据,但我们不能完全统治HPET,因为即使它没有在定时器模式下使用,它的计数器仍然可以读取(例如:通过QPF)但是为什么要分开它的速率然后降低它的分辨率呢?