人生は、お天気いろいろ

日々の生活やプログラミング等に関するメモ・雑文を記載しています

Transparent HugePagesを無効化する

Oracle Database 11g R2では、透過的なHugePagesを無効化する必要があるらしい。

※ 12cのインストレーションガイドでは、そのような記述を見つけられなかったので、要調査

 

無効化するための手順をメモ。

 

そもそもTransparent HugePageとは?

メモリとは、pagesとよばれるブロックで管理されており、1pageは4096byteである。そのため、メモリ1MBは256pagesに該当する。

この各pageは、PTE(Page Table Entry)を参照し、仮想アドレスと物理アドレスマッピング情報を格納しているのだが、最近の大容量メモリの利用により、このマッピング情報が肥大化し、メモリが枯渇することがあるらしい。

 

※ 詳細は以下が詳しい。

大容量メモリに潜むメモリ枯渇問題その1 ~Linux HugePageの薦め~ | 技術ブログ| レック・テクノロジー・コンサルティング株式会社

大容量メモリに潜むメモリ枯渇問題その2 ~Linux HugePageの薦め~ | 技術ブログ| レック・テクノロジー・コンサルティング株式会社

大容量メモリに潜むメモリ枯渇問題その3 ~Linux HugePageの薦め~ | 技術ブログ| レック・テクノロジー・コンサルティング株式会社

大容量メモリに潜むメモリ枯渇問題その4 ~Linux HugePageの薦め~ | 技術ブログ| レック・テクノロジー・コンサルティング株式会社

大容量メモリに潜むメモリ枯渇問題最終回 ~Linux HugePageの薦め~ | 技術ブログ| レック・テクノロジー・コンサルティング株式会社

 

そこでメモリ枯渇を防ぐために、page sizeを拡大し、PTEのサイズを小さくするために利用されるのが、Huge pagesとなる。Hugepagesでは1pageあたり2MB(変更できるのかは、未確認)のサイズのブロックとなる。

 

Huge pagesの設定は、起動時に割り当てる必要があるのだが、そのHuge pagesの作成・管理・使用の多くを自動化する抽象化レイヤーがTransparent HugePage(透過的なHuge Pages)となる。

 

ちなみに、HugePagesを利用時自動メモリ管理を使用することができず、代わりに自動共有メモリ管理を利用することになる。

 

Transparent HugePageの確認方法

 Red Hat Enterprise Linuxカーネルの場合:

# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

その他のカーネルの場合:

# cat /sys/kernel/mm/transparent_hugepage/enabled

 

上記のコマンドを実行すると、以下のような結果が表示される。

ここでは、透過的なHugepPagesを使用している例を示す。

[always] madvise never

 

Transparent HugePages無効化の方法

 Transparent HugePagesを無効化するには、下記の手順を踏む。

 

1./etc/rc.localの編集

vi /etc/rc.localで下記を追加する

echo never > /sys/kernel/mm/transparent_hugepage/enabled

 

※ CentOS6.7では、/etc/grub.confにtransparent_hugepage=neverを

※ Transparent HugePageを無効化できなかった

 /boot/grub/grub.conf ファイルのカーネルコマンドラインに "transparent_hugepage=never" を追加しても、transparent hugepages (THP) を無効にすることができません。

 

Red Hat Enterprise Linux 6 で THP (transparent hugepages) を無効にしても有効にならない - Red Hat Customer Portal


 

2.再起動する

 再起動後、確認を行うと、以下のようになっており、Transparent HugePageが無効化されている。

always madvise [never]