tmpmfsを使ってみる (FreeBSD、2014/01/07) [FreeBSD]
/tmpの確保をオンメモリ(mfs)にするところまでは良いのですが、私は古い人間なので以下のようにfstabに直接書いていました。
最近(2004年ぐらいの記述も見受けられるのですが…)はtmpmfsなるものがあるらしく、ちょっと使ってみることにしました。基本的にはrc.confで同等のことが記述できるようになっており、管理上便利になっています。
簡単な性能測定もしてみたいので、メインメモリ4GBのうち(32ビットOSなので実際に使えるのは3.5Gぐらい?)3GB分を/tmpに割り当てることにします。
とりあえず設定前の状態です。(この検証用にリブートし、再起動直後のメモリ状態)
tmpmfsの設定はrc.confでこんな風な感じで。-Mオプションは、mallocバックエンドを使用するためのオプションです。
再起動してみましたが、メモリ使用状態に変化はありません。でも/tmpはちゃんと3GB確保されていました。
ここでddで巨大なファイルを作成してみます。213MB/sと結構早いです。ローカルのハードディスクは88MB/sぐらいなので2.5倍ぐらいですね。
使用中はメモリを消費します(Freeがほぼそのまま2GB分マイナスとなっている)が、ファイルを消すとメモリも解放されるというステキな仕様のようです。
ただ、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オプションを使わない方法も試してみました。起動直後のメモリの使われ方は同じようです。
性能測定では555MB/sも出ており、非常に良好です。が、どうもメモリの使われ方が違うようです。ファイルを消してもメモリが解放されません。
ddで3GB弱のファイルを作成し、ほぼ空きメモリを使い切った状態でsambaで巨大なファイルをコピーしてみました。普段はsmbdプロセスがどんどんメモリを消費して1GB近くまで肥大化していくのですが、利用できるメモリがないのかsmbdのメモリ消費量は起動時と変わりません。
…が、どんどんスワップアウトしていきました。ダメじゃないですか。
とまぁ、こんな感じでした。実際どうやって使えば良いのでしょうね。一応、このあたりを参考にさせて頂きました。http://blog.livedoor.jp/dankogai/archives/50379924.html
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
コメント 0