4개의 KVM Linux 게스트가 있는 Linux 호스트가 있습니다. 모든 게스트는 거의 유휴 상태이며 게스트 내부 부하는 <0.1입니다.
이제 top
호스트에서 실행하면 각 KVM 프로세스는 CPU의 약 30%를 사용합니다.
이것이 정상적인 행동입니까? 호스트가 유휴 게스트를 호스팅하는 데 더 적은 CPU가 필요하도록 하고 싶습니다.
정상이라면 그 이유는 무엇입니까?
정상이 아니라면 무엇이 문제일까요?
답변1
냉소적으로 이것은 Windows 게스트에게는 "정상"이지만 Linux 게스트에게는 그렇지 않다고 말할 수 있습니다(적어도 이렇게 하는 사람은 본 적이 없습니다).
Windows의 경우 이는 실행 중인 애플리케이션(유휴 상태에 가까움)에 따라 크게 달라집니다. 기본 XP 또는 W2K(아직 KVM의 최신 버전에 대한 경험이 없음)는 호스트에서 10~20%의 문제를 일으키지만(약 0% 표시) MS SQL Server는 쉽게 30% 이상에 도달합니다. 이는 타이머 액세스 및/또는 ACPI와 관련된 것으로 보입니다. 그러나 ACPI가 아닌 VM에서도 호스트의 Windows 성능은 결코 10% 미만으로 떨어지지 않았습니다.
편집 1(통합 설명)
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
(게스트에서) 출력은 무엇입니까? 그것은 kvm 시계여야 합니다. CONFIG_PARAVIRT_CLOCK 및 CONFIG_KVM_CLOCK에 대한 커널 구성(/proc/config.gz)을 확인하세요.
답변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