LoginSignup
11
11

More than 5 years have passed since last update.

[ Linux ] CentOS7 grubの編集 (transparent hugepage無効化設定編)

Last updated at Posted at 2016-01-06

以下メモ

0.transparent hugepage

「透過的」にhugepageを利用できる仕組み
linuxでは4KB のページ(page)と呼ばれるblockでメモリを扱うことになっている。
2MBのhugepageを使うと単位が大きいのでブロックへのアクセスがより楽になる => メモリアクセス時間短縮につながる。らしい。
透過的(transparent)というのは「あらかじめhugepage用のメモリ領域を確保しておくめんどくさい手続きが必要なくhugepageの仕組みを利用できる」とかそんなかんじの意味。
略称THP
デメリットはブロック単位が大きいので小さいメモリで十分なのに2MB割り当ててしまう=> メモリ無駄使いになる ということ。
というわけでこの設定を無効化します。

1. THPの設定確認


cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
[always] madvise never
#または
cat /sys/kernel/mm/transparent_hugepage/enabled


centos7だと多分THPの設定が標準でalwaysになってる。

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

これでneverに変更できるけどサーバリブートすると元に戻る。
じゃあどうするか。grubを編集しよう。

2. grub2の編集

正確にはcentos7なのでgrub2の編集ということになる。
centos6だと/boot/grub/menu.lstまたは/boot/grub/grub.conf(シンボリックリンク先の /etc/grub.conf)を直接編集すればよかったのですが、centos7だと違う。
手順としては
1. /etc/default/grubを編集
2. grub2-mkconfig
3. reboot
という流れでやってみます

3. transparent_hugepage=never の設定をgrubに追加

設定前はこんなかんじ
cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=jp106 rd.lvm.lv=centos/root crashkernel=auto  rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

cat /etc/grub2.cfg
#長いので中略このあたりにGRUB_CMDLINE_LINUXの設定がある??
        linux16 /vmlinuz-3.10.0-123.4.4.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=jp106 rd.lvm.lv=centos/root crashkernel=auto  rhgb quiet LANG=en_US.UTF-8
        initrd16 /initramfs-3.10.0-123.4.4.el7.x86_64.img
#中略

GRUB_CMDLINE_LINUXの項目に設定追記(transparent_hugepage=never)します

この項目だけ変えた。
vi /etc/default/grub
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=jp106 rd.lvm.lv=centos/root crashkernel=auto transparent_hugepage=never rhgb quiet"

その後 grub2-mkconfig を実行してvagrantなのでvagrant haltしてからvagrant up

4. 結果

うーん。。。この方法でよいのかどうかよくわからない。
1. 例えばecho always > /sys/kernel/mm/transparent_hugepage/enabledとしてからサーバリブートしてみるとまたneverに戻ってたのでデフォルトの設定は確かに「THP無効」となった
2. だけどcat /etc/grub2.cfgでもう一度確認してもtransparent_hugepage=neverという設定を確認することが出来ない!なぜだろうか、、、、

と思ったら以下のオプションで解決しました!

grub2-mkconfig -o /boot/grub2/grub.cfg ##BIOS搭載だとこうなる 

####UEFIだと以下のようにする
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

もう一度cat /etc/grub2.cfgで確認するとtransparent_hugepage=neverが反映されてました

というわけで正しい手順は
1 /etc/default/grubを編集
2 grub2-mkconfig -o /boot/grub2/grub.cfg(または/etc/grub2.cfg)を実行
3 リブート

となりそうです。

11
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11