gpt4 book ai didi

linux - 虚拟 CPU 如何映射到物理内核?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:02 25 4
gpt4 key购买 nike

我正在用 Java 编写一个计算密集型多线程程序,它将在虚拟化环境中运行,我想知道 guest 操作系统上的“CPU 数量”设置将如何影响我的程序的性能。

本质上,问题是客户操作系统 CPU 如何映射到主机 CPU 内核?假设我将 guest 操作系统的 CPU 计数设置为 1,即使我在四核机器上运行,这到底意味着什么?我可以推测至少会发生以下两种情况之一:

  1. 我的单个虚拟内核绑定(bind)到一个特定的物理内核,因此 guest 本质上是在单个内核上运行。

  2. 没有虚拟 CPU 到物理核心的硬绑定(bind)/分配。因此,每当 guest 操作系统上的任何进程需要启动一个新线程时,它都可以被分派(dispatch)到任何物理核心执行:如我的示例所示,是四个中的任何一个。

后一种情况意味着 guest 操作系统正在多核环境中运行,即使它“认为”它具有单核。 (我所说的“思考”是指像 cat/proc/cpuinfo 这样的命令只报告一个核心)

我问的是一般性问题,但如果 VirtualBox 和 VMWare 之间在该领域存在特殊差异,并且您碰巧知道它们,我将非常感谢您分享。

最佳答案

实际上,只要您使用基于硬件的 system-level virtualization,大多数情况下会发生在中间的某个地方。而不是像 User-mode Linux 这样的东西.

就主机操作系统而言,VM 每个虚拟核心只有一个 CPU 线程。可能还有用于 I/O 等的其他线程,但这些线程独立于虚拟核心数,是模拟器的一部分并且对 guest 操作系统完全不可见。

最终结果是,在单核 VM 上,所有 guest 线程在每个特定时刻都将在同一 CPU 上运行 - guest 线程在容器线程中“批处理”在一起,并且对主机操作系统而言不是单独可见的。

也就是说,除非您设置 CPU affinity将模拟器线程转移到一个或多个特定的物理 CPU 核心,主机操作系统调度程序可能会每隔几秒定期将线程迁移到不同的核心,这与任何其他进程非常相似。

关于linux - 虚拟 CPU 如何映射到物理内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23919526/

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