KVM 코어 0의 높은 CPU 도용

KVM 코어 0의 높은 CPU 도용

내 KVM 설정 중 하나에서 두 게스트 중 Core 0의 CPU 사용량이 높은 것을 발견했습니다. CPU 스틸링 관련 세이브럴 웹 결과를 살펴봤지만 코어 스틸링에 대한 설명은 없습니다.

평균으로 따지면 나쁘지 않은 것 같습니다. 40/8~5%. 그러나 단일 코어의 경우 매우 높습니다.

Threads: 815 total, 4 running, 811 sleeping, 0 stopped, 0 zombie %Cpu0 : 18.4 us, 0.8 sy, 0.0 ni, 35.2 id, 0.0 wa, 0.0 hi, 6.4 si, 39.2 st %Cpu1 : 38.6 us, 6.9 sy, 0.0 ni, 48.5 id, 5.9 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 31.0 us, 20.0 sy, 0.0 ni, 47.0 id, 2.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 : 22.0 us, 14.0 sy, 4.0 ni, 48.0 id, 12.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu4 : 31.7 us, 18.8 sy, 0.0 ni, 48.5 id, 1.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu5 : 41.0 us, 13.0 sy, 0.0 ni, 46.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu6 : 8.1 us, 7.1 sy, 0.0 ni, 84.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu7 : 35.3 us, 24.5 sy, 0.0 ni, 39.2 id, 1.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu8 : 3.0 us, 5.1 sy, 0.0 ni, 91.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu9 : 5.9 us, 6.9 sy, 0.0 ni, 87.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu10 : 6.1 us, 2.0 sy, 0.0 ni, 91.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu11 : 10.4 us, 13.5 sy, 0.0 ni, 24.0 id, 52.1 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu12 : 50.0 us, 10.0 sy, 0.0 ni, 40.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 48966980 total, 13622884 free, 25813260 used, 9530836 buff/cache

호스트에 CPU 격리가 있고 호스트당 게스트 VM이 2개만 있습니다. 고양이/proc/cmdline

BOOT_IMAGE=/vmlinuz-3.10.0-693.el7.x86_64 root=/dev/mapper/VolGrp-Vol1 ro crashkernel=auto rd.lvm.lv=VolGrp/Vol1 rd.lvm.lv=VolGrp/Vol0 console=ttyS0,115200n8 isolcpus=2-15,18-31 nohz_full=2-15,18-31 rcu_nocbs=2-15,18-31 intel_idle.max_cstate=1 intel_pstate=disable nosoftlockup=0 audit=0 mce=ignore_ce transparent_hugepage=never

또한 virsh dumpxml의 두 VM 간에 동일한 커널이 공유되지 않습니다.

가상 머신 1

<vcpu placement='static' cpuset='2,4,6,8,10,12,14,18,20,22,24,26,28,30'\>13</vcpu>

가상 머신 2

<vcpu placement='static' cpuset='3,5,7,9,11,13,15,19,21,23,25,27,29,31'\>13</vcpu>

호스트 NUMA 정보:

NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30 NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31

호스트 운영 체제: CentOS 7.4

게스트 OS: CentOS 7.4

qemu KVM 버전: 1.5.3

왜 그렇게 높은 도둑질 가치를 가지고 있는지 알아낼 수 있는 제안이 있나요?

답변1

가상화된 환경을 초과 구독하고 있습니다. 예를 들어 해당 호스트의 가상 머신이 전체 호스트보다 더 많은 CPU 리소스를 사용하려고 합니다.

여러 VM을 하나의 CPU에 고정하면 디버깅에 더 좋고 범인을 빠르게 찾아낼 수 있습니다. CPU/I/O/메모리를 주의 깊게 살펴보세요. 하나의 리소스가 부족하면 일반적으로 다른 리소스에도 영향을 미칩니다.

바라보다iostat - 필드를 "도용"한다는 것은 무엇을 의미합니까?

이 질문에서 발췌 :

man vmstat에 따르면:

st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.

....

이는 하이퍼바이저가 가상 머신 내부에 있는 것이 아닌 다른 것을 실행하도록 예약하는 경우입니다. 이는 다른 VM 또는 하이퍼바이저 호스트 자체의 시간일 수 있습니다. 시간을 빼앗기지 않으면 해당 시간은 CPU 워크로드 또는 유휴 스레드를 실행하는 데 사용됩니다.

PS 장기적으로 글로벌 정책으로 특정 VM을 특정 CPU에 고정하지 않는 것이 좋습니다. 하이퍼바이저는 CPU 리소스/로드를 할당할 때보다 더 나은 결정을 내릴 수 있습니다.

관련 정보