Aktualizacja Proxmox VE z 8 do 9
Wprowadzenie
Ten dokument opisuje problemy z wydajnością zaobserwowane po aktualizacji klastra Proxmox VE z wersji 8.x do 9.x. Mimo że sama aktualizacja przebiegła pomyślnie, w jej wyniku pojawiły się krytyczne problemy ze stabilnością maszyn wirtualnych (VM) podczas wykonywania zadań backupu.
1. Opis Problemu
Po aktualizacji, w trakcie działania zadań backupu w trybie Snapshot, usługi działające wewnątrz maszyn wirtualnych stawały się niedostępne. Objawiało się to:
- Przerwami w działaniu aplikacji i timeoutami połączeń.
- Krytycznymi błędami kernela w logach maszyn wirtualnych:
BUG: soft lockup - CPU#X stuck for XXs!rcu: INFO: rcu_preempt detected stalls on CPUs/tasks
- Komunikatami o wysokim obciążeniu na hoście Proxmox:
perf: interrupt took too long (...)
Co istotne, przed aktualizacją do Proxmox 9 te same zadania backupu na tej samej infrastrukturze nie powodowały żadnych problemów.
2. Kluczowa Konfiguracja Systemu
- Hypervisor: Proxmox VE 9.x (zaktualizowany z 8.x)
- Storage:
LVMna kontrolerze Hardware RAID. - Systemy Gościa: Debian 12, Gentoo, CentOS 9.
- Tryb Backupu:
Snapshot. - Architektura Backupu: Backup jest tworzony lokalnie na hoście Proxmox, a następnie synchronizowany przez
rsyncna serwer NAS w sieci biurowej. - QEMU Guest Agent: Zainstalowany, zaktualizowany i działający na wszystkich maszynach wirtualnych.
3. Diagnoza Głównej Przyczyny
Główną przyczyną problemu jest regresja wydajnościowa w interakcji Proxmox 9 ze snapshotami LVM. Snapshoty LVM działają w trybie "Copy-on-Write" (CoW), co generuje znaczny narzut i obciążenie I/O. Nowszy kernel lub QEMU w Proxmox 9 zarządza tymi operacjami w sposób, który jest bardziej wrażliwy na opóźnienia, co w połączeniu z obciążeniem wewnątrz VM prowadzi do chwilowego "zagłodzenia" maszyny wirtualnej i jej "zamrożenia" (stun).
4. Zastosowane Rozwiązania
Standardowe metody, takie jak Rate Limit dla backupu, okazały się niewystarczające. Problem ostatecznie rozwiązano, stosując poniższe kroki:
Krok 1: Ustawienie Priorytetu I/O dla Zadań Backupu (Najskuteczniejsza Poprawka)
Najważniejszym krokiem było obniżenie priorytetu I/O dla procesu backupu (vzdump). Zostało to ustawione globalnie na każdym hoście Proxmox przez edycję pliku /etc/vzdump.conf i dodanie linii:
ionice: 8
Wartość 8 odpowiada najniższemu priorytetowi (klasa "Idle"), co sprawia, że proces backupu korzysta z dysku tylko wtedy, gdy inne procesy go nie potrzebują.
Krok 2: Wyłączenie Transparent Huge Pages (THP) w Maszynach Gościa
W ramach optymalizacji i eliminacji błędów soft lockup oraz rcu stall, w systemach operacyjnych maszyn wirtualnych wyłączono Transparent Huge Pages. Odbyło się to przez dodanie parametru transparent_hugepage=never do linii startowej kernela w konfiguracji GRUB.
Krok 3: Zmiana Harmonogramu Backupu
Dodatkowo, aby zminimalizować konflikt o zasoby, zadania backupu zostały przeniesione na godziny nocne (2:00-5:00), gdy aktywność na maszynach wirtualnych jest najniższa.

