SSブログ

tmpmfsを使ってみる (FreeBSD、2014/01/07) [FreeBSD]

/tmpの確保をオンメモリ(mfs)にするところまでは良いのですが、私は古い人間なので以下のようにfstabに直接書いていました。
root@atom:~ # cat /etc/fstab
# Device        Mountpoint      FStype  Options Dump    Pass#
md                      /tmp            mfs     -s=128m,rw       0       0

最近(2004年ぐらいの記述も見受けられるのですが…)はtmpmfsなるものがあるらしく、ちょっと使ってみることにしました。基本的にはrc.confで同等のことが記述できるようになっており、管理上便利になっています。
簡単な性能測定もしてみたいので、メインメモリ4GBのうち(32ビットOSなので実際に使えるのは3.5Gぐらい?)3GB分を/tmpに割り当てることにします。
とりあえず設定前の状態です。(この検証用にリブートし、再起動直後のメモリ状態)
root@atom:~ # top
CPU:  0.6% user,  0.0% nice,  1.0% system,  0.2% interrupt, 98.3% idle
Mem: 53M Active, 36M Inact, 40M Wired, 32M Buf, 3264M Free
Swap: 4096M Total, 4096M Free

tmpmfsの設定はrc.confでこんな風な感じで。-Mオプションは、mallocバックエンドを使用するためのオプションです。
root@atom:~ # cat /etc/rc.conf
tmpmfs="YES"
tmpsize="3g"
tmpmfs_flags="-M -S -o async"

再起動してみましたが、メモリ使用状態に変化はありません。でも/tmpはちゃんと3GB確保されていました。
root@atom:~ # top
CPU:  0.2% user,  0.0% nice,  0.6% system,  0.2% interrupt, 99.0% idle
Mem: 50M Active, 35M Inact, 39M Wired, 48K Cache, 31M Buf, 3268M Free
Swap: 4096M Total, 4096M Free
root@atom:~ # 
root@atom:~ # df -m
Filesystem           1M-blocks   Used  Avail Capacity  Mounted on
/dev/md0                  2973      0   2735     0%    /tmp

ここでddで巨大なファイルを作成してみます。213MB/sと結構早いです。ローカルのハードディスクは88MB/sぐらいなので2.5倍ぐらいですね。
root@atom:~ # dd if=/dev/zero of=/tmp/hoge.foo bs=1m count=2000
2000+0 records in
2000+0 records out
2097152000 bytes transferred in 9.814735 secs (213673830 bytes/sec)

使用中はメモリを消費します(Freeがほぼそのまま2GB分マイナスとなっている)が、ファイルを消すとメモリも解放されるというステキな仕様のようです。
root@atom:~ #  top
CPU:  0.2% user,  0.8% nice,  6.0% system,  1.7% interrupt, 91.3% idle
Mem: 53M Active, 1962M Inact, 115M Wired, 48K Cache, 90M Buf, 1263M Free
Swap: 4096M Total, 4096M Free
root@atom:~ # 
root@atom:~ # rm /tmp/hoge.foo
root@atom:~ # 
root@atom:~ # top
CPU:  0.6% user,  0.0% nice,  0.8% system,  0.3% interrupt, 98.3% idle
Mem: 51M Active, 48M Inact, 27M Wired, 48K Cache, 1280K Buf, 3267M Free
Swap: 4096M Total, 4096M Free

ただ、man mdconfigを読むとmallocバックエンドを使用する場合について、If the -o reserve option is not set, creating and filling a large malloc-backed memory disk is a very easy way to panic a system.と記載があり、何かヤバそうな感じです。
なので、以下のように-Mオプションを使わない方法も試してみました。起動直後のメモリの使われ方は同じようです。
root@atom:~ # cat /etc/rc.conf
tmpmfs="YES"
tmpsize="3g"
tmpmfs_flags="-S -o async"
root@atom:~ #
root@atom:~ # top
CPU:  0.4% user,  0.0% nice,  0.6% system,  0.2% interrupt, 98.8% idle
Mem: 54M Active, 35M Inact, 39M Wired, 48K Cache, 32M Buf, 3265M Free
Swap: 4096M Total, 4096M Free

性能測定では555MB/sも出ており、非常に良好です。が、どうもメモリの使われ方が違うようです。ファイルを消してもメモリが解放されません。
root@atom:~ # dd if=/dev/zero of=/tmp/hoge.foo bs=1m count=2000
2000+0 records in
2000+0 records out
2097152000 bytes transferred in 3.772000 secs (555978815 bytes/sec)
root@atom:~ #
root@atom:~ # top
CPU:  0.6% user,  0.0% nice,  0.8% system,  0.0% interrupt, 98.6% idle
Mem: 2065M Active, 1083M Inact, 114M Wired, 41M Cache, 90M Buf, 91M Free
Swap: 4096M Total, 4096M Free
root@atom:~ #
root@atom:~ # rm /tmp/hoge.foo
root@atom:~ #
root@atom:~ # top
CPU:  0.4% user,  0.0% nice,  0.8% system,  0.4% interrupt, 98.5% idle
Mem: 2069M Active, 788K Inact, 27M Wired, 1376K Buf, 1297M Free
Swap: 4096M Total, 4096M Free

ddで3GB弱のファイルを作成し、ほぼ空きメモリを使い切った状態でsambaで巨大なファイルをコピーしてみました。普段はsmbdプロセスがどんどんメモリを消費して1GB近くまで肥大化していくのですが、利用できるメモリがないのかsmbdのメモリ消費量は起動時と変わりません。
…が、どんどんスワップアウトしていきました。ダメじゃないですか。
root@atom:~ # top
CPU:  0.2% user,  0.0% nice,  1.2% system,  0.6% interrupt, 98.1% idle
Mem: 2831M Active, 249M Inact, 126M Wired, 99M Cache, 101M Buf, 89M Free
Swap: 4096M Total, 83M Used, 4013M Free, 2% Inuse
root@atom:~ #
root@atom:~ # top
CPU:  0.2% user,  0.0% nice,  0.2% system,  0.0% interrupt, 99.6% idle
Mem: 2861M Active, 141M Inact, 30M Wired, 1704K Cache, 90M Buf, 360M Free
Swap: 4096M Total, 151M Used, 3945M Free, 3% Inuse

とまぁ、こんな感じでした。実際どうやって使えば良いのでしょうね。一応、このあたりを参考にさせて頂きました。http://blog.livedoor.jp/dankogai/archives/50379924.html
nice!(0)  コメント(0) 
共通テーマ:日記・雑感

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。