tmpmfs: g_vfs_done()2006年09月15日 14時10分23秒


g_vfs_done():md0[WRITE(offset=130381824, length=2048)]error = 28
g_vfs_done():md0[WRITE(offset=131135488, length=2048)]error = 28

が出ているのをしばしば見かけていた。。md0 から mfs 関連らしいのは察していた。長い間様子を見ていたのだが、mfs tmp がやはり怪しいようだ。

/etc/defaults/rc.conf には


tmpmfs="AUTO"           # Set to YES to always create an mfs /tmp, NO to never
tmpsize="20m"           # Size of mfs /tmp if created
tmpmfs_flags="-S -M"    # Extra mdmfs options for the mfs /tmp

と設定されている。

それを、rc.conf にて以下のように設定していた。


tmpmfs="YES"            # Set to YES to always create an mfs /tmp, NO to never
tmpsize="128m"          # Size of mfs /tmp if created
tmpmfs_flags="-S -M -o async"   # Extra mdmfs options for the mfs /tmp


-o async が実際に役に立っていたかはよく分からない。実メモリは 512MB なので、大き過ぎることはないと思ったが、時折カーネルがパニックを起こしていた。そのほとんどが、/tmp に大きめのアーカイブを展開したときだった。また、パニックにまで陥らなくても、上記のようなエラーが、/var/log/messages に残っていた。

man mdmfs には、


     -M      Create a malloc(9) backed disk (MD_MALLOC) instead of a swap-
             backed disk.

とある。 man mdmconfig を見ると、

     -t type
             Select the type of the memory disk.

             malloc   Storage for this type of memory disk is allocated with
                      malloc(9).  This limits the size to the malloc bucket
                      limit in the kernel.  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.

とある。-o reserve が無いせいではないのだろうか。

元々、MD_MALLOC よりも、MD_SWAP の動作の方が、都合がいい。現在のところは、tmpmfs_flags から -M を除き MD_SWAP にしている。それ以降、/tmp に絡むカーネルパニックは起こらなくなった。

コメント

_ 抹茶 ― 2007年11月05日 09時04分38秒

いろいろ調べてもよくわからなかったので教えてください。
なぜMD_MALLOC よりも、MD_SWAP の動作の方が、都合がいいなのですか?

_ uyota ― 2007年11月09日 15時16分30秒

MD_SWAP の方が、安全と言った方がより正確な表現でしょう。MD_MALLOC は実メモリのみを割り当てます。FreeBSD の VM は遅延割当をします。つまり、-o reserve が無いと、MD_MALLOC 用のメモリは必要になるまで割り当てられません。もし、必要になった時に既にメモリが全部使われていて、融通できないと panic を起こします。MD_MALLOC は実メモリのみを使えとの命令です。

それに引き替え、MD_SWAP は仮想メモリから割り当てます。実メモリが足りなくなった場合には、カーネルはこの md に割り当てたメモリを一時的にスワップ領域に退避出来ます。それ故、実メモリ以上の領域を割り当てても、panic しないのです。ディスクに余裕があれば、スワップ領域を追加できるので、MD_MALLOC などと違い応急措置も取れるので、比較的安全なのです。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2006/09/15/524634/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。