Linux 系統如何進行大頁面配置


在 Linux 中,物理內存是以頁為單位來管理的。頁的大小為 4096 字節。 1MB 的內存能划分為 256 頁; 1GB 則等同於 256000 頁。 CPU 中有一個內置的內存管理單元,用於存儲這些頁的列表,每頁都有一個對應的入口。在這種情況下,內存管理單元的大小決定了服務器能使用的最大內存大小。

如果為服務器分配的內存遠大於現有內存管理單元能管理的量,則會造成內存的浪費。 CentOS 6 中為解決這個問題,使用了大頁面的方式。簡單來說,大頁面即大小為 2MB 或者 1GB 的頁。 2MB 的頁適用於管理 GB 級單位的內存; 1GB 的頁適用於 TB 級單位的內存。

手動去管理大頁面較麻煩,往往需要更改代碼。為了便於系統管理員和開發人員使用, CentOS 引入了 transparent huge pages (后續簡稱 THP )的概念。 THP 是一個抽象層,其自動化了創建,管理和使用大頁面的大多數步驟。

大頁面的配置

大頁面配置需要連續的內存空間,因此在開機時就分配是最可靠的方式。配置大頁面的參數有:

  • hugepages :在內核中定義了開機啟動時就分配的永久大頁面的數量。默認為 0,即不分配。只有當系統有足夠的連續可用頁時,分配才會成功。由該參數保留的頁不能用於其他用途。
  • hugepagesz: 在內核中定義了開機啟動時分配的大頁面的大小。可選值為 2MB 和 1GB 。默認是 2MB 。
  • default_hugepagesz:在內核中定義了開機啟動時分配的大頁面的默認大小。

要調整頁的尺寸,必須將配置以參數格式寫入到啟動命令中。如要為系統配置 10 個 1GB 的大頁面,則啟動命令中要包含: default_hugepagesz=1G hugepagesz=1G hugepages=10。配置 1GB 的大頁面,CPU 特性需要支持 pdpe1gb ,系統內核也需要支持。

查看與大頁面的相關的配置:

  1. 命令 sysctl -a | grep -I huge 輸出:

  2. 命令 cat /proc/meminfo 輸出:

  3. 若配置了不同大小的大頁面,可以通過 /var/log/message 中的啟動參數進行查看:

大頁面對內存使用的影響

配置大頁面后,系統在開機啟動時會首選嘗試在內存中找到並預留連續的大小為 hugepages * hugepagesz 的內存空間。如果內存空間不滿足,則啟動會報錯 Kernel Panic, Out of Memory 等錯誤。
使用大頁面后,能減少系統管理和訪問頁的時間;內核中的 swap 守護進程也不會管理大頁面占用的這部分空間。合理設置大頁面能減少內存操作的負擔,減少訪問頁表造成性能瓶頸的可能性,從而提升系統性能。
如只配置了一個大小的大頁面,可以通過 /proc/meminfo 中的 Hugepagesize 和 HugePages_Total 計算出大頁面所在內存空間的大小。這部分空間會被算到已用的內存空間里,即使還未真正被使用。

因此,用戶可能觀察到下面現象:使用 free 命令查看已用內存很大,但 top 或者 ps 中看到 %mem 的使用總量加起來卻很少。

命令 free -g 輸出:

命令 top 輸出, Shift+m 按內存使用排序:

命令 ps,查看進程內存用量:

ps -eo uid,pid,rss,trs,pmem,stat,cmd


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM