GNU/Linux >> Znalost Linux >  >> Linux

zakázat průhledné velké stránky

Chcete-li, aby byly možnosti jako toto trvalé, obvykle je přidáte do souboru /etc/sysctl.conf . Úplný seznam dostupných možností můžete zobrazit pomocí tohoto příkazu:

$ sysctl -a

Příklad

$ 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

Můžete hledat hugepage ve výstupu takto:

$ 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

Není tam?

Při pohledu na výstup jsem však neviděl transparent_hugepage . Když jsem trochu víc googloval, narazil jsem na tuto stránku Oracle, která pojednává právě o tomto tématu. Stránka se jmenuje:Konfigurace HugePages pro Oracle na Linuxu (x86-64).

Konkrétně na této stránce zmiňují, jak deaktivovat funkci hugepage.

úryvek

Preferovanou metodou pro deaktivaci Transparent HugePages je přidání "transparent_hugepage=never" do zaváděcího řádku jádra v souboru "/etc/grub.conf".

   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

Aby se to projevilo, musí být server restartován.

Případně můžete přidat příkaz do /etc/rc.local soubor.

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

Myslím, že bych zvolil 2. možnost, protože první bude vystavena riziku deaktivace, když upgradujete z jednoho jádra na další.

Po restartu můžete potvrdit, že to fungovalo pomocí následujícího příkazu:

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

Chtěl jsem k této otázce jen přidat, když jsem se snažil zakázat transparentní obrovské stránky na CentOS v6, abych povolil TokuDB pro MariaDB. Do /etc/rc.local jsem přidal skript zmíněný @slm a deaktivoval průhledné velké stránky. Vzhledem k tomu, jak fungují spouštěcí skripty v Linuxu, /etc/rc.local se provede po spuštění všech služeb. Proto byly transparentní velké stránky deaktivovány poté, co byla MariaDB již spuštěna a motor TokuDB se neinicializoval. Jediný další způsob, jak zakázat transparentní velké stránky, je přidání transparent_hugepage=never na parametr jádra.

Všiml jsem si komentáře @Rwky 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. a zjistili, že CentOS nepodporuje /etc/default/grub soubor a měl obavy o transparent_hugepage=never po aktualizaci zmizí z parametrů jádra. Ale nebojte se, CentOS je nastaven tak, aby uchoval všechny změny parametrů jádra v grub, takže když je aktualizován, zůstanou zachovány.

Chcete-li také přidat, správný způsob, jak upravit parametry jádra pro grub, je pomocí grubby . Vytvořil jsem tento jednoduchý skript pro přidání transparent_hugepage=never do každého jádra s 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

Všechno výše uvedené mi na EC2 Ubuntu 16.04 nefungovalo, ale toto ano:

sudo apt install hugepages
sudo hugeadm --thp-never

Linux
  1. Linux – Kernel:Podpora jmenných prostorů?

  2. Trvale deaktivovat Ethernet, aby se urychlila doba spouštění?

  3. Jak zakázat SELinux na CentOS?

  1. Trasování jádra pomocí trace-cmd

  2. Zakázat režim údržby v Magento

  3. Jak zakážu přihlašování jádra do deníku systemd?

  1. Jak zakázat ETag v NGINX

  2. "Panika jádra"?

  3. Linux – Kernel IP Forwarding?