この付録では、HugePagesを使用して、Linuxオペレーティング・システムのラージ・ページ表によりメモリーを最適化するための構成情報について説明します。内容は次のとおりです。
HugePagesを構成することを選択できます。いくつかの用途では、HugePagesによって高度なパフォーマンスが得られます。ただし、この機能は高度な構成オプションです。Oracle RACでは必須ではありません。
この項では、HugePagesの概要について説明します。RPMや構成情報は扱いません。構成に必要な作業は、システムのカーネル・ディストリビューションとハードウェアによって異なります。クラスタ・ノードでHugePagesを使用するように構成する場合の詳細は、ご使用のディストリビューションのドキュメントおよびOracle Technology Network(OTN)とMy Oracle Supportを参照してください。
HugePagesは、リリース2.6でLinuxカーネルに統合された機能です。これは、より大きなページを扱うための手段であり、大容量のメモリーで動作する場合に有効です。32-bitおよび64-bitの両方の構成で使用できます。HugePagesのサイズは、カーネル・バージョンとハードウェア・アーキテクチャに応じて、2MBから256MBになります。Oracle Databaseでは、HugePagesを使用することにより、オペレーティング・システムでのページの状態のメンテナンス作業が削減され、TLB(アドレス変換バッファ)ヒット率が増加します。
HugePagesを使用しない場合、オペレーティング・システムではページごとに4KBのメモリーが保持され、メモリーがSGAに割り当てられると、そのページのライフサイクル(使用済、空き、プロセスにマップ済など)がオペレーティング・システム・カーネルによって最新のものに更新される必要があります。
HugePagesを使用した場合、各ページ表のエントリは2MBから256MBのページを指しているため、オペレーティング・システムのページ表(仮想メモリーから物理メモリーへのマッピング)は小さくなります。また、カーネルでライフサイクルを監視する必要があるページの数が削減されます。
たとえば、64-bitのハードウェアでHugePagesを使用する場合、256MBのメモリーをマップするには、1ページの表エントリ(PTE)が必要です。HugePagesを使用しないで256MBのメモリーをマップするには、256MB×1024KB/4KB=65536PTEが必要です。
HugePagesを使用するには、Grubを構成して、システムの起動時にHugePagesにメモリーを割り当てる必要があります。ページング領域が予約されると、必要に応じてHugePagesを使用できます。ただし、システムの起動時にHugePagesに必要な領域をメモリー内に確保できないときは、HugePagesの割当ては失敗する可能性があります。
システム管理者が使用可能なページ数またはプール・サイズを変更してHugePages構成を変更しないかぎり、システムの起動後にHugePagesを割当てまたは解放することはできません。
Red Hat Enterprise Linux 6、SUSE Linux Enterprise Server 11、および以前のリリースのOracle Linux Unbreakable Enterprise Kernel 2 (UEK2)に付属するOracle Linux 6では、透過的なHugePagesメモリーがデフォルトで有効になっています。それ以降のリリースのOracle Linux UEK2カーネルでは、透過的なHugePagesメモリーは無効になっています。
透過的なHugePagesを使用すると、実行中にメモリー割当ての遅延が生じます。パフォーマンスの問題を回避するために、透過的なHugePagesはすべてのOracle Databaseサーバーで無効にすることをお薦めします。かわりに標準のHugePagesを使用すると、パフォーマンスが向上します。
透過的なHugePagesメモリーが標準のHugePagesメモリーと異なるのは、カーネルのkhugepagedスレッドが実行時にメモリーを動的に割り当てるためです。標準のHugePagesメモリーは起動時に事前割当てされ実行中には変更されません。
関連項目: HugePagesの詳細は、『Oracle Database管理者リファレンスfor Linux and UNIX-Based Operating Systems』を参照してください。 |
透過的なHugePagesメモリーが有効かどうかを確認するには、root
ユーザーとして次のコマンドのいずれかを実行します。
Red Hat Enterprise Linuxカーネルの場合:
# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
その他のカーネルの場合:
# cat /sys/kernel/mm/transparent_hugepage/enabled
次に示すのは、[always]
フラグを有効にして使用している透過的なHugePagesメモリーを示す出力例です。
[always] never
注意: 透過的なHugePagesをカーネルから削除した場合、/sys/kernel/mm/transparent_hugepage または/sys/kernel/mm/redhat_transparent_hugepage ファイルは存在しません。 |
透過的なHugePagesを無効にするには、次の手順を実行します。
/etc/grub.conf
ファイルで、カーネル・ブートの行に次のエントリを追加します。
transparent_hugepage=never
次に例を示します。
title Oracle Linux Server (2.6.32-300.25.1.el6uek.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-300.25.1.el6uek.x86_64 ro root=LABEL=/ transparent_hugepage=never initrd /initramfs-2.6.32-300.25.1.el6uek.x86_64.img
システムを再起動して変更を確定します。