Swap Space unter Proxmox VE mit LVM und ZFS

Swap sollte so groß sein wie der verfügbare RAM? Das war einmal. Mit heutigen Hypervisoren in RAM-Ausstattungen von hunderten von GB ergibt das keinen Sinn mehr. Dennoch kann es sinnvoll sein, Swap Space zu verwenden, wenn er richtig angelegt und vernünftig dimensioniert ist.

Zunächst einmal lässt der Proxmox VE Installer uns die Wahl, ob wir ein System auf Basis von LVM mit ext4/xfs/btrfs als Filesystem oder auf Basis eines ZFS ZPool installieren wollen. Ob man nun LVM oder ZFS wählt hängt in erster Linie von der Hardwareausstattung und danach von eigenen Präferenzen ab. Mit einem Hardware RAID Controller sollte man sich für eine LVM-basierte Installation entscheiden, mit einem HBA ist eine ZFS-basierte Installation besser.


Swap Space bei LVM-basierter Installation

Entscheide ich mich für die LVM-basierte Installation, erzeugt der Installer automatisch für mich einen Swap-Space und berechnet die Größe des Swap-Space anhand der Disk-Größe und dem verfügbaren Hauptspeicher. Hier der zuständige Code im Installer:

sub compute_swapsize {
    my ($hdsize) = @_;

    my $hdgb = int($hdsize/(1024*1024));

    my $swapsize_kb;
    if (defined(my $swapsize = Proxmox::Install::Config::get_swapsize())) {
        $swapsize_kb = $swapsize * 1024 * 1024;
    } else {
        my $run_env = Proxmox::Install::RunEnv::get();
        my $ss = int($run_env->{total_memory});
        $ss = 4096 if $ss < 4096 && $hdgb >= 64;
        $ss = 2048 if $ss < 2048 && $hdgb >= 32;
        $ss = 1024 if $ss >= 2048 && $hdgb <= 16;
        $ss = 512 if $ss < 512;
        $ss = int($hdgb * 128) if $ss > $hdgb * 128;
        $ss = 8192 if $ss > 8192;
        $swapsize_kb = int($ss * 1024) & ~0xFFF; # align to 4 MB to avoid all to odd SWAP size
    }

    return $swapsize_kb;
}

Zunächst prüft der Installer, ob wir manuell einen Wert für Swap vorgegeben haben. In diesem Falle wird unser gewünschter Wert verwendet und keine weitere Berechnung durchgeführt.

Haben wir keinen Wunsch angegeben, wird die Größe des Swap Speichers nach folgendem Schema errechnet:

  • Wenn der Arbeitsspeicher weniger als 4 GB beträgt und die Festplattengröße mindestens 64 GB, wird die Swap-Größe auf 4 GB gesetzt.
  • Wenn der Arbeitsspeicher weniger als 2 GB beträgt und die Festplattengröße mindestens 32 GB, wird die Swap-Größe auf 2 GB gesetzt.
  • Wenn der Arbeitsspeicher mindestens 2 GB beträgt und die Festplattengröße höchstens 16 GB, wird die Swap-Größe auf 1 GB gesetzt.
  • Wenn der Arbeitsspeicher weniger als 512 MB beträgt, wird die Swap-Größe auf 512 MB gesetzt.
  • Wenn der Arbeitsspeicher größer ist als Festplattengröße in GB x 128, wird die Swap-Größe auf Festplattengröße x 128 gesetzt.
  • Wenn der Arbeitsspeicher mehr als 8 GB beträgt, wird die Swap-Größe auf 8192 MB begrenzt.

In den allermeisten Installationen bedeutet dies eine Größe von 8 GB Swap, wenn LVM verwendet wird.


Swap Space bei ZFS-basierter Installation

Haben wir uns bei der Installation für ein ZFS-basiertes System entschieden, verzichtet der Proxmox Installer auf das Anlegen eines Swap Space. Damit ist ein Auslagern des Hauptspeichers nicht möglich.

Falls allerdings der Hypervisor eine knappe RAM-Ausstattung besitzt und ein Swap Space eingerichtet werden soll, sollte man die folgenden Hinweise und Vorgehensweise beachten:

  • Swap Space sollte nie im ZFS Root Pool liegen, da es zu einer Race Condition kommen kann, wenn der Hypervisor sehr ausgelastet ist. Wir brauchen also einen separaten ZPool.
  • Um Platz für einen separaten, weiteren ZPool zu haben, sollte man bei der Installation zunächst nicht 100% der Disk Größe verwenden, sondern entsprechenden Platz lassen. Bei den heutigen Disk Größen von 500 GB und mehr kann man beruhigt die Größe des root-Filesystems verkleinern und Platz für eine weitere Partition lassen, die man nach der Installation manuell anlegt.
  • Nachdem alles installiert ist, sollte also noch Speicher auf den Disks frei sein. Nun kann man darauf zunächst eine weitere Partition anlegen und darin einen Swap Space einrichten.


Aber... brauchen wir überhaupt Swap Space auf einem Proxmox VE Hypervisor?

Das kommt ganz darauf an. Aber worauf und was sind die wichtigsten Faktoren?

Swap Space sollte in Erwägung gezogen werden, wenn

  • der Proxmox VE Hypervisor in Lastsituationen nicht ausreichend RAM Ressourcen besitzt, also wenn man für VMs eventuell mehr RAM brauchen könnte als im Hypervisor physisch verbaut sind (Ja, KSM - Kernel Samepage Merging - lindert unseren Schmerz etwas, kann aber auch nicht zaubern).
  • LXC Container zum Einsatz kommen, die Swap nutzen sollen. LXC Container haben keinen eigenen Swap Space. Da sie den Host Kernel verwenden, benutzen sie auch dessen Swap Space gerade mit.

Wir nutzen häufig ZPools und verzichten auch häufig auf die Einrichtung eines Swap Space - wenn die oben aufgeführten Ausnahmen in der entsprechenden Umgebung keine Rolle spielen.

Relevante Artikel in unserem Blog