以下メモ
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 リブート
となりそうです。