我重写了整个问题,人们显然不理解它。
RDTSC用于计数CPU周期,并且随CPU节流而变化。
当前,RDTSC不会随CPU限制而变化。
一些旧的应用程序期望RDTSC随CPU节流而变化。
我如何使RDTSC给予他们期望的结果?
我不想分析代码,不想重写大量代码,我不想强迫用户弄乱BIOS或内核权限,我只想让旧版应用程序按需工作。
简而言之,轻按一下开关就无法做到
英特尔开发人员手册3B,第17章明确阅读
不变的TSC将在所有ACPI P-,C-中以恒定速率运行。和T状态。这是前进的架构行为。
这是告诉您没有办法切换回以前的行为的另一种方法。
但是,如果您真的喜欢它,可以尝试一下。
rdtsc
从IA32_TIME_STAMP_COUNTER获取其值,该值是可写的。
因此,您可以在rdtsc
不更改任何程序的情况下“伪造”读取的内容,但是需要驱动程序。
更改IA32_TIME_STAMP_COUNTER以调整内部时钟计数可能并不容易。
我不记得是否有性能事件自复位以来对内部时钟进行计数,如果存在,那么理论上您只需要读取该值并写入IA32_TIME_STAMP_COUNTER即可。
较新的CPU还支持IA32_TSC_ADJUST,可用于相对调整TSC:从IA32_TSC_ADJUST添加/减去的任何内容都从IA32_TIME_STAMP_COUNTER添加/减去的内容。因此,您可以减慢或加快计数器的速度。
无论哪种方式,您都需要:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句