LinuxでのHugePagesの構成

HugePagesは、Linuxカーネルに統合された機能です。Oracle Databaseの場合、HugePagesを使用すると、ページ状態のオペレーティング・システム・メンテナンスが軽減され、Translation Lookaside Buffer(TLB)ヒット率が向上します。

ノート:

HugePagesサポートは、CONFIG_HUGETLBFSおよびCONFIG_HUGETLB_PAGE構成オプションを使用して構築されたカーネルで利用できます。

合計メモリーの30%以上を標準ページ用、および合計メモリーの70%以下をHugePages用に予約することをお薦めします。

Oracle Databaseソフトウェア所有者(oracle)ユーザー・アカウントとそのすべてのグループが作成済であることを確認します。詳細は、「Oracle Database Preinstallation RPMによるOracle Linuxの自動構成」または「Oracleソフトウェア所有者ユーザーの作成」を参照してください。

HugePagesの使用の有効化

LinuxでHugePagesを有効にするには、次のステップを実行します:

  1. 次のように、カーネルでHugePagesがサポートされているかどうかを確認します。

    $ grep Huge /proc/meminfo
  2. /etc/security/limits.confファイルのhardおよびsoft memlock設定を編集して、memlock設定をunlimitedと指定します。

    ノート:

    oracleユーザーの制限が/etc/security/limits.d下のカスタム・ファイルに定義されている場合は、かわりにそのファイルを編集します。
    oracle   soft   memlock    unlimited
    oracle   hard   memlock    unlimited
  3. oracleユーザーとして再度ログインし、次のようにulimit -lコマンドを実行して新しいmemlock設定を確認します。

    $ ulimit -l
    unlimited
  4. 次のコマンドを実行して変数Hugepagesizeの値を表示します。

    $ grep Hugepagesize /proc/meminfo
  5. gid (oracleユーザー・グループID)の値を確認します:

    # id oracle

    出力は、次のようなものです。

    uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba), 
    54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54327(asmdba),54330(racdba)
    

    gidの値を書き留めておきます。

  6. vm.hugetlb_shm_groupカーネル・パラメータ値をgidの値に設定します。

    
    # sysctl -w vm.hugetlb_shm_group=gid

    gidは、oracleユーザー・グループIDです。たとえば、gidの値=54321です。

    システムの再起動後でも確実にこの値を使用できるようにするには、この設定を含む/etc/sysctl.d/99-hugetlb-shm-group.confファイルに次のエントリを追加します。

    vm.hugetlb_shm_group=gid

HugePagesの容量の構成

データベースに必要な数のHugePagesを構成するには、Oracle Databaseのインストールを完了してデータベースを作成した後に、このステップを実行します。

  1. 現行の共有メモリー・セグメントのHugePages構成の推奨値を計算するスクリプトを作成するには、次の手順を実行します:

    1. hugepages_settings.shというテキスト・ファイルを作成します。

      hugepages_settings.shスクリプトの作成については、My Oracle Supportノート401749.1を参照してください。

    2. 次のように、hugepages_settings.shファイルの権限を変更します。

      $ chmod +x hugepages_settings.sh
  2. hugepages_settings.shスクリプトを実行して、HugePages構成の値を計算します。

    $ ./hugepages_settings.sh

    ノート:

    このスクリプトを実行する前に、hugepagesを使用するすべてのデーターベースが稼働中であることを確認します。
  3. 次のカーネル・パラメータを設定します。valueは、ステップ2で決定したHugePages値です。

    # sysctl -w vm.nr_hugepages=value
  4. システムの再起動後に確実にHugePagesが割り当てられるようにするには、/etc/sysctl.d/99-nr_hugepages.confファイルに次のエントリを追加します。valueは、ステップ2で決定したHugePages値です。

    vm.nr_hugepages=value

    ノート:

    nr_hugepagesを使用してHugePages割当てを設定できない場合は、空きメモリーが断片化している可能性があります。サーバーを再起動するとHugepages割当てが有効になります。
  5. 次のコマンドを実行して、使用可能なHugePagesを確認します:

    $ grep Huge /proc/meminfo
  6. インスタンスを再起動します。

  7. 次のコマンドを実行して、使用可能なHugePages (1、2ページの空き)を確認します:

    $ grep Huge /proc/meminfo