Transparent Huge Pagesの無効化

4003 ワード

全文はMongoDBの公式マニュアルに翻訳され、原版を維持するために尽力しています.しかし、能力には限界がある.
  • 起動スクリプト
  • tundedとktune
  • を使用
  • 構成が有効かどうかをテストする
  • 注意:このページでは、Red Hat Enterprise LinuxおよびCentOS 6、7でTransparent Huge Pageを無効にする方法について説明しています.THPの無効化を他のシステムで実行する場合は、対応するドキュメントを参照してください.
    Transparent Huge Pages(THP)はLinuxメモリ管理メカニズムであり、Translation Lookaside Buffer(TLB)がlarger memory pagesを使用する場合のアドレスオーバーヘッドを低減する.しかし、データベース・システムは、連続メモリ・アクセス・モードではなく、疎化する傾向があるため、THPを使用するとパフォーマンスが低下することが多い.LinuxホストでTHPを無効にして、MongoDBのパフォーマンスを最適化する必要があります.

    起動スクリプト


    重要:tunedまたはktuneを使用している場合(たとえば、Red HatまたはCentOS 6以降を使用している場合は、THPが再有効にならないように>追加の設定を追加する必要があります.tunedとktuneの使用を参照してください.

    1.起動スクリプトの作成


    このファイルを作成し、次の/etc/init.d/disable-transparent-hugepagesに書き込みます.
    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides:          disable-transparent-hugepages
    # Required-Start:    $local_fs
    # Required-Stop:
    # X-Start-Before:    mongod mongodb-mms-automation-agent
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Disable Linux transparent huge pages
    # Description:       Disable Linux transparent huge pages, to improve
    #                    database performance.
    ### END INIT INFO
    
    case $1 in
      start)
        if [ -d /sys/kernel/mm/transparent_hugepage ]; then
          thp_path=/sys/kernel/mm/transparent_hugepage
        elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
          thp_path=/sys/kernel/mm/redhat_transparent_hugepage
        else
          return 0
        fi
    
        echo 'never' > ${thp_path}/enabled
        echo 'never' > ${thp_path}/defrag
    
        re='^[0-1]+$'
        if [[ $(cat ${thp_path}/khugepaged/defrag) =~ $re ]]
        then
          # RHEL 7
          echo 0  > ${thp_path}/khugepaged/defrag
        else
          # RHEL 6
          echo 'no' > ${thp_path}/khugepaged/defrag
        fi
    
        unset re
        unset thp_path
        ;;
    esac

    2.実行可能権限の付与:

    sudo chmod 755 /etc/init.d/disable-transparent-hugepages

    3.このスクリプトの起動を設定します。


    リリースとコマンド
    UbuntuとDebian sudo update-rc.d disable-transparent-hugepages defaultsSUSE sudo insserv /etc/init.d/disable-transparent-hugepages
    Red Hat, CentOS, Amazon Linux, and derivatives sudo chkconfig --add disable-transparent-hugepages

    4.tunedとktuneの設定を上書きする


    tunedまたはktuneを使用している場合(たとえば、Red HatまたはCentOS 6以降を使用している場合は、上記の設定を保護するためにすぐに構成する必要があります.

    tunedまたはktuneの使用


    tunedまたはktuneを使用している場合は、起動スクリプトのインストールに加えて、この手順を実行する必要があります.
    tunedとktuneはダイナミックカーネル調整ツールであり、RedhatまたはCentOSでTHPを無効にすることができます.tunedまたはktuneでTHPを無効にするには、neverのステータスを設定するための新しいプロファイルを作成する必要があります.

    RedhatとCentOS 6


    1.新しいプロファイルの作成


    デフォルトのプロファイルを関連ディレクトリからコピーして名前を変更します.この例ではdefaultをコピーしnp-topと名前を付けます.sudo cp -r /etc/tune-profiles/default /etc/tune-profiles/no-thp

    2.ktuneを編集する.sh


    編集/etc/tune-profiles/no-thp/ktune.shには、次の行が追加されます.set_transparent_hugepages never
    このファイルのstart()ブロック、return 0の前に.

    3.このファイルを使用可能にする

    sudo tuned-adm profile no-thp

    Red Hat /Cent OS 7


    1.新規ファイルの作成


    新しいtunedプロファイルディレクトリを作成します.
    sudo mkdir/etc/tuned/no-thp

    2.tuned.の編集confファイル

    /etc/tuned/no-thp/tuned.confを作成してコンパイルし、次のように書き込みます.
    [main]
    include=virtual-guest
    
    [vm]
    transparent_hugepages=never

    3.イネーブルファイル:

    sudo tuned-adm profile no-thp

    構成のテスト


    次のコマンドを使用してTHPステータスを確認します.cat /sys/kernel/mm/transparent_hugepage/enabled cat /sys/kernel/mm/transparent_hugepage/defrag
    Red Hat Enterprise LinuxまたはCentOSまたはRed hat Linuxベースの他のリリースでは、次のコマンドを使用する必要があります.cat /sys/kernel/mm/redhat_transparent_hugepage/enabled cat /sys/kernel/mm/redhat_transparent_hugepage/defrag
    出力結果はalways madvise [never]