首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么VMREADs/VMWRITE比内存读写操作慢

为什么VMREADs/VMWRITE比内存读写操作慢
EN

Stack Overflow用户
提问于 2017-10-12 09:07:41
回答 1查看 383关注 0票数 1

从逻辑上说,写入任何CPU存储的变量都应该比相应的内存操作更快,因为没有缓存丢失的机会。这些状态被缓存在CPU中,并且在下一个VMLAUNCH/VMRESUME操作之前不会更改任何CPU状态。因此,它们应该比对内存地址的等效操作更快。

当查看AMD和Intel提供的不同虚拟化解决方案时,就会出现这个问题。Intel已经规定,所有对VMCS数据结构的更改都应该通过VMREAD/VMWRITE接口,而不是通过常规内存R/W操作。然而,AMD不构成任何这样的限制,它的VMCB区域是通过常规的内存操作来修改的。

英特尔方法的收益应该是更快的VMExit/VMResume时间和AMD。然而,英特尔将在灵活性方面加入新的指令。

然而,实际上,VMREAD/VMWRITE操作比常规内存操作要慢。这对我来说没有任何意义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-12 09:26:46

常规的内存读写是用专用硬件来处理的,以优化它们,因为真正的程序中充满了它们。

大多数工作负载在修改特定的CPU控制寄存器上花费的时间不多,因此对这些指令的内部处理通常没有经过很大的优化。在内部,它可以被微编码(即从微码ROM解码到多个uop)。

段寄存器可能不是一个很好的类比,因为编写段寄存器会触发CPU从GDT / LDT加载描述符。但根据阿格纳雾氏试验的说法,mov sr, r每13个周期的吞吐量就有一个,并且可以解码到6uop(从微码)。(他停止为以后的CPU测试段寄存器。)实际上,我不确定这是在16位还是32位模式。如果是16位的实模式,那么写段寄存器不会读取描述符;它只是更新基和限制。

读取段寄存器更快:每个时钟一个。但这仍然比读取普通寄存器慢(常规mov指令在Nehalem上的吞吐量为0.33c )。

Nehalem每个时钟只能加载和/或存储一次,而沙桥家族每个时钟只能加载2次。但段寄存器读取速度可能不会更快。

移动到/从控制寄存器可能会更慢,因为它比段寄存器更少见。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46705614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档