smapsみてみる
Linuxのメモリ周りをみていて、手元でもsmapsの内容を見てみました。 環境はkernel 3.10.0-229.el7.x86_64(バージョンアップしなきゃ。。)
実行したテストプログラムは以下のブログから丸々コピーさせてもらいました。
Linux のプロセスが Copy on Write で共有しているメモリのサイズを調べる - naoyaのはてなダイアリー
1回目がforkするだけのテストプログラムを動かした結果で、 2回目が、ブログにあるとおり、コメントアウトを外して、fork & 書き込みまでおこなった結果です。 ほぼ参考にさせて頂いたブログにあるとおりの結果になっていました。
# 1回目 00602000-067aa000 rw-p 00000000 00:00 0 Size: 100000 kB Rss: 100000 kB Pss: 50000 kB Shared_Clean: 0 kB Shared_Dirty: 100000 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 100000 kB Anonymous: 100000 kB AnonHugePages: 96256 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac
#2回目 00602000-067aa000 rw-p 00000000 00:00 0 Size: 100000 kB Rss: 100000 kB Pss: 75596 kB Shared_Clean: 0 kB Shared_Dirty: 48808 kB Private_Clean: 0 kB Private_Dirty: 51192 kB Referenced: 100000 kB Anonymous: 100000 kB AnonHugePages: 96256 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac
このPssなる項目は、proportional set sizeというものらしいです。 以下のサイトに例がのっていてなんとなくわかったような気になりました。(実際はメモリ周りの扱いがわかっていないので、わかっていない。。。)
The "proportional set size" (PSS) of a process is the count of pages it has in memory, where each page is divided by the number of processes sharing it. So if a process has 1000 pages all to itself, and 1000 shared with one other process, its PSS will be 1500.
https://www.kernel.org/doc/Documentation/filesystems/proc.txt
今回のテストの場合もprivateとsharedが1:1なので、PSSの値もほぼ上記の例と同じ比率になっているような気がします。
詳しくはまたどこかで調べてみます。