tmpfs:tmpfsからファイルを作成しても、htop / topのメモリ使用量は変わりません。

tmpfs:tmpfsからファイルを作成しても、htop / topのメモリ使用量は変わりません。

私はtmpfsについて読んで、その利点が気になりました。だからディレクトリを作成し、tmpfsとしてマウントしました。

したがって、理論的にはtmpfsに書き込まれたすべての内容はRAMに直接保存され、再起動するまで続きます。だからtmpfsドライブに10GBのファイルを作成しました。理論によると、htop / topコマンドは10 GB以上のRAM消費量を表示する必要があります。 256GBのRAMがありますが、RAM消費量はtmpfsから10GBファイルを作成する前と同じです。

私が逃したものはありますか?

答え1

Braatchleyがすでに指摘したように、htopは他の人と同様に+-キャッシュラインを自由に見ることができるようです。 3.14より前のカーネルバージョンを使用している場合は、実際には変更されません。最新のカーネルを持っていても、freeとhtopは正しい値を得るためにどこを見つけるべきかを知るのに十分賢くなければなりません。

何が起こっているのかをより深く理解するには、/proc/meminfoを見て、以前のシステムで無料で提供されているものと比較してください。

root@localhost:/media/user# free
             total       used       free     shared    buffers     cached
Mem:        291152     268264      22888          0          0      47180
-/+ buffers/cache:     221084      **70068**
Swap:            0          0          0

root@localhost:/media/user# cat /proc/meminfo
MemTotal:         291152 kB
MemFree:           **22904** kB
Buffers:               0 kB
Cached:            **47144** kB
SwapCached:            0 kB
Active:           154752 kB
Inactive:          32376 kB
Active(anon):     143632 kB
Inactive(anon):    21936 kB
Active(file):      11120 kB
Inactive(file):    10440 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        139996 kB
Mapped:            25276 kB
Shmem:             **25584** kB
Slab:              64096 kB
SReclaimable:       3364 kB
SUnreclaim:        60732 kB
KernelStack:        2280 kB
PageTables:         3588 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      145576 kB
Committed_AS:    1500824 kB
VmallocTotal:     499712 kB
VmallocUsed:        7256 kB
VmallocChunk:     449196 kB

tmpfsはshmemの下に含まれていますが、「cache」セクションにも追加されます。以前のLinux(カーネル+ procps)では、これは「使用可能な」メモリを決定するために使用されていましたが、ほとんどのユーザーはキャッシュメモリをすぐに回復可能として扱うため、これは非常に問題になります。 tmpfsではもうそうではありません。

最近のシステム(カーネル> = 3.14)では、/proc/meminfoに新しいものがあります。

MemAvailable:    xxxx kB

これはこれらすべての要素を考慮し、htopとfreeがこの値に依存する限り正確な表現を得ることができます。私のDebian 8システムでは、カーネルはMemAvailableを認識していますが、そうではありません。

ardi@oab1ardi-mcdev:~/mc/oattest1/workspace/bcm_linux_3_4rt$ cat /proc/meminfo | grep Avail
MemAvailable:    **1319148** kB

ardi@oab1ardi-mcdev:~/$ free
             total       used       free     shared    buffers     cached
Mem:       2058360    1676332     382028      33116      40356     933916
-/+ buffers/cache:     702060    **1356300**
Swap:            0          0          0

ardi@oab1ardi-mcdev:~/$ sudo dd if=/dev/zero bs=1M count=200 of=/run/delme
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.0628098 s, 3.3 GB/s

ardi@oab1ardi-mcdev:~/$ free
             total       used       free     shared    buffers     cached
Mem:       2058360    1881060     177300     237916      40372    1138720
-/+ buffers/cache:     701968    **1356392**
Swap:            0          0          0

ardi@oab1ardi-mcdev:~/mc/oattest1/workspace/bcm_linux_3_4rt$ cat /proc/meminfo | grep Avail
MemAvailable:    **1114152 kB**

最後の注意:

実際、tmpfsは非常に危険です。他の種類のメモリ使用量とは異なり、tmpfsファイルはOOM Killerでクリーンアップできず、実際にどのプロセスがtmpfsファイルを生成したかについての記録はありません。したがって、Debian 8が/ tmp(すべてのプロセスに書き込むことができます)でtmpfsを使用しないことを選択したのはなぜですか?

次のリンクのクレジット: https://linuxraj.wordpress.com/2015/03/10/memory-utilization-from-procmeminfo-memavailable/ https://rwmj.wordpress.com/2012/09/12/tmpfs-considered-harmful/

関連情報