UEKカーネルでの透過的なHugePagesの設定および無効化

UEKカーネル・バージョンに応じて、透過的なHugePagesをいつ設定するか、また透過的なHugePagesをいつ無効にするかについて学習します。

透過的なHugePagesをmadviseに設定

透過的なHugePagesメモリーは、Oracle Linuxでデフォルトで有効になります。ただし、パフォーマンスを最適化するために、インストールを開始する前に、UEK7以降のカーネルを実行しているすべてのOracle Databaseサーバーで透過的なHugePagesをmadviseに設定することをお薦めします。

UEK7より前のUEKリリースを実行しているOracle Databaseサーバーでは、インストールを開始する前に透過的なHugePagesを無効にすることをお薦めします。「透過的なHugePagesの無効化」を参照してください。後で、UEKバージョンがUEK7以降にアップグレードされる場合は、このトピックのステップを適用します。

Oracle Database Preinstallation RPMをインストールすると、UEK7以降のカーネルを実行しているすべてのOracle Databaseサーバーで透過的なHugePagesがmadviseに設定されます。

透過的なHugePagesでmadviseを設定するには:

  1. Oracle LinuxおよびRed Hat Enterprise Linuxの場合は、/etc/default/grubファイル内でtransparent_hugepage=madviseパラメータを追加または変更します。たとえば:
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet transparent_hugepage=madvise"
    GRUB_DISABLE_RECOVERY="true"

    ノート:

    ファイル名は、オペレーティング・システムおよびハードウェアによって異なる場合があります。たとえば、Oracle Cloud Infrastructure (OCI)では、grub.cfgファイルは/boot/efi/EFI/redhat/にあります。使用するオペレーティング・システムのドキュメントで正確なファイル名を確認してください。
  2. grub2–mkconfig コマンドを実行してgrub.cfgファイルを再生成します。

    Oracle Linux 8の場合

    # grub2-mkconfig -o /boot/grub2/grub.cfg

    Oracle Linux 9の場合

    grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline
  3. システムを再起動して変更を確定します。システムを再起動しない場合は、次のコマンドを入力します。
    # echo madvise >
          /sys/kernel/mm/transparent_hugepage/enabled
  4. 透過的なHugePagesが有効化されてmadviseで構成されているかどうかを確認するには、rootユーザーとして次のコマンドのいずれかを実行します。

    Oracle Linuxカーネルの場合:

    # cat /sys/kernel/mm/transparent_hugepage/enabled

    Red Hat Enterprise Linuxカーネルの場合:

    # cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

    次に、透過的なHugePagesが使用され、madviseに設定されていることを示す出力例を示します。

    always [madvise] never

透過的なHugePagesの無効化

UEK7より前のUEKリリースを実行しているOracle Databaseサーバーでは、インストールを開始する前に透過的なHugePagesを無効にすることをお薦めします。

透過的なHugePagesメモリーが標準のHugePagesメモリーと異なるのは、カーネルのkhugepagedスレッドが実行時にメモリーを動的に割り当てるためです。標準のHugePagesメモリーは起動時に事前割当てされ実行中には変更されません。

ノート:

透過的なHugePagesがUEK2カーネルおよびそれ以降のUEKカーネルで無効になっていても、Linuxシステムでは透過的なHugePagesをデフォルトで有効にすることができます。

透過的なHugePagesメモリーは、Oracle Linux 6以降、Red Hat Enterprise Linux 6以降、SUSE 11以降のカーネルでデフォルトで有効になります。

透過的なHugePagesを使用すると、実行中にメモリー割当ての遅延が生じます。パフォーマンスの問題を回避するために、透過的なHugePagesはすべてのOracle Databaseサーバーで無効にすることをお薦めします。かわりに標準のHugePagesを使用すると、パフォーマンスが向上します。

透過的な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を無効にするには:

  1. Oracle Linux 7、Oracle Linux 8、Red Hat Enterprise Linux 7およびRed Hat Enterprise Linux 8の場合は、/etc/default/grubファイル内でtransparent_hugepage=neverパラメータを追加または変更します。

    transparent_hugepage=never
    たとえば:
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet transparent_hugepage=never"
    GRUB_DISABLE_RECOVERY="true"

    ノート:

    このファイル名は、オペレーティング・システムによって異なる場合があります。使用するオペレーティング・システムのドキュメントで正確なファイル名および透過的なHugePagesを無効化するステップを確認します。
  2. grub2–mkconfig コマンドを実行してgrub.cfgファイルを再生成します。

    # grub2-mkconfig -o /boot/grub2/grub.cfg
  3. システムを再起動して変更を確定します。