Windows 8 RTC Bug被确认之后,超频平台HWBot封杀了所有基于它的跑分成绩,智利网站ocaholic.ch则研究发现似乎只有Intel平台才受影响。
那么,这个Bug究竟是怎么回事儿?Windows 8到底在使用什么计时器?AMD平台真的那么“清白”么?能否不等微软而自己解决这个问题?ocaholic.ch这些天又对此做了更详尽的研究,还找来了CPU-Z的作者Franck D.合作,利用了他提供的计时器和频率读取工具。
【背景知识】
ACPI计时器(ACPI Timer):也叫PM计时器,是一种外部硬件计时器,固定频率3.579545MHz。
HPET计时器(HPET Timer):高精度事件计时器,也是外部硬件计时器,固定频率14.31818MHz。
RTC计时器(RTC Timer):实时时钟计时器,是软件计时器,需要读取硬件计时器来计算。它是Windows和据大多数软件衡量时间的参考时钟。
TSC计时器(TSC Timer):时间戳计数计时器,是基于硬件的计时器,但频率可变。以前它就等于处理器频率,在早些年不是问题,但后来处理器不断加入会降低频率的扩展频谱、电源管理等功能,就有问题了,于是后来设计的时候将其改为和处理器频率相独立。
QPC计时器(QPC Timer):查询性能计数计数器,是一个可访问高分辨率计时器的原生Windows API,用来计算已流逝时间。换言之,它也是读取硬件计时器的软件计时器。它最初使用TSC计时器,但后来改成了使用ACPI、HPET之类的固定频率计时器。
DMI频率:也叫总线频率,Intel平台上的BCLK,AMD平台的HTT,俗称外频。也是固定的频率,但是可以在BIOS、Windows里自行更改。
【Intel Windows 8平台实测】
不改变总线频率,所有计时器都表现正常,给出了各自的频率和时间。
在Windows 8系统中,将总线频率从100MHz降至95MHz,ACPI、HEPT计时器不变,但是RTC、QPC计时器都不正常了。
接下来在BIOS里将总线频率改为95MHz并启动,所有计时器的时间都是正常的,但是注意QPC计时器的频率从3.42MHz降低到了3.25MHz,简单计算可知其变化幅度就是总线频率的5%。
这不但证明RTC计时器的变化仅仅是在Windows里改变频率才受影响,也说明QPC计时器是以DMI频率为计时源的。
在转向AMD平台之前,我们不妨猜测:
1、RTC、QPC计时器使用相同的硬件源(计时器或者频率)。
2、硬件源对总线频率的变化很敏感。换言之,Windows 8则似乎使用的是内部硬件计时器或者直接用DMI频率,而不是用外部计时器。