基盤となる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
よりも賢い状況はありますか?
これは、オプトイン(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を誤って使用している場合。