我重写了整个问题,人们显然不理解。
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。所以你可以减慢或加快计数器的速度。
无论哪种方式,你都需要:
- 创建一个驱动程序以交付给您的用户。可能没有安装它的权限。
- 要了解 CPU 的确切限制,与 gudok 答案的投票计数相反,性能计数器寄存器是唯一的方法。除非您想挂钩操作系统电源管理器功能/事件并进行有根据的猜测。
- 将该节流映射到TSC value.
- 选择更新频率TSC(重要)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)