ページテーブルの階層化
ページテーブルはどれくらいの量のメモリを消費するのでしょうか。
...
仮想メモリ量がある程度多くなると、階層型ページテーブルのほうが、フラットなページテーブルよりもメモリ使用量が大きくなります。しかしそのようなことは稀なので、階層型ページテーブルのほうが小さくなることがほとんどです。
気づき
階層化した方がメモリ食わないんだな。
root@**********:************# sar -r ALL 1
Linux 5.15.0-107-generic (************) 2024年05月22日 _x86_64_ (1 CPU)
03時06分49秒 kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty kbanonpg kbslab kbkstack kbpgtbl kbvmused
03時06分50秒 1000916 2390612 1184876 30.32 56132 1528056 5058708 99.22 612476 1994612 184 1035836 137976 9488 20084 41756
03時06分51秒 1000916 2390612 1184876 30.32 56132 1528056 5058708 99.22 612476 1994612 188 1035840 137976 9456 20084 41756
03時06分52秒 1000916 2390612 1184908 30.32 56132 1528056 4937416 96.84 612472 1993740 344 1034940 137944 9408 19988 41580
03時06分53秒 1000916 2390612 1184932 30.32 56144 1528040 4937416 96.84 612472 1993736 404 1034940 137924 9408 19988 41580
03時06分54秒 1000916 2390612 1184920 30.32 56144 1528052 4937416 96.84 612472 1993736 432 1034940 137924 9408 19988 41580
03時06分55秒 1000916 2390624 1184920 30.32 56144 1528052 4937428 96.84 612484 1993788 432 1034940 137924 9408 19988 41580
^C
平均値: 1000916 2390614 1184905 30.32 56138 1528052 4977849 97.64 612475 1994037 331 1035239 137945 9429 20020 41639
kbpgtbl
Amount of memory in kilobytes dedicated to the lowest
level of page tables.
和訳
kbpgtbl
最下位レベルのページテーブル専用のキロバイト単位のメモリ量。キロバイト単位のメモリ量。
出典
deepl
気づき
ページテーブルは20MBぐらいあるんだな。
知らないところにカーネルがページテーブル作ってんだな
ヒュージページ
プロセスが確保したメモリ量が増えてくると、プロセスのページテーブルに使用する物理メモリが増えていきます。この問題を解決するために、Linuxにはヒュージページという仕組みがあります。
通常より大きなサイズのページ
です。これによってプロセスのページテーブルに必要なメモリ量を減らせます
。
...
fork()関数時にページテーブルをコピーするコストが低下するため、fork()関数の高速化も期待できます。
トランスペアレントヒュージページ
これは仮想アドレス空間内の連続する複数の4KiBページが所定の条件を満たせば、それらをまとめて自動的
にヒュージページにしてくれるというものです。
...
機能を有効かするかどうかをシステム管理者が選べるようになっています。
/sys/kernel/mm/transparent_hugepage/enabled
というファイルを見ればわかります。
...
always:システムに存在するプロセスの全メモリについて有効
。
madvise:madivese()というシステムコールに、MADV_HUGEPAGEというフラグを設定することによって、明に指定したメモリ領域についてのみ有効
。
never:無効
root@**********:************# cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
気づき
Ubuntuはデフォルトでmadviseらしい
まだヒュージページはまだ機能していないのかな。もしくは知らないところでしてるかもしれない。
出典
感想
ページテーブルもメモリを使うから工夫してるんだな。