Untuk membuat opsi seperti ini permanen, Anda biasanya akan menambahkannya ke file /etc/sysctl.conf
. Anda dapat melihat daftar lengkap opsi yang tersedia menggunakan perintah ini:
$ sysctl -a
Contoh
$ 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
Anda dapat mencari hugepage
dalam output seperti ini:
$ 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
Tidak ada?
Namun melihat melalui output saya tidak melihat transparent_hugepage
. Googling sedikit lagi saya menemukan halaman Oracle ini yang membahas topik ini. Halaman tersebut berjudul:Mengonfigurasi HugePages untuk Oracle di Linux (x86-64).
Khususnya di halaman tersebut mereka menyebutkan cara menonaktifkan fitur hugepage.
kutipan
Metode yang disukai untuk menonaktifkan HugePages Transparan adalah menambahkan "transparent_hugepage=never" ke baris boot kernel di file "/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
Server harus di-boot ulang agar ini berlaku.
Atau Anda dapat menambahkan perintah ke /etc/rc.local
Anda berkas.
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
Saya pikir saya akan menggunakan opsi ke-2, karena yang pertama berisiko tidak disetel saat Anda memutakhirkan dari satu kernel ke kernel berikutnya.
Anda dapat mengonfirmasi bahwa ini berfungsi dengan perintah berikut setelah mem-boot ulang:
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
Saya hanya ingin menambahkan pertanyaan ini karena saya mencoba untuk menonaktifkan halaman besar transparan di CentOS v6 untuk mengaktifkan TokuDB untuk MariaDB. Saya menambahkan skrip yang disebutkan oleh @slm ke /etc/rc.local
dan itu menonaktifkan halaman besar transparan. Namun, karena cara kerja skrip startup di Linux, /etc/rc.local
dijalankan setelah semua layanan dimulai. Oleh karena itu, halaman besar transparan dinonaktifkan setelah MariaDB sudah dimulai dan mesin TokuDB tidak dapat diinisialisasi. Satu-satunya cara lain untuk menonaktifkan halaman besar transparan adalah dengan menambahkan transparent_hugepage=never
ke parameter kernel.
Saya perhatikan komentar @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.
dan menemukan bahwa CentOS tidak mendukung /etc/default/grub
file dan khawatir tentang transparent_hugepage=never
menghilang dari parameter kernel ketika diperbarui. Tapi jangan khawatir, CentOS diatur untuk menyimpan setiap perubahan yang dibuat pada parameter kernel di grub sehingga ketika diperbarui, perubahan itu disimpan.
Sebagai tambahan, cara yang tepat untuk memodifikasi parameter kernel untuk grub adalah dengan grubby
. Saya membuat skrip sederhana ini untuk menambahkan transparent_hugepage=never
ke setiap kernel dengan 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
Semua hal di atas tidak berfungsi untuk saya di EC2 Ubuntu 16.04, tetapi ini berhasil:
sudo apt install hugepages
sudo hugeadm --thp-never