Skip to Main Content

Breadcrumb

Probleme mit Huge Pages

Probleme mit Transparent Huge Pages on SLES11, RHEL6, OL6 und UEK2 Kernel (Linux x86, Linux x86_64)

Welchen Vorteil bringt der Einsatz von Huge Pages?

Die Oracle Datenbank unterstützt seit einigen Releases die Huge Page Funktionalität unter Linux um das Memory Management innerhalb der SGA zu optimieren. Mit diversen Performance Benchmarks kann man einen Performanceunterschied im Bereich von 5-10% nachweisen. Der Nachteil war lange zeit, dass man die Huge Pages vorab konfigurieren musste, wodurch eine Größenveränderung der SGA oft eine Downtime bedeutet hat.

Transparent Huge Pages sind mit den o.a. Linux Versionen / Kernel verfügbar und standardmäßig aktiviert. Im Gegensatz zu den von Oracle schon für frühere Linux Versionen dringend empfohlenen Huge Pages, können Transparent Huge Pages über den khugepaged thread im Kernel dynamisch konfiguriert werden, während die traditionellen Huge Pages schon nur bei Systemstart konfiguriert werden.

Nachdem es im vor allem im RAC Umfeld immer wieder zu unerwarteten Systemabstürzen und Performance Problemen im Zusammenhang mit Transparent Huge Pages gekommen ist, empfiehlt Oracle diese zu deaktvieren (auch in Single-Instance Umgebungen).

Wie stellt man fest ob Transparent Huge Pages aktiviert sind?

# cat /sys/kernel/mm/[redhat_]transparent_hugepage/[enabled|defrag] [always] never

oder

# grep AnonHugePages /proc/meminfo

Wie kann man diese Einstellung ändern?

# echo "never" > /sys/kernel/mm/[redhat_]transparent_hugepage/[enabled|defrag]
# cat /sys/kernel/mm/[redhat_]transparent_hugepage/[enabled|defrag] always [never]

Wie kann man diese Einstellung beim Systemstart ändern?

Fügen sie folgende Zeilen in /etc/rc.local ein (analog auch für RedHat Kernel bzw. SLES11 SP3)

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

oder
Fügen sie transparent_hugepage=never in /boot/grub/grub.conf für den entsprechenden Kernel ein, z.B.

title Oracle Linux Server (2.6.32-300.25.1.el6uek.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-300.25.1.el6uek.x86_64 ro root=LABEL=/ transparent_hugepage=never
initrd /initramfs-2.6.32-300.25.1.el6uek.x86_64.img

Für UEK2 Kernel ab 2.6.39-400.116.0 gibt es keine Transparent Huge Pages, daher existiert /sys/kernel/mm/transparent_hugepage/* nicht.