GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Deaktivieren Sie transparente Hugepages

Um Optionen wie diese dauerhaft zu machen, fügen Sie sie normalerweise der Datei /etc/sysctl.conf hinzu . Mit diesem Befehl können Sie eine vollständige Liste der verfügbaren Optionen anzeigen:

$ sysctl -a

Beispiel

$ sudo sysctl -a | head -5
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 6000000
kernel.sched_latency_ns = 18000000
kernel.sched_wakeup_granularity_ns = 3000000
kernel.sched_shares_ratelimit = 750000

Sie können nach hugepage suchen in der Ausgabe so:

$ sudo sysctl -a | grep hugepage
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.hugepages_treat_as_movable = 0
vm.nr_overcommit_hugepages = 0

Es ist nicht da?

Beim Durchsehen der Ausgabe habe ich jedoch transparent_hugepage nicht gesehen . Beim Googeln bin ich auf diese Oracle-Seite gestoßen, auf der genau dieses Thema behandelt wird. Die Seite trägt den Titel:Konfigurieren von HugePages für Oracle unter Linux (x86-64).

Auf dieser Seite wird speziell erwähnt, wie man die Hugepage-Funktion deaktiviert.

Auszug

Die bevorzugte Methode zum Deaktivieren von Transparent HugePages besteht darin, "transparent_hugepage=never" zur Kernel-Boot-Zeile in der Datei "/etc/grub.conf" hinzuzufügen.

   title Oracle Linux Server (2.6.39-400.24.1.el6uek.x86_64)
            root (hd0,0)
            kernel /vmlinuz-2.6.39-400.24.1.el6uek.x86_64 ro root=/dev/mapper/vg_ol6112-lv_root rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=uk
    LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  rd_NO_DM rd_LVM_LV=vg_ol6112/lv_swap rd_LVM_LV=vg_ol6112/lv_root rhgb quiet numa=off
    transparent_hugepage=never
            initrd /initramfs-2.6.39-400.24.1.el6uek.x86_64.img

Damit dies wirksam wird, muss der Server neu gestartet werden.

Alternativ können Sie den Befehl zu Ihrem /etc/rc.local hinzufügen Datei.

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

Ich denke, ich würde mich für die 2. Option entscheiden, da bei der ersten die Gefahr besteht, dass sie unscharf wird, wenn Sie von einem Kernel auf den nächsten upgraden.

Sie können nach dem Neustart mit dem folgenden Befehl bestätigen, dass es funktioniert hat:

$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

Ich wollte diese Frage nur ergänzen, da ich versuchte, transparente Hugepages auf CentOS v6 zu deaktivieren, um TokuDB für MariaDB zu aktivieren. Ich habe das von @slm erwähnte Skript zu /etc/rc.local hinzugefügt und es hat transparente Hugepages deaktiviert. Aufgrund der Art und Weise, wie Startskripts unter Linux funktionieren, /etc/rc.local wird ausgeführt, nachdem alle Dienste gestartet wurden. Daher wurden transparente riesige Seiten deaktiviert, nachdem MariaDB bereits gestartet war und die TokuDB-Engine nicht initialisiert werden konnte. Die einzige andere Möglichkeit, transparente Hugepages zu deaktivieren, ist das Hinzufügen von transparent_hugepage=never zum Kernelparameter.

Mir ist @Rwkys Kommentar You can make the first option survive kernel updates by adding transparent_hugepage=never to the GRUB_CMDLINE_LINUX_DEFAULT option in /etc/default/grub on most distributions. aufgefallen und fand heraus, dass CentOS den /etc/default/grub nicht unterstützt Datei und machte sich Sorgen um transparent_hugepage=never verschwindet aus den Kernel-Parametern, wenn es aktualisiert wird. Aber keine Sorge, CentOS ist so eingerichtet, dass alle Änderungen an den Kernel-Parametern in Grub beibehalten werden, sodass sie bei einer Aktualisierung beibehalten werden.

Außerdem ist der richtige Weg, die Kernel-Parameter für Grub zu ändern, mit grubby . Ich habe dieses einfache Skript erstellt, um transparent_hugepage=never hinzuzufügen zu jedem Kernel mit grubby :

#!/bin/sh

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

for KERNEL in /boot/vmlinuz-*; do
    grubby --update-kernel="$KERNEL" --args='transparent_hugepage=never'
done

All dies hat bei mir auf einem EC2 Ubuntu 16.04 nicht funktioniert, aber das hier:

sudo apt install hugepages
sudo hugeadm --thp-never

Linux
  1. So deaktivieren Sie ETag in NGINX

  2. Linux – Kernel:Namespaces-Unterstützung?

  3. Ethernet dauerhaft deaktivieren, um die Startzeit zu beschleunigen?

  4. Deaktivieren Sie den Wartungsmodus in Magento

  5. CentOS / RHEL 6 :So deaktivieren Sie Transparent Huge Pages (THP)

Dmesg-Befehl unter Linux

Sysctl-Befehl unter Linux

Ist Linux ein Betriebssystem oder ein Kernel?

Linux-Kernel vs. Mac-Kernel

CentOS / RHEL 7:Deaktivieren von Transparent Huge Pages (THP)

Wie kann die Socket-Erstellung für einen Linux-Prozess für Sandboxing deaktiviert werden?