hardware - 为什么 RDTSC 是现代处理器上的虚拟化指令?

标签 hardware virtualization rdtsc

我正在研究 RDTSC 并了解它是如何为 VirtualBox 和 VMWare 等虚拟机进行虚拟化的。为什么英特尔/AMD 费尽心思虚拟化这条指令?

我觉得它可以很容易地用陷阱来模拟,而且它并不是一个 super 常见的指令(我测试过,在禁用了硬件 RDTSC 虚拟化的虚拟机中,一般使用没有明显的减速)。

但是,我知道英特尔/AMD 不会费尽心思将这条指令添加到虚拟化硬件中,除非能够非常快速地执行很重要。

有谁知道为什么?

最佳答案

通常使用 RDTSC 来获取细粒度的时序信息,其中虚拟化陷阱的开销将非常显着。最常见的用途是让两条 RDTSC 指令之间有少量代码,将时间差作为代码序列的耗时(周期数)。因此,即使是管道排水/冲洗的开销也相当大。

此外,由于所有指令所做的都是读取一个连续运行的计数器,因此对其进行虚拟化非常容易——硬件只需要允许在 VM 上下文切换时保存/重新加载计数器值,而不是对 RDTSC 指令本身进行任何特殊处理。

关于hardware - 为什么 RDTSC 是现代处理器上的虚拟化指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7745543/

相关文章:

architecture - 什么是存储缓冲区?

linux - 如何在 Raspberry Pi 上有效监控以太网何时插入/拔出?

objective-c - 使用 Objective-C 获取 Mac 系统温度

java - 多进程 Java 程序在其运行的 JVM 下的实际机器上下文中是单个进程吗?

assembly - 有什么方法可以触发 RDTSC 的传统模式吗?

c - rdtsc,循环太多

java - 如何通过编码关闭/关闭Android平板电脑?

linux-kernel - 在单个管理程序虚拟机上运行在两个不同操作系统上的两个进程之间的 IPC

WPF ListBox 虚拟化搞砸了显示的项目

linux - 2020 年 Intel x86-64 CPU 用户空间的 TSC(时间戳计数器)有多稳定?