有什么方法可以触发RDTSC的旧模式?

加速器

我重写了整个问题,人们显然不理解它。

RDTSC用于计数CPU周期,并且随CPU节流而变化。

当前,RDTSC不会随CPU限制而变化。

一些旧的应用程序期望RDTSC随CPU节流而变化。

我如何使RDTSC给予他们期望的结果?

我不想分析代码,不想重写大量代码,我不想强​​迫用户弄乱BIOS或内核权限,我只想让旧版应用程序按需工作。

玛格丽特·布鲁姆

简而言之,轻按一下开关就无法做到

英特尔开发人员手册3B第17章明确阅读

不变的TSC将在所有ACPI P-,C-中以恒定速率运行。和T状态。这是前进的架构行为。

这是告诉您没有办法切换回以前的行为的另一种方法


但是,如果您真的喜欢它,可以尝试一下。

rdtscIA32_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答案的投票计数相反,性能计数器寄存器是唯一的选择。除非您想了解OS电源管理器的功能/事件并进行有根据的猜测。
  • 将该限制映射到TSC值。
  • 选择更新TSC的频率(不重要)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有什么方法可以获取旧的Razer Blade BIOS版本?

有什么方法可以以分离模式启动Docker容器吗?

有什么方法可以在规范模式下处理转义密钥?

有什么方法可以检查是否执行严格模式?

有什么方法可以强制UBUNTU以BIOS引导模式安装?

有什么方法可以使某些模式特征模式为 queryOnlyModes 而其他模式不是?

GitLab容器注册表:有什么方法可以自动删除旧容器?

请求旧网址时,有什么方法可以重定向到干净的网址?

有什么方法可以恢复Netbeans 7.2书签导航的旧样式?

有什么办法可以“减慢”触发速度?

有什么方法可以在VueJS中从父级触发组件方法吗?

有没有什么方法可以在静态 html 站点上实现 Night and Day 模式?

有什么方法可以确定触发源,无论是手动构建还是更改SCM?

Redis - 当不再主动写入值时,有什么方法可以触发事件?

有什么方法可以在触发lambda之前过滤AWS DynamoDb流?

有什么方法可以在AWS Glue作业结束时触发AWS Lambda函数?

在chrome开发工具中更改样式后,有什么方法可以触发事件?

有什么方法可以延迟在beforeModel挂钩中触发Embers模型?

在更改配置后,有什么方法可以使用Terraform触发CodeDeploy部署?

有什么方法可以使FullCalendar在事件到期或正在进行时触发功能?

有什么方法可以用类而不是 data-fancybox 属性触发fancybox 3?

有什么方法可以使用触发器运行 Apps Script Web 应用程序

有什么方法可以使接口中的方法使用 DAO 模式返回通用 List<> 吗?

有什么方法可以在开发模式下禁用或加速React PropType验证?

macOS Mojave:有什么方法可以在黑暗模式下调试应用程序?

在规范模式下,有什么方法可以区分EOL和EOF之间的区别吗?

有什么方法可以从值的哈希图中生成Avro模式吗?

IE11的“文档模式”下拉列表被禁用。有什么方法可以启用它吗?

Elixir中有什么方法可以对传递给函数的nil参数进行模式匹配?