我想要在 Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體上設定 HugePages。
解決方法
**注意:**最佳實務是在測試環境中設定 HugePages,並在將 HugePages 部署到生產環境之前進行效能基準測試。在 x86_64 系統上,HugePage 的大小只能是 2 MB 或 1 GB。如需更多 HugePages 的資訊,請參閱 Oracle 網站上的在 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
-
重新啟動您的執行個體。