TRANSPARENT HUGE PAGE (THP) の設定

Linuxのカーネル2.6.37あたりからTransparent Huge Page (THP)という機能が使えるようになりました。

メモリ大容量化に伴う旧来のメモリ割り当ての問題を改善する目的で導入された機能になります。

TRANSPARENT HUGE PAGE (THP)とは

Linuxのカーネルはページという単位でメモリを管理して割り当てています。

これまで1ページ4KBのサイズが割り当てられていました。

しかしメモリが急激に大容量化するのに伴い管理するページ数や管理テーブルの段数が多くなりました。

そしてメモリを管理するコストがパフォーマンス上の影響を及ぼすようになってきました。

TRANSPARENT HUGE PAGE (THP)は大きなメモリサイズのページを透過的に割り当てることで問題を解決しようとする機能です。

とは言え、以下に示すメリット・デメリットを理解した上でTHPを使用する必要があります。

実際使用するアプリケーションで十分なベンチマークテストを行い、結果を十分に吟味した上で判断しましょう。

メリット

THPは事前のHuge Pageの割り当て設定がなくても透過的に利用できるので、お手軽にHuge Pageが利用できます。

メモリの使い方によってはアプリケーションのパフォーマンスが大きく改善する可能性があります。

デメリット

THPが有効になっていると逆にパフォーマンスが低下するアプリケーションも報告されています。

主にメモリが従来の割り当て方式でチューニングされているDB関連でパフォーマンス低下の問題が起きやすいようです。

THPに付随する同期的なメモリ圧縮を無効化すると改善することもあるようです。

THPの設定

設定する前にTHPの現在値を確認しておきましょう。

※カーネルコンパイル時のCONFIGでTHP機能が有効になっていないと、当然THP関連パラメータ自体が存在しません。(もちろんTHPは無効です)

※カスタムカーネルでない限り、ほどんどのディストリビューションで存在するので気にしなくてもいいかもしれません。

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

また、THPの同期的メモリ圧縮の有効・無効は以下で確認できます。

# cat /sys/kernel/mm/transparent_hugepage/defrag

設定値の意味は以下の通りです。

  • always: 機能を使用します
  • madvise: madviseシステムコールで指定された領域のみ機能を使用します
  • never: 機能を使用しません

設定

設定値の確認の時に参照したパラメータに値を書き込むだけです。

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