在 VMware Infrastructure Client(无 vCenter)中,在Resources / Advanced CPU
每个虚拟机的编辑设置对话框中有一个选项可以改变调度亲和性虚拟机的。它会设置sched.cpu.affinity
VMX 文件中的值。
我相信这可以让我强制虚拟机仅由主机上的特定物理 CPU 提供服务,明智地使用哪个可能在某些情况下,允许我为一个物理 CPU 而不是主机中的两个 CPU 授权一个虚拟机。
编辑设置中config字段的描述如下:
超线程状态:活动
可用 CPU:12(逻辑 CPU)
为此虚拟机选择逻辑处理器亲和性。
使用“-”表示范围,使用“,”分隔值。例如,“0,2-4,7”表示处理器 0、2、3、4 和 7。
是否可以公平地假设(在这种情况下以及类似情况下):
- 数字 0 到 11 代表每个物理核心(或者“超线程”也编号)?
- 如果我想限制虚拟机在其中一个物理 CPU 上运行,我应该输入或
0-5
(6-11
或者这些数字是否是不同的模式)?
否则,是否有可靠的来源(VIC 屏幕、shell 命令等)来查找任何特定主机上的编号到 CPU 的映射?
(作为参考,CPU 是 Intel Xeon X5675 单元,每个 CPU 都有 6 核,具有超线程。)
答案1
您的软件可能是按(可见的)CPU 插槽授权的。如果您为目标虚拟机配置了适当的插槽和核心数,那么这并不重要在哪里ESXi 决定在底层硬件上调度线程。您的软件应该只关注虚拟机可见的内容。在这种情况下,1 插槽、4 核 VM 应该可以满足要求。
就像任务集和 CPU 调度在 Linux 上,除非有令人信服的理由,否则您不想走 CPU 亲和性和固定的道路。
编辑:
编号与taskset
对于 Westmere 6 核 CPU,您将根据以下时间表看到物理核心和超线程核心:
NUMANode L#0 (P#0 32GB) + Socket L#0 + L3 L#0 (12MB)
L2 L#0 (256KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0
PU L#0 (P#0)
PU L#1 (P#12)
L2 L#1 (256KB) + L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1
PU L#2 (P#2)
PU L#3 (P#14)
L2 L#2 (256KB) + L1d L#2 (32KB) + L1i L#2 (32KB) + Core L#2
PU L#4 (P#4)
PU L#5 (P#16)
L2 L#3 (256KB) + L1d L#3 (32KB) + L1i L#3 (32KB) + Core L#3
PU L#6 (P#6)
PU L#7 (P#18)
L2 L#4 (256KB) + L1d L#4 (32KB) + L1i L#4 (32KB) + Core L#4
PU L#8 (P#8)
PU L#9 (P#20)
L2 L#5 (256KB) + L1d L#5 (32KB) + L1i L#5 (32KB) + Core L#5
PU L#10 (P#10)
PU L#11 (P#22)
NUMANode L#1 (P#1 32GB) + Socket L#1 + L3 L#1 (12MB)
L2 L#6 (256KB) + L1d L#6 (32KB) + L1i L#6 (32KB) + Core L#6
PU L#12 (P#1)
PU L#13 (P#13)
L2 L#7 (256KB) + L1d L#7 (32KB) + L1i L#7 (32KB) + Core L#7
PU L#14 (P#3)
PU L#15 (P#15)
L2 L#8 (256KB) + L1d L#8 (32KB) + L1i L#8 (32KB) + Core L#8
PU L#16 (P#5)
PU L#17 (P#17)
L2 L#9 (256KB) + L1d L#9 (32KB) + L1i L#9 (32KB) + Core L#9
PU L#18 (P#7)
PU L#19 (P#19)
L2 L#10 (256KB) + L1d L#10 (32KB) + L1i L#10 (32KB) + Core L#10
PU L#20 (P#9)
PU L#21 (P#21)
L2 L#11 (256KB) + L1d L#11 (32KB) + L1i L#11 (32KB) + Core L#11
PU L#22 (P#11)
PU L#23 (P#23)
答案2
是否可以公平地假设(在这种情况下以及类似情况下):
- 数字 0 到 11 代表每个物理核心(或者“超线程”也编号)?
是的,是的,包括 HT
- 如果我想限制虚拟机在其中一个物理 CPU 上运行,我应该输入 0-5 或 6-11(或者这些数字是不同的模式)?
是的,你成功了!