在 QEMU 中可以将线程视为核心吗?

在 QEMU 中可以将线程视为核心吗?

使用多线程 CPU 时,是否可以将一个线程视为一个核心,从而使客户操作系统的可用核心数量增加一倍?

答案1

假设您所指的“线程”与 Intel 的超线程或 AMD Ryzen(或 Sun/Oracle/whoever UltraSPARC,或任何其他平台)上的 SMT 实现等技术提供的执行线程相同,那么是的,但原因可能与您想象的不同。

在较低级别,给定核心上的“线程”具有某种形式的共享资源,尽管它们共享的具体内容取决于实现(几乎所有共享缓存,但除此之外,它有点碰运气)。但是,就用户应用程序而言,它们与单个核心没有什么不同(某些平台将物理 CPU(包乘以每个包的核心数)与逻辑 CPU(每个核心的线程数乘以每个包的核心数乘以包)区分开来,但实际上,用户程序几乎从不区别对待它们)。

对于 QEMU,这实际上与它向客户系统公开的内容完全脱钩。默认情况下,它只提供一个核心,并且不公开任何有关主机系统硬件拓扑的信息。使用-smp提供任意拓扑的选项。只需一个数字,它就会模拟一个具有那么多核心的 CPU,但对于许多平台,您可以指定每个包的核心数、每个核心的线程数和要公开的插槽数的精确值。因此,理论上,您可以将 Ryzen 7 的 8 个核心(每核 2 TPC)作为 16 个独立核心或具有 16 个线程的单个核心,甚至作为 16 个单独的 CPU 包(每个包 1 个核心)向 QEMU 客户机公开。您甚至可以为客户机提供比系统上的物理核心更多的虚拟核心,在这种情况下,这些核心将在您拥有的物理 CPU 数量之间进行多路复用(这是真的对于测试目的很有用)。

相关内容