QEMU在主机和目标(客户机)都是同一架构时,是否使用Tiny Code Generator?

3

我知道QEMU通常使用所谓的动态翻译技术:它将目标机器的指令翻译成微操作,然后通过Tiny Code Generator(TCG)将这些微操作翻译成主机指令。即: 目标指令 -> 微操作 微操作 -> TCG -> 主机指令

然而,如果目标和主机机器的架构相同,例如两者都是x86,理论上不需要使用TCG进行翻译,因为指令集是相同的。在这种情况下,QEMU是否仍然使用TCG呢?

2个回答

3

除了Robin的回答:

需要记住的是,除非你在命令行中指定,否则QEMU默认使用TCG进行翻译。

例如,即使主机和目标架构相同,在我的例子中为x86_64,以下命令行参数也会以TCG模式启动QEMU:

./qemu-system-x86_64 -m 10G -machine pc-i440fx-2.5 -drive file=~/ubuntu16.04.server.qcow2,format=qcow2

如果启动QEMU的命令如下 -
./qemu-system-x86_64 -m 10G -machine pc-i440fx-2.5 -accel kvm -drive file=~/ubuntu16.04.server.qcow2,format=qcow2

只有在明确指定加速器选择为kvm时,QEMU才会以KVM模式启动。

然而,如果目标和主机架构相同,QEMU可以允许在KVM模式下运行(如果您需要),而不是TCG模式。


1

根据我阅读这篇博客得知:qemu在这种情况下可以使用KVM。

KVM是Linux内核中的一项虚拟化功能,它允许像qemu这样的程序安全地直接在主机CPU上执行客户机代码。这仅在目标架构受到主机CPU支持时才可能实现;今天这意味着仅支持x86-on-x86虚拟化。


我认为你是正确的。KVM直接利用CPU加速,因此需要在主机操作系统上执行客户操作系统指令;否则,它需要翻译成TCG。谢谢! - mchen
没问题,如果答案对您有帮助,您可以接受它。 - Robin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接