Amazon Elastic Compute Cloud (Amazon EC2) の Linux インスタンスで HugePages を設定したいと考えています。
解決策
注: HugePages を本番環境にデプロイする前に、テスト環境で HugePages を設定し、パフォーマンスをベンチマークするのがベストプラクティスです。HugePage のサイズは x86_64 システムでは 2 MB または 1 GB に限られます。HugePages の詳細については、オラクルのウェブサイト「Configuring HugePages on Linux」(Linux での HugePages の設定) を参照してください。
前提条件: お使いのアプリケーションまたはデータベースが HugePages をサポートしていることを確認するには、ベンダーに確認してください。また、使用可能なメモリ量を判断するには、次のコマンドを実行して EC2 インスタンスの合計メモリを確認します。
free -m
Linux インスタンスで HugePages を設定するには、以下の手順を実行します。
-
次のコマンドを実行して、カーネルで HugePages が有効になっていないことを確認します。
sudo cat /proc/sys/vm/nr_hugepages
コマンド出力が 0 の場合、HugePages はアクティブになっていません。
-
必要な HugePages の数を計算するには、次の式を使用します。<br id=hardline_break/>
HugePages の数 = 必要なメモリ/HugePage サイズ <br id=hardline_break/>
注: 計算結果を切り上げて、十分なページが作成されていることを確認してください。
-
次のコマンドを実行して HugePages を有効化し、カーネルパラメータ値を設定します。
sudo sysctl -w vm.nr_hugepages=2048
注: 2048 は、計算した HugePages の数に置き換えてください。<br id=hardline_break/>
出力例:
vm.nr_hugepages = 2048
-
再起動後にシステムが HugePages を割り当てていることを確認するには、/etc/sysctl.conf ファイルに次のエントリを追加します。
sudo echo "vm.nr_hugepages=2048" >> /etc/sysctl.conf
注: 2048 は、計算した HugePages の数に置き換えてください。
-
変更を確認するには、次のコマンドを実行します。
sudo cat /etc/sysctl.conf
コマンド出力で、vm.nr_hugepages の値があることを確認します。<br id=hardline_break/>
出力例:
# sudo cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
vm.zone_reclaim_mode=1
vm.nr_hugepages=2048
-
インスタンスを再起動します。
-
次のコマンドを再実行して、HugePages の値と構成を確認します。
sudo cat /proc/sys/vm/nr_hugepages
出力が、計算した HugePages の数である場合、HugePages は有効化されています。<br id=hardline_break/>
出力例:
# sudo cat /proc/sys/vm/nr_hugepages
2048
-
/proc/meminfo で利用可能な HugePages を確認するには、以下のコマンドを実行します。
sudo grep Huge /proc/meminfo
出力例:
# sudo grep Huge /proc/meminfo
HugePages_Total: 2048
HugePages_Free: 2048
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
HugePages の各値の定義については、kernel.org の「HugePages」を参照してください。
HugePages を無効化するには、次の手順を実行します。
-
次のコマンドを実行して nr_hugepages を 0 にリセットします。
sudo sysctl -w vm.nr_hugepages=0
-
sysctl.conf から次のエントリを削除します。
sudo echo "vm.nr_hugepages=2048" >> /etc/sysctl.conf
-
インスタンスを再起動します。