このようなオプションを永続的にするには、通常、それらをファイル /etc/sysctl.conf
に追加します .このコマンドを使用して、利用可能なオプションの完全なリストを表示できます:
$ sysctl -a
例
$ 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
hugepage
を探すことができます 次のように出力されます:
$ 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
ないの?
しかし、出力を見てみると transparent_hugepage
はありませんでした .もう少しグーグルで検索すると、まさにこのトピックについて説明しているこのOracleページに出くわしました。このページのタイトルは次のとおりです:Linux での Oracle 用の HugePages の構成 (x86-64)。
具体的には、そのページで、hugepage 機能を無効にする方法について言及しています。
抜粋
<ブロック引用>透過的な HugePages を無効にする推奨方法は、「/etc/grub.conf」ファイルのカーネル ブート行に「transparent_hugepage=never」を追加することです。
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
これを有効にするには、サーバーを再起動する必要があります。
または、コマンドを /etc/rc.local
に追加することもできます ファイル。
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
最初のオプションは、あるカーネルから次のカーネルにアップグレードするときに設定が解除されるリスクがあるため、2 番目のオプションを使用すると思います。
再起動後、次のコマンドで動作することを確認できます:
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
MariaDB の TokuDB を有効にするために、CentOS v6 で透明なヒュージページを無効にしようとしていたので、この質問に追加したかっただけです。 @slm が言及したスクリプトを /etc/rc.local
に追加しました そして、透過的なヒュージページを無効にしました。ただし、Linux での起動スクリプトの動作方法により、/etc/rc.local
すべてのサービスが開始された後に実行されます。そのため、MariaDB が既に開始された後に透過的なヒュージ ページが無効になり、TokuDB エンジンが初期化されませんでした。透過的な hugepage を無効にする唯一の方法は、transparent_hugepage=never
を追加することです。 カーネルパラメータに。
@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.
に気付きました CentOS が /etc/default/grub
をサポートしていないことがわかりました ファイルと transparent_hugepage=never
について心配していました 更新時にカーネルパラメーターから消えます。しかし、心配する必要はありません。CentOS は、カーネル パラメータに加えられた変更を grub に保持するように設定されているため、更新時に保持されます。
また、grub のカーネル パラメータを変更する適切な方法は、grubby
を使用することです。 . transparent_hugepage=never
を追加するこの簡単なスクリプトを作成しました 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
EC2 Ubuntu 16.04 では上記のすべてが機能しませんでしたが、これは機能しました:
sudo apt install hugepages
sudo hugeadm --thp-never