Exadataに即したHuge PagesまたはTransparent Huge Pages (2025/03/27)
Exadataに即したHuge PagesまたはTransparent Huge Pages (2025/03/27)
https://blogs.oracle.com/exadata/post/huge-pages-or-transparent-huge-pages-in-context-of-exadata
投稿者: Maruti Sharma | Senior Principal Product Manager
ブログ・シリーズ「Huge Pages: In the context of Exadata」のパート1で、巨大なページとそのメリットについて説明しました。このブログでは、静的Huge PagesとTransparent Huge Pagesについて説明します。これは、Huge Pagesを動的に割り当てる手法です。データベース(特にOracle)は、Linux x86-64ベースのシステムで実行する場合、データがメモリー内に存在し、基礎となるストレージからフェッチされていない場合に優れたパフォーマンスを提供します。データベース・インスタンスが起動される前に、Oracleデータベースの大きなメモリーを構成するために、Huge Pagesが事前に割り当てられています。データベースの実行時には、Huge Pagesが重要なパフォーマンス最適化の役割を果たしています。頻繁に使用されるデータは、特にミッション・クリティカルなトランザクション・データベースでメモリーに保持され、読取りレイテンシが最も低く、データベース・パフォーマンスを最適化するための重要な機能となります。データベース・バッファ・キャッシュを含むシステム・グローバル領域(SGA)と呼ばれる大量のメモリーが、データベース・ワークロードに割り当てられます。 このブログでは、巨大なページや透明な巨大なページのシナリオが極端なパフォーマンスを提供するのに有益であることを説明します。
Huge Pagesとは?
システム・メモリーは、ページと呼ばれるブロック単位で編成されます。Linux x86ベースのシステムのページは、サイズが4K (4096バイト)で、合計メモリーがテラバイトに拡大されます。1ギガバイトのメモリーを持つシステムには、4Kページ・サイズを使用する256,000ページがあります。CPUのメモリー管理ユニット(MMU)は、これらのページをすべて管理します。たとえば、標準の4K (4096バイト)ページ・サイズを使用するメモリーが1TB (テラバイト)のシステムでは、2億6800万ページ以上を管理する必要があるとします。多くのページを管理するためのMMUのオーバーヘッドは、パフォーマンスが低下する可能性があります。
Huge Pagesは、Oracle Linuxカーネルの機能であり、オペレーティング・システムでデフォルトの(4K)ページ・サイズより大きいメモリー・ページを使用できるようにします。メモリー割当てを最適化するために、Oracle Databaseなどのメモリー集約型アプリケーションでは、データベース・インスタンスを起動する前にHuge Pagesを使用できます。Oracleでは、Oracleシステム・グローバル領域にメモリーを割り当てる際に、2MBのHuge Pagesサイズ(1Gの大きいページ・サイズもある)を使用することをお薦めします。最適なパフォーマンスを得るには、すべてのOracle DatabaseSGAの集計割当て(サーバー上のすべてのデータベース・インスタンスのSGAサイズ)をヒュージ・ページ内に配置する必要があります。トピックの前のブログで、Huge Pagesの構成について説明しました。
Transparent Huge Pagesとは?
Transparent Huge Pages(THP)は、Linuxカーネル内のレイヤーで、有効にすると、特別なシステム・コールを使用してリクエストするアプリケーションにHuge Pagesを動的に割り当てることができます。Transparent Huge Pagesメモリーは、Huge Pagesカーネル・スレッドによってHuge Pagesが動的に割り当てられるため、標準のHuge Pagesメモリーとは異なります。標準または静的Huge Pagesメモリーは、インスタンスの起動時に事前に割り当てられており、実行時に変更されません。データベース・インスタンスは、停止時に、このメモリー・ブロックを使用可能なメモリー・プールに解放しません。
一部のアプリケーション・バイナリ(実行可能ファイルとも呼ばれる)は、Oracle実行可能ファイルと同様に、Huge Pagesを使用してキャッシュすることでメリットが得られ、実行時に追加のHuge Pagesの割当てをリクエストできます。実行時のTransparent Huge Pagesの割当てによって、このようなアプリケーションに必要なヒュージ・ページが提供されます。サーバーで実行されているOracle実行可能ファイルなどの大規模なアプリケーションのコンテキストでは、数千の4Kページを管理するのではなく、これらの実行可能ファイルが大きいページ・サイズを利用できるシナリオがある場合があります。THPは、再び2MBのページ・サイズで、実行時にHuge Pagesを動的に割り当てるため、アプリケーションの実行が改善されます。
標準的なHuge Pagesを割り当てたため、Transparent Huge Pagesを構成するのはなぜですか。
データベース・インスタンス以外の大規模なアプリケーションが、Huge Pagesのメリットを得られる場合があります。多くのHuge Pages(アプリケーションとデータベースの両方)のメモリーを事前割当てまたは予約すると、システムで実行されている他のプロセスで使用可能なメモリーが削減されます。大規模なアプリケーションでメモリーのチャンクが必要な場合、実行時にヒュージ・ページを割り当てることができます。これらのHuge PagesはTransparent Huge Pagesと呼ばれます。
データベースでは、静的Huge Pagesを使用して、スワッピングが最小限で、最も頻繁にアクセスされるデータがメモリーに常駐するようにします。静的Huge Pagesの構成によってメモリーが事前に割り当てられるため、必要な数のHuge Pagesを超えて割り当てる必要はなく、データベース・インスタンスが停止しても解放されません(Huge Pagesとして割り当てられます)。アプリケーションによっては、大きなページ・サイズを使用して、Huge Pagesを動的にリクエストすることでスワッピングを排除することもできます。これらのページは、アプリケーションが必要ないときにリリースされます。Oracleは、Oracle Databaseエンジンのコンパイル済命令を含む実行可能ファイルに、その大きい.textリージョンがあります。このようなアプリケーションです。このリージョンは読取り専用であり、問合せ処理、メモリー管理およびI/O操作のコア・ロジックを保持するため、実行中に頻繁にアクセスされます。.textリージョンが大きい場合、オペレーティング・システムは数千の標準4Kページを割り当て、オペレーティング・システムで管理する必要があります。大きい.textリージョンには、OracleがSQL文を実行し、トランザクションを管理し、並行処理するため、頻繁にアクセスします。Transparent Huge Pagesを使用すると、割当てによってページの境界が狭くなり、ページ表の参照が減少し、メモリー使用率が向上します。
アプリケーションはTransparent Huge Pagesをどのようにリクエストしますか。
実行時にHuge Pagesが必要なアプリケーションがある場合はどうなりますか。ここで、transparent_hugepageのmadviseパラメータが役立ちます。「madvise」がTransparent Huge Pages用に構成され、アプリケーションがHuge Pagesを要求するためにmadviseシステム・コールを行うと、Huge Pagesが割り当てられます。実行時にHuge Pagesを必要とするアプリケーションでは、madviseシステム・コールを明示的に使用して、アプリケーションのパフォーマンスを最適化するために、メモリーのニーズおよびHuge Pagesのそれぞれの割当てについてカーネルに通知する必要があります。madvise呼び出しを行うように構成されていないその他のアプリケーションは、Transparent Huge Pagesを使用できません。
Oracleでは、23ai Oracleから、Transparent Huge Pagesを有効にして、Oracle実行可能ファイルのような大規模なアプリケーションがTransparent Huge Pagesの利点を享受できるようにすることをお薦めします。すべてのデータベース・インスタンスに対して構成された集計SGAサイズが、Huge Pages内のメモリー要件に100%適合するように、静的Huge Pagesを割り当てる必要があります。Oracle Database SGAは、その目的のために事前に割り当てられている静的Huge Pagesを介して割り当てることをお薦めします。
2つの推奨事項の物語
Oracle Database 23aiより前のデータベースの場合、Oracleでは静的Huge Pagesの構成および使用をお薦めします。Oracle Database 23ai以降、Oracleでは、データベースで最新のUEKの改善を活用できるように、Transparent Huge Pagesと静的ヒュージ・ページを有効にすることをお薦めします。よいニュースは、Exadata X8M以降では、Exadata System Software 25.1以降では、UEK7およびTransparent Huge Pagesがデプロイメント中にすぐに有効になることです。以前のリリースからアップグレードし、Transparent Huge Pagesが設定されているかどうかを確認する場合は、次の方法で簡単に確認できます。ただし、最初に、Oracle Database 19cと23aiの両方が同じデータベース・サーバーに存在する場合の対処方法について説明します。
19cデータベースと23aiデータベースを同じサーバーで実行する場合
Oracle LinuxおよびExadataでは、Transparent Huge Pagesメモリーがデフォルトで有効になっています。kernelコマンドで使用されるmadviseパラメータは、Transparent Huge Pagesを有効にし、madviseシステム・コールを使用してアプリケーションによって明示的にリクエストされたメモリー領域にHuge Pagesを割り当てます。Oracle Database 19cおよび23aiが同じサーバーで実行されている場合、OracleではTransparent Huge Pagesをmadviseに設定することをお薦めします。
システムがTransparent Huge Pagesで構成されていることを確認しています
Exadataデータベース・サーバーがTransparent Huge Pagesで構成されているかどうかを確認するには、grubブート・ローダーのオプションと現在のメモリー管理設定を確認する必要があります。
grubのチェックは、'grep -i hugepage /boot/grub2/grub.cfg'を使用し、出力を確認するのと同じくらい簡単です。
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet numa=off transparent_hugepage=madvise"
現在のメモリー管理設定は、次を使用して決定できます。
'cat /sys/kernel/mm/transparent_hugepage/enabled'
出力は次のようになります。madviseの周りの角括弧は、これがアクティブな設定であることを示しています。
always [madvise] never
まとめ
Exadata環境のHuge Pagesでは、システムのメモリーを効率的に利用します。Oracle Databaseを実行する場合、最適なパフォーマンスを得るには、SGA全体(サーバー上のすべてのデータベース・インスタンスのSGAの合計)が静的Huge Pagesにあることを確認します。これにより、Oracle Databaseがメモリー不足にならず、負荷が高くなると断片化が発生しないことが保証されます。Oracle実行可能ファイルなどの大規模なアプリケーションが実行されると、大規模なOracle .textリージョンでは、Transparent Huge Pagesのmadviseパラメータを明示的に使用し、実行時にラージ・ページを割り当てます。これにより、アプリケーションを最も効率的な方法で実行できます。Oracle実行可能ファイルなどの大規模なアプリケーションの実行を最適化するために、データベース・メモリーの最適な使用とTransparent Huge Pagesの静的Huge Pagesを引き続き割り当てます。
コメント
コメントを投稿