tmpfsについて

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

はじめに、tmpfsはメモリ上にファイルを置くように作られているファイルシステムです。
似たものにRAMディスクというのがあります

メモリ上に作られるため、I/O速度が速いというメリットがあります。
ただし揮発性メモリですので、電源を落とせばデータが消えます。
Ubuntuではデフォルトで積んでいるメモリ全体の半分のサイズを使ってtmpfsが作られます。
メモリ全体で16GB積んでいる場合、/run/shmに8GBが割り当てられます。

調べた結果、tmpfsの仕組みとして、ファイルシステムが用意している容量について、
予めメモリは確保はしないようです。置かれたファイル分、動的にメモリを確保していくようです。
tmpfsで8GBの容量が確保されているとき、メモリの空き容量を確認すると、
その8GBは使われておらず、freeの領域として扱われます。
/run/shm上にファイルを置くと、ファイルを置いた分メモリが使われる、
例えば2GBのファイルを置くと、そこで初めてメモリ全体の空き容量が2GB減る、ということになります。
8GBという値は、制限と考えるとわかりやすいですね。8GB以上のファイルを置いて、
システムが使うメモリまで侵食しないようにしよう、ということだと思います。
そしてシステムが使うメモリが不足してきた場合、やはり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
→メモリの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 は本当に容量が動的なのか

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です