Jak mogę przechowywać ważne maszyny wirtualne w pamięci bez wyłączania wymiany?

4

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?

użytkownik2970347
źródło

Odpowiedzi:

2

Możesz zablokować strony w pamięci w późniejszych wersjach libvirt: -

http://libvirt.org/formatdomain.html#elementsMemoryBacking

Ostrożnie : Nie pojawia się to podczas używania Fedory 19 jako hiperwizora, niemniej jednak, zgodnie z dziennikiem zmian najnowszego RPM (mogę znaleźć) dla libvirt EL6.5, to istnieje;

  • 18 lipca 2013 Jiri Denemark - 0.10.2-21
    • conf: Unikaj zerowego zerowania dla stanu domeny pmsuspended (rhbz # 822306)
    • libvirt: Zdefiniuj typy zdarzeń awarii domeny (rhbz # 822306)
    • qemu: Refactor processWatchdogEvent (rhbz # 822306)
    • qemu: Exposed qemuProcessShutdownOrReboot () (rhbz # 822306)
    • qemu: Zaimplementuj zdarzenia „oncrash”, gdy gość spanikował (rhbz # 822306)
    • qemu: Zaimplementuj zdarzenia rdzeniowe „oncrash”, gdy gość spanikował (rhbz # 822306)
    • conf: Naprawiono wyciek pamięci podczas analizowania węzłów XML portu nat (rhbz # 851455)
    • security_manager: porównanie porównania (rhbz # 984793)
    • qemu: Zapobieganie awarii libvirtd bez konfiguracji agenta gościa (rhbz # 984821)
    • qemu: Napraw podwójnie wolne od zwróconej tablicy JSON w qemuAgentGetVCPUs () (rhbz # 984821)
    • qemu_agent: Dodaj obsługę dodawania tablic do poleceń (rhbz # 924400)
    • Dodaj obsługę blokowania stron pamięci domeny (rhbz # 947118)
    • qemu: Zaimplementuj obsługę blokowania stron pamięci domeny (rhbz # 947118)
    • qemu: Sprawdź wsparcie dla -realtime mlock = on | off (rhbz # 947118)
    • qemu: Przenieś obliczenie limitu pamięci do funkcji wielokrotnego użytku (rhbz # 947118)
    • util: New virCommandSetMax (MemLock | Processes | Files) (rhbz # 947118)
    • qemu: Ustaw RLIMIT_MEMLOCK, gdy używane jest MemoryBacking / zablokowane (rhbz # 947118)
    • Dodaj protokół Gluster jako obsługiwany backend dysku sieciowego (Rhbz # 849796)
    • qemu: Dodaj obsługę zaplecza pamięci sieciowej opartej na protokole gluster. (rhbz # 849796)
    • testy: dodaj testy obsługi dysków sieciowych opartych na protokole gluster (rhbz # 849796)
Matthew Ife
źródło
libvirt.org/formatdomain.html#elementsMemoryTuning (który jest niezbędny do tego, aby działał) brzmi: „Możesz skoczyć bez pomocy, skacząc z klifu. Jedyną trudną częścią jest wpływ kilka sekund później, co jest nierozwiązanym problemem . ”
Tino,
Dodałem instrukcje krok po kroku jako kolejną odpowiedź.
Joachim Wagner,
1

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.

dyasny
źródło
Czy zazwyczaj tak się dzieje w przypadku wdrożeń KVM? Jest to dla mnie obce, ponieważ nie byłoby problemu z instalacją VMware.
ewwhite
Odpowiedzi tylko na link są złe. Twój link się zepsuł, więc edytowałem je w nowej lokalizacji. Jednak jest prawdopodobne, że w przyszłości ponownie się złamią.
Tino,
Odpowiedź jest tam, podążanie za linkami jest opcjonalne.
dyasny
0

Oto instrukcje krok po kroku dotyczące rozwiązania Matthew:

  1. Zamknij maszynę wirtualną
  2. virt-xml $VMNAME --edit --memorybacking locked=on
  3. systemctl restart libvirtd (nie jestem pewien, czy to jest potrzebne)
  4. Uruchom maszynę wirtualną

gdzie $VMNAMEjest 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_limitochronę systemu hosta (maszyna wirtualna zostanie zabita, jeśli to konieczne, aby pozostać w limicie).

Edycja: Uproszczony krok 2 (był virsh edit $VMNAMEi dodaj <memoryBacking><locked/></memoryBacking>po <domain type='kvm'>)

Joachim Wagner
źródło