Host VM -> Xenon E5-2440 z pamięcią 48G ... Wszystko działa w CentOS6.5 (2.6.32-431)
Mam 4 gościnnych maszyn wirtualnych działających w / 2G pamięci. Ich obrazy dysków są plikami lokalnymi. Na komputerze hosta działa również lekko używany serwer NFS, ale niewiele więcej. (swappiness = 0) Po około dniu, gdy pamięć podręczna bufora rośnie do prawie 40G, niektóre z tych maszyn wirtualnych są prawie całkowicie zamienione na dyski. (oglądane przez: grep VmSwap / proc / PID / status)
Problem, jaki mam, polega na tym, że te maszyny wirtualne mogą nie być regularnie używane, ale muszą być gotowe. Jednak w praktyce są one wymieniane, powodując poważne problemy z czasem reakcji.
Z pewnością jestem za tym, że moje maszyny wirtualne używają pliku wymiany rozsądnej wielkości i pozwalają systemowi operacyjnemu decydować o równowadze między pamięcią podręczną bufora i zamianą, ale w moim przypadku nie wydaje się to działać na maszynie hosta.
Czy jest jakaś opcja, aby zapobiec pogorszeniu responsywności maszyn wirtualnych oprócz wyłączenia wymiany na komputerze hosta? Próbować z cgroups lub po prostu wyciągnąć wtyczkę z pliku wymiany dla tego przypadku użycia?
źródło
Możesz używać cgroups i ustawiać swapiness dla każdej grupy
http://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt
http://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt
Wirtualny procesor KVM to tylko wątek na hoście, więc można nim kontrolować jak każdy inny proces.
źródło
Oto instrukcje krok po kroku dotyczące rozwiązania Matthew:
virt-xml $VMNAME --edit --memorybacking locked=on
systemctl restart libvirtd
(nie jestem pewien, czy to jest potrzebne)gdzie
$VMNAME
jest nazwa maszyny wirtualnej.Pomyślnie przeszedłem sytuację, w której wcześniej moja maszyna wirtualna została całkowicie wymieniona. Teraz proces qemu maszyny wirtualnej ma zerowe użycie swap i jest responsywny.
Uwaga: zgodnie z dokumentacją libvirt cała pamięć qemu zostanie zablokowana, może się nieprzewidywalnie powiększyć i należy ustawić
hard_limit
ochronę systemu hosta (maszyna wirtualna zostanie zabita, jeśli to konieczne, aby pozostać w limicie).Edycja: Uproszczony krok 2 (był
virsh edit $VMNAME
i dodaj<memoryBacking><locked/></memoryBacking>
po<domain type='kvm'>
)źródło