Skip to content

tmpfsのメモリの使われ方

2016/2/20

Sambaの記事にて/runディレクトリ、tmpfsについて少し触れた。
そのメモリの使われ方についてちょっと気になったので調べてみたのでそのまとめ。

特徴

  • tmpfsはメモリ上にファイルを置くように作られているファイルシステム
    似たものにRAMディスクというのが存在する
  • メモリ上に作られるため、I/O速度が速いというメリットがある
  • 揮発性メモリなため、電源を落とせばデータが消える
  • Ubuntuではデフォルトで積んでいるメモリ全体の半分のサイズを使ってtmpfsが作られる
    メモリ全体で16GB積んでいる場合、/run/shmに8GBが割り当てられる

調べた結果、tmpfsの仕組みとして、ファイルシステムが用意している容量について、予めメモリは確保はしない。
置かれたファイル分、動的にメモリを確保していく。

tmpfsで8GBの容量が確保されているとき、メモリの空き容量を確認すると、 その8GBは使われておらず、freeの領域として扱われる。
/run/shm上にファイルを置くと、ファイルを置いた分メモリが使われる。
例えば2GBのファイルを置くと、そこで初めてメモリ全体の空き容量が2GB減る、ということになる。

そしてシステムが使うメモリが不足してきた場合、tmpfs上のファイルはスワップ領域に退避される。

検証結果

# df -h (コマンド出力結果は関係ない部分は省略)
Filesystem      Size  Used Avail Use% Mounted on
none            7.8G   17M  7.8G   1% /run/shm

ファイルシステムnoneとなっているがtmpfs

# free -g
             total       used       free     shared    buffers     cached
Mem:            15          3         12          0          0          1
-/+ buffers/cache:          1         14
Swap:           15          0         15

数値の単位はGB
メモリのusedは3GB

ファイルを生成してディスクを消費する

# pwd
/run/shm

# dd if=/dev/zero of=tempfile bs=1M count=2048
2048+0 レコード入力
2048+0 レコード出力
2147483648 バイト (2.1 GB) コピーされました、 0.422649 秒、 5.1 GB/秒

# ls -lh
-rw-r--r-- 1 root    root    2.0G  2月 20 16:13 tempfile

ファイル生成後の状態確認

# df -h 
Filesystem      Size  Used Avail Use% Mounted on
none            7.8G  2.1G  5.8G  26% /run/shm

# free -g
             total       used       free     shared    buffers     cached
Mem:            15          5         10          2          0          3
-/+ buffers/cache:          1         14
Swap:           15          0         15

メモリのusedは5GBに増えている。
実際に使われたときだけメモリ使用量が増えることがわかる。

参考ページ

tmpfs は本当に容量が動的なのか