tmpfsが/dev/shmをマウントしている件

前から気になってた。tmpfsって何?
ノートLinuxファイルシステムのディスク容量を見てみるとこうなってる。

# df -Th
Filesystem    Type  サイズ  使用  残り 使用% マウント位置
/dev/hda2     ext3     19G  7.1G   11G  41% /
tmpfs        tmpfs    248M     0  248M   0% /lib/init/rw
udev         tmpfs     10M   64K   10M   1% /dev
tmpfs        tmpfs    248M     0  248M   0% /dev/shm
/dev/hda1     ext3    938M   51M  840M   6% /boot
/dev/hda3     ext3     17G  9.7G  6.1G  62% /home

Filesystemの中の/dev/hda達は、/etc/fstabに書いてるから納得だけど、
Typeがtmpfsなのがよくわからない。

 仮想メモリベースのファイルシステムであるtmpfsを使用すれば、必要なサイズに応じてRAMディスクの容量が動的に変化するため、メモリを効率よく使用できる。

容量が動的に変化するRAMディスクを使うには

上の記事を見ると、動的に変化できるメモリ上のファイルシステムであることはわかる。
では、設定した覚えもない、/etc/fstabにも書いてないのに使われているのか。

tmpfs        tmpfs    248M     0  248M   0% /lib/init/rw
udev         tmpfs     10M   64K   10M   1% /dev
tmpfs        tmpfs    248M     0  248M   0% /dev/shm

まず、udevのtmpfsはググってわかった。tmpfsは必須でシステムがマウントしている。

udev は実際に存在しているデバイスのためのファイルを置くための 動的なデバイスディレクトリを作成する. udev は通常 /dev/ ディレクトリに存在するデバイスノードファイルを 作成したり削除したり,ネットワークインターフェイスの名前を変更したりする.

udev は何をするのか

設定していない、tmpfs:/dev/shmがなぜあるのかわからず。
起動のタイミングを見ながら何が使ってるのか特定する。

どうやら、起動時に/etc/default/tmpfsの中に書いてあるサイズ分だけ、
tmpfs:/dev/shmでマウントしておくみたいです。(サイズは4096bytesの倍数)

SHM_SIZE=40960000

これがデフォルトで何目的なのかはやっぱり不明。
tmpfs:/lib/init/rw これについてもググってもわからず。
知ってる人いたら教えてください。


最後に使いかたを引用しておきます。

メモリを豊富に搭載している場合、/tmp などを RAM ベースファイルシステムにする事で速くなります。オススメは tmpfs で、カーネルがサポートしていれば特別な設定なしにマウントするだけで使えます。
# mount -t tmpfs -o size=32m tmpfs /tmp
起動する時にマウントさせるには /etc/fstab に
tmpfs /tmp tmpfs defaults,size=32m 0 0
マウントオプションの size= でサイズを指定しないと、実メモリの半分の容量が割り当てられてしまうので注意。
tmpfs 上に置かれているファイル分のメモリは、そのファイルが削除されない限り開放されません。そのため、実メモリスワップの合計より多くの tmpfs をマウントして、実メモリスワップの合計以上の容量を消費した場合、最悪システムがクラッシュします。

RAM ベースファイルシステムを利用して速くする

あと、本当に割り当てメモリを動的に空けてくれるのかの検証をid:naoyaさんが1年以上前にやっていました。

* tmpfs は OS がメモリが足りなくなったときにスワップして、OS 側にメモリを確保させる機能がある

ということは分かるのですが、tmpfs として確保した領域のうち空いてる箇所は果たして

* tmpfs として確保した領域のうち使用されてないものは OS がアプリケーションに割り当てる
* tmpfs として確保されたものはあくまでファイルシステムとして扱われ、OS がアプリケーションに割り当てることはない

のどちらなのかがはっきりしません。
・・・

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