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に増えている。
実際に使われたときだけメモリ使用量が増えることがわかる。