GNU/Linux >> Linux の 問題 >  >> Linux

透過的なヒュージページを無効にする

このようなオプションを永続的にするには、通常、それらをファイル /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

Linux
  1. 「カーネルパニック」?

  2. Linux –カーネル:名前空間のサポート?

  3. Linux –カーネルIP転送?

  1. Linux – Linuxの汚染されたカーネル?

  2. CentOSでSELinuxを無効にする方法は?

  3. CentOS / RHEL 7 :透過的なヒュージ ページ (THP) を無効にする方法

  1. CentOS / RHEL 6 :透過的なヒュージ ページ (THP) を無効にする方法

  2. サンドボックス化のために、Linux プロセスのソケット作成を無効にする方法は?

  3. systemd ジャーナルへのカーネル ログを無効にするにはどうすればよいですか?