gpt4 book ai didi

linux - x86平台的虚拟机pushf和popf会导致VMEXIT吗?

转载 作者:太空狗 更新时间:2023-10-29 11:48:36 26 4
gpt4 key购买 nike

我正在尝试在由 kvm 驱动的虚拟机中运行的 linux 内核中添加一些代码。但是,我发现指令 pushfpopf 会导致显着的性能开销,apache 最多会降低 5 倍。我确信是这 2 条指令导致了开销,因为如果我用 lahfsahf 替换它们,开销就消失了。

现在我想知道为什么它们会带来如此大的退化以及如何避免它们?我在 this slide 中找到了一些线索,这表明 pushf 和 popf 将被困在管理程序中。它们真的会导致 VMEXIT 吗?exit_reason 编号是多少?最后,有没有办法配置 VMCS 让 pushfpopf 不会被困住?

最佳答案

在 Intel 处理器上,SDM 第 3 卷第 25 章中描述了所有可能导致 VM 退出或在客户机中具有不同行为的指令。 Pushf 和 popf 没有在该章的任何地方列出,这意味着这些指令不会导致 VM 退出,并且它们在 guest 中执行时的可观察行为与在 guest 外部执行时相同。

popf 指令不需要 VM 退出的原因(尽管问题中引用了幻灯片)是 VMCS 具有控制来覆盖通常由标志寄存器控制的行为。例如,在客户机中,IF 标志不仅仅控制中断的传递;相反,VMCS 中的标志控制是否将外部中断传递给 guest 或是否发生 VM 退出。

考虑到 popf 所做的一切,它对性能的影响并不小,我并不感到惊讶。详见软件开发者手册中对popf的描述。

关于linux - x86平台的虚拟机pushf和popf会导致VMEXIT吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54402437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com