我有一个带有 4 个 KVM Linux 客户机的 Linux 主机。所有访客都几乎空闲,访客内部的负载<0.1。
现在,如果我top
在主机上执行 a,每个 KVM 进程都会使用大约 30% 的 CPU。
这是正常行为吗?我希望主机只需要更少的 CPU 来托管空闲的访客。
如果正常的话,这是什么原因呢?
如果不正常,可能是什么问题?
答案1
愤世嫉俗的是,我可以说这对于 Windows 来宾来说是“正常”的,但对于 Linux 来宾来说却不是(至少我从未见过有人这样做)。
对于 Windows,这在很大程度上取决于正在运行的应用程序(接近空闲)。普通的 XP 或 W2K(我还没有使用 KVM 中较新版本的经验)会导致主机上出现 10% 到 20% 的问题(其中显示大约 0%),但 MS SQL Server 很容易达到 30% 以上。这似乎与计时器访问和/或 ACPI 有关。但即使在非 ACPI 虚拟机中,主机上的 Windows 性能也从未低于 10%。
编辑1(整合评论)
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
(在访客中)的输出是什么?那应该是 kvm 时钟。检查内核配置 (/proc/config.gz) 中的 CONFIG_PARAVIRT_CLOCK 和 CONFIG_KVM_CLOCK。
这是一个与 KVM 相关的内核配置选项列表。
答案2
我会检查以确保 KVM 来宾已配置,以便它们能够利用主机的所有资源(CPU、RAM 等)。通常,KVM 来宾系统仅分配 1-2 个 CPU(核心),而系统上可能包含更多 CPU(核心)。
这意味着在查看主机资源与给定 KVM 来宾的内部结构时,您并不是在比较完全相同的事物。
例如
楼主有以下几点:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 12
On-line CPU(s) list: 0-11
Thread(s) per core: 2
Core(s) per socket: 6
CPU socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 45
Stepping: 7
CPU MHz: 1200.000
BogoMIPS: 6404.04
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 12288K
NUMA node0 CPU(s): 0-11
虽然其中一位 KVM 客人有这样的情况:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
CPU socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 6
Stepping: 3
CPU MHz: 3202.024
BogoMIPS: 6404.04
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
NUMA node0 CPU(s): 0