Nachdem Ubuntu 14.04 LTS jetzt schon über zwei Monate alt ist, habe ich die ersten Server migriert. Ich hatte gehofft, dass die meisten schlimmen Fehler inzwischen behoben sind und man das System ohne größere Probleme betreiben kann.
Als ich den ersten Server für Virtualisierung migrierte, erwies sich meine Annahme aber leider als falsch. Zunächst liefen die Gast-Betriebsysteme ohne Probleme und dank der Technik Hyper V von Microsoft auch viel schneller als vorher. Je nach Auslastung wurden sie aber zunehmend langsamer und stürzten nach 3 bis 12 Stunden ganz ab. Die Windows-Gäste standen dann im Bluescreen und die Linux-Gäste hatten eine Kernelpanik.
Wie sich zeigte gibt es im Linux-Kernel 3.13 von Ubuntu 14.04 wohl noch einige Bugs, die früher oder später für einen Absturz der Gast-Betriebssysteme sorgen:
- https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1308341
- https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1332409
- https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1307473
- https://peterkieser.com/2014/06/22/openvswitch-and-libvirt-vnet-port-russian-roulette-on-restart-solution/
Nach diversen erfolglosen Versuchen das Problem in den Griff zu bekommen, stieß ich auf einen Blog-Post von Peter Kieser. Dieser machte den Vorschlag, den erprobten Linux-Kenel 3.10 mit Langzeitsupport für Ubuntu 14.04 zu kompilieren. Dieser Kernel wird auch bei RedHat Enterprise Linux verwendet, ist für Virtualisierung erprobt und er löste alle meine Probleme! Und dies geht wie folgt (ggf. kann man natürlich auch einen neueren Patchlevel des 3.10er Kerbels verwenden):
apt-get -y install build-essential
cd /usr/local/src
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.46.tar.xz
tar -Jxf linux-3.10.46.tar.xz
cd linux-3.10.46
cp /boot/config-`uname -r` .config
make olddefconfig
make -j`nproc` INSTALL_MOD_STRIP=1 deb-pkg
dpkg -i ../*.deb
apt-mark hold linux-libc-dev
Außerdem machte Peter Kieser noch einige Tuning Vorschläge, die er auch durch den Vergleich mit RedHat Enterprise Linux gefunden hatte. Ich habe mir davon die Verwendung des e1000 Netzwerkkartentreibers bei den Windows-Gästen, die Einträge für Hyper V in der Konfig der Windows-Gäste, die Anpassung von Grub und die Einträge in der /etc/sysctl.conf abgeschaut.
Einträge für Hyper V in der Konfig der Windows-Gäste
In die Konfig der Windows-Gäste müssen – sofern noch nicht vorhanden – die folgenden Zeilen in den Abschnitt „features“ eingetragen werden:
In die Konfig der Windows-Gäste gelangt man am einfachsten, wenn man in der virsh
edit
eingibt. Man landet dann mit einem vi in der Konfig und wenn man den vi beendet, wird die Konfig auch gleich richtig gespeichert.
Die Datei sollte nach den Änderungen etwa wie folgt aussehen:
WKSNUE01cce892d2-8fee-3add-f25d-6a46b1f14268419430441943041hvmdestroyrestartrestart/usr/bin/kvm
<address><address><address><address><input type="tablet"> <input type="mouse"> <input type="keyboard"><address><video width="300" height="150">
<model type="vga" vram="9216" heads="1">
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0">
<memballoon model="virtio">
<address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x0">
</address></memballoon></address></model></video></address></address></address></address></address>
Anpassung von Grub
In der Datei „/etc/default/grub“ sollten für den Linux-Kernel „Headline scheduler“, and „transparent hugepages“ eingeschaltet werden. Dies macht macht man in der Variable „GRUB_CMDLINE_LINUX_DEFAULT“. Die Zeile mit der Variable sollte dazu wie folgt aussehen.
GRUB_CMDLINE_LINUX_DEFAULT="elevator=deadline transparent_hugepage=always"
Damit die Anpassung aktiv wird muss man noch den folgenden Befehl eingeben.
update-grub
Einträge für die Datei /etc/sysctl.conf
kernel.sched_min_granularity_ns=10000000
kernel.sched_wakeup_granularity_ns=15000000
vm.dirty_ratio=10
vm.dirty_background_ratio=5
vm.swappiness=10
Schreibe einen Kommentar