web-dev-qa-db-ja.com

トランスペアレントヒュージページの構成。 [always]、[madvise]、または[never]

基盤となるMariaDBデータベースでApacheを実行する汎用Centos 7 LAMPスタックサーバーがたくさんあります。

RHEL 6のRedHatパフォーマンスチューニングドキュメント から:

Trasparent Hugepages(THP)は、システム管理者や開発者から巨大なページを使用する際の複雑さの多くを隠します。 THPの目標はパフォーマンスの向上であるため、開発者(コミュニティとRed Hatの両方)は、幅広いシステム、構成、アプリケーション、およびワークロードにわたってTHPをテストおよび最適化しています。これにより、THPのデフォルト設定により、ほとんどのシステム構成のパフォーマンスが向上します。ただし、THPはデータベースワークロードには推奨されません。

データベースセクションまでは素晴らしいですね。実際、TokuDBエンジンなどの一部のMariaDBオプションでは、THPを無効にする必要があります。

THPを無効にするために見つけた多くのガイドは、デフォルト構成をtransparent_hugepages= alwaysからneverに変更するように指示しています。

ただし、 RHEL 7のRedHat Performance Tuning docs から:

アプリケーションが必要以上のメモリリソースを割り当てないようにするには、システム全体で巨大なページを無効にし、MADV_HUGEPAGE madvise領域内でのみ有効にします。

私がこの権利を読んだ場合、transparent_hugepages= madviseははるかに優れたオプションのように思われ、THPの恩恵を受けるプロセスはそれらを使用でき、そうでないプロセスは使用できるようになります。

私は 1つの記事 を見つけてこのアプローチを提案しました。

これがデフォルトのオプションではないのはなぜですか?

transparent_hugepages= neverの使用がmadviseよりも賢い状況はありますか?

5
Arth

これは、オプトイン(madvise)とオプトアウト(常に)の違いです。 THPに敏感なアプリケーションは、_transparent_hugepages=always_でもオプトアウトできます。たとえば、jemallocを使用するアプリケーションは特に影響を受けやすく(redis、go rt、Rust rt))、jemallocはコンパイル時にMADV_NOHUGEPAGEを使用するアロケータ構成の一部としてオプションを提供します。カーネル3.15(RHEL7は3.10に同梱)、prctl(PR_SET_THP_DISABLE)を使用してプロセスごとにオプトアウトできます。

データの局所性は、大規模な割り当てを行うアプリケーションにとって非常に一般的なプロパティであるため、デフォルトのalwaysは通常は問題ありません。データベースは、多数の大きな割り当てにわたって小さなチャンクへのアクセスに苦しんでいる(そしてTHPを無効にすることができる)注目すべき例外です。

transparent hugepages のカーネルのドキュメントでは、_transparent_hugepage=never_は推奨される解決策よりもデバッグオプションのほうが多いことが示されています。ソフトウェアにバグがある場合にのみ_transparent_hugepage=madvise_を使用することをお勧めします。すなわち。開発者がMADV_HUGEPAGEを誤って使用している場合。

4
Andrew Domaszek