梅本です。
>>> Mon, 19 Apr 2010 18:12:02 +0900 の刻に「kiri」、すなわち
>>> KIRIYAMA Kazuhiko <[email protected]> 氏曰く
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/
[email protected] u...@{,jp.}FreeBSD.org
プログラムは書いた人の意図ではなく書かれた通り動く I hate Modula-3 :-)