私たちのチームと私は最近、仮想マシンでRedisを実行すると、次の警告が表示されることを確認しました。 「カーネルで透過的に巨大なページ(THP)サポートが有効になっているという警告です。
このトピックについて調査した結果、ほとんどのデータベースベンダーはTHPを無効にすることをお勧めします(必要でない場合)。いくつか言うと:
また、多くのディストリビューションでは、デフォルトでこの機能を有効にしていることがわかりました。
- 赤い帽子
- 中央オペレーティングシステム
- Ubuntu
- コアオペレーティングシステム
質問は次のとおりです。
- デフォルトで有効になっているのはなぜですか?
- クラスタ VM (さまざまな Docker コンテナを実行している CoreOS ベースの Kubernetes クラスタ) で THP を無効にすると発生する可能性のある欠点/リスクは何ですか?
答え1
THPは、アプリケーションのパフォーマンスを向上させるために、いくつかのLinuxディストリビューションでデフォルトで有効になっているLinux機能です。ただし、一部のオペレーティングシステムデータベースベンダーは製品のパフォーマンスを低下させるため、これはお勧めできません。
~からRed-HAT ドキュメント(THPが有効になった理由):
THPの目標はパフォーマンスの向上であるため、開発者(コミュニティとRed Hat)は、さまざまなシステム、構成、アプリケーション、およびワークロードでTHPをテストして最適化しました。これにより、THPのデフォルト設定がほとんどのシステム構成でパフォーマンスを向上させることができます。ただし、データベース・ワークロードにはTHPは推奨されません。
から:Oracleドキュメント(THPを無効にする理由は何ですか?)
残念ながら、透明な大容量ページはOracleデータベースでは正常に機能しないため、RACのインストール時のノードの再起動と単一インスタンスとRACのインストール時のパフォーマンスの問題に関連しています。したがって、Oracleは、Oracleデータベースを実行しているすべてのサーバーで透明な大容量ページを無効にすることをお勧めします。
クラスタ化されたVMでTHPを無効にすると発生する可能性がある欠点/リスクは何ですか?
THPを有効にすることは、以下を防止するセキュリティ機能です。mmap
洪水攻撃。
mmap
ただし、この機能を活用するようにアプリケーションをさらに最適化できます。たとえば、以前はmalloc(4k)あたりの多数のシステムコールを防ぐために最適化されていました。現時点では、ユーザースペースの最適化は必須ではありません。khugepagedは、大容量メモリを処理するhugepage対応アプリケーションの場合でも、すでに長期ページ割り当てを処理できます。