[FreeBSD-users-jp 92980] Can't fork nfsd
桐山です nfsd ですが,どうも -n オプションが利かないみたいなんですが, ソースをちょっと見たところどうも新しいカーネル(注)では全く nfsd を産んでくれないみたいなんですが,これは仕様でしょうか? ただ,強引に --- /usr/src/usr.sbin/nfsd/nfsd.c.org 2009-08-03 17:13:06.0 +0900 +++ /usr/src/usr.sbin/nfsd/nfsd.c 2010-04-19 17:49:41.0 +0900 @@ -392,7 +392,7 @@ new_syscall = TRUE; } - if (!new_syscall) { + if (new_syscall) { /* If we use UDP only, we start the last server below. */ srvcnt = tcpflag ? nfsdcnt : nfsdcnt - 1; for (i = 0; i < srvcnt; i++) { とかやってもうまくいかないのでどうも nfssvc 自体の仕様変更に 伴なう問題かなぁと推測します.どなかた御知恵を... ;) swap# uname -a FreeBSD swap.cct2 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sat Nov 21 15:48:17 UTC 2009 r...@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386 swap# ident nfsd nfsd: $FreeBSD: src/lib/csu/i386-elf/crti.S,v 1.7.22.1.2.1 2009/10/25 01:10:29 kensmith Exp $ $FreeBSD: src/lib/csu/i386-elf/crtn.S,v 1.6.22.1.2.1 2009/10/25 01:10:29 kensmith Exp $ $FreeBSD: src/lib/csu/common/crtbrand.c,v 1.6.2.1.2.1 2009/10/25 01:10:29 kensmith Exp $ $FreeBSD: src/lib/csu/i386-elf/crt1.c,v 1.15.10.1.2.1 2009/10/25 01:10:29 kensmith Exp $ swap# ident nfsd.c nfsd.c: $FreeBSD: src/usr.sbin/nfsd/nfsd.c,v 1.38.2.1.2.1 2009/10/25 01:10:29 kensmith Exp $ swap# です. (注) new-style NFSSVC_NFSD をサポートしているやつ
[FreeBSD-users-jp 92981] Re: Can't fork nfsd
梅本です。 >>> Mon, 19 Apr 2010 18:12:02 +0900 の刻に「kiri」、すなわち >>> KIRIYAMA Kazuhiko 氏曰く 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.0 +0900 kiri> +++ /usr/src/usr.sbin/nfsd/nfsd.c 2010-04-19 17:49:41.0 +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 :-)
[FreeBSD-users-jp 92982] Re: Can't fork nfsd
桐山です At Mon, 19 Apr 2010 18:59:33 +0900, Hajimu UMEMOTO wrote: > > 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) なるほど... > ここで fork() 後に呼んでいる start_server() で、new_syscall の場合に > nfssvc() 与える構造体に nfsdcnt をセットしています。名前からしてスレッ > ド数ですね。 > > nfsdargs.principal = principal; > nfsdargs.minthreads = nfsdcnt; > nfsdargs.maxthreads = nfsdcnt; > error = nfssvc(nfssvc_nfsd, &nfsdargs); /usr/include/fs/nfs/nfs.h (↓) ですね /* * nfsd argument for new krpc. */ struct nfsd_nfsd_args { const char *principal; /* GSS-API service principal name */ int minthreads; /* minimum service thread count */ int maxthreads; /* maximum service thread count */ }; ただ,現状は数十台のディスクレスクライアントマシンを同時に一 斉に立ち上げているのですが,以前(6.2-RELEASE-p7)に比べ驚異的 に遅くなっています(注).クライアントの方もスレッド対応にしな いといけないということはありますか? クライアントの rc.conf は [1] なかんじです.まぁ,6.2-RELEASE-p7 は OS はローカルで KDE3.5に対し 8.0-STABLE の方は完全ディスクレスで KDE4.3.4 ってのはありますけど.... (注) 2〜3分(6.2-RELEASE-p7)→20〜30分(8.0-STABLE) [1] http://www.openedu.org/~kiri/trouble/rc.conf.default