0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ページテーブルの階層化

Posted at

ページテーブルの階層化

ページテーブルはどれくらいの量のメモリを消費するのでしょうか。
...
仮想メモリ量がある程度多くなると、階層型ページテーブルのほうが、フラットなページテーブルよりもメモリ使用量が大きくなります。しかしそのようなことは稀なので、階層型ページテーブルのほうが小さくなることがほとんどです。

気づき

階層化した方がメモリ食わないんだな。

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らしい
まだヒュージページはまだ機能していないのかな。もしくは知らないところでしてるかもしれない。

出典

感想

ページテーブルもメモリを使うから工夫してるんだな。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?