梅本です。

>>> Mon, 19 Apr 2010 18:12:02 +0900 の刻に「kiri」、すなわち
>>> KIRIYAMA Kazuhiko <k...@pis.elm.toba-cmt.ac.jp> 氏曰く

kiri> nfsd ですが,どうも -n オプションが利かないみたいなんですが,
kiri> ソースをちょっと見たところどうも新しいカーネル(注)では全く
kiri> nfsd を産んでくれないみたいなんですが,これは仕様でしょうか?

全然気づいていませんでした。仕様でしょう。マルチプロセスではなくカーネ
ルスレッド化されているようです。

u...@himuro:~% ps axH |grep nfsd
17950  ??  S      0:00.32 nfsd: server (nfsd)
17950  ??  S      0:00.24 nfsd: server (nfsd)
17950  ??  S      0:00.20 nfsd: server (nfsd)
17950  ??  S      0:00.25 nfsd: server (nfsd)
51548  ??  Is     0:00.01 nfsd: master (nfsd)

kiri> ただ,強引に

kiri> --- /usr/src/usr.sbin/nfsd/nfsd.c.org     2009-08-03 17:13:06.000000000 
+0900
kiri> +++ /usr/src/usr.sbin/nfsd/nfsd.c 2010-04-19 17:49:41.000000000 +0900
kiri> @@ -392,7 +392,7 @@
kiri>                   new_syscall = TRUE;
kiri>   }
kiri>  
kiri> - if (!new_syscall) {
kiri> + if (new_syscall) {
kiri>           /* If we use UDP only, we start the last server below. */
kiri>           srvcnt = tcpflag ? nfsdcnt : nfsdcnt - 1;
kiri>           for (i = 0; i < srvcnt; i++) {

kiri> とかやってもうまくいかないのでどうも nfssvc 自体の仕様変更に
kiri> 伴なう問題かなぁと推測します.どなかた御知恵を... ;)

ここで fork() 後に呼んでいる start_server() で、new_syscall の場合に
nfssvc() 与える構造体に nfsdcnt をセットしています。名前からしてスレッ
ド数ですね。

                nfsdargs.principal = principal;
                nfsdargs.minthreads = nfsdcnt;
                nfsdargs.maxthreads = nfsdcnt;
                error = nfssvc(nfssvc_nfsd, &nfsdargs);

-- 
梅本 肇 @ インターネット互助会横浜  http://www.imasy.org/~ume/
u...@mahoroba.org  u...@{,jp.}FreeBSD.org
プログラムは書いた人の意図ではなく書かれた通り動く  I hate Modula-3 :-)

メールによる返信