【チョコ】雪だるま作戦に思いを馳せながら雑談するスレッド Part36
FreeBSD のカーネルのこととかよくわかってませんが, kern_select() ってのは
select() / poll() に同時に渡せる FD 数ということで(つまりアドレスやポートの異なる
複数ソケットを同時に listen してるなど),セッション数とは直接関係ない気もしますが
どうなんでしょう...... もっとも,ユーザプログラム側でそのような select() / poll() を
実行していなくても,カーネル内部の I/O 処理に伴って実行してるとかなるとわかりませんが.
Apache の FD_SETSIZE は,以前は FD の数値がそれを越えているとエラーになるように
なってましたが,そのようなチェックは意味がないという指摘により今はそのチェックは
行わないようになっているはずなので......
>>458 なるほど......
>FreeBSD では。
>
>/usr/include/sys/types.h の FD_SETSIZE がすべてである。
>
>typedef unsigned long fd_mask;
>typedef struct fd_set {
> fd_mask fds_bits[((( 1024 ) + (( (sizeof(fd_mask) * 8 ) ) - 1)) / ( (sizeof(fd_mask) * 8 ) )) ];
>} fd_set;
>
>となっている。カーネルソースの sys/sys/types.h の FD_SETSIZEと、
>sys/sys/kern/sys_generic.c の 2048 という定数を変更すればいいのと、
>VCE をコンパイルする前に /usr/include/sys/types.h の FD_SETSIZE を
>それに合わせておくだけでよい。 linux の場合と同様、単なる配列なので、
>VCE がfd_set のサイズを大きく確保しすぎるのは問題なし。
>>461 FreeBSD 5.x以降だと、<sys/select.h>にあるようです。
で、見てみると、カーネル内部でもFD_SETSIZE使いまくりなので、
もっかい、カーネルを作り直すかも、かも。
/*
* Select uses bit masks of file descriptors in longs. These macros
* manipulate such bit fields (the filesystem macros use chars).
* FD_SETSIZE may be defined by the user, but the default here should
* be enough for most uses.
*/
#ifndef FD_SETSIZE
#define FD_SETSIZE 1024U
#endif
#define _NFDBITS (sizeof(__fd_mask) * 8) /* bits per mask */
#if __BSD_VISIBLE
#define NFDBITS _NFDBITS
#endif
#ifndef _howmany
#define _howmany(x, y) (((x) + ((y) - 1)) / (y))
#endif
typedef struct fd_set {
__fd_mask __fds_bits[_howmany(FD_SETSIZE, _NFDBITS)];
} fd_set;
#if __BSD_VISIBLE
#define fds_bits __fds_bits
#endif
>>462 下らない一言レスだけじゃなくチャンと議論もしろと。
まあ最近VIP化に拍車が掛かってるからね。
sys_generic.c:
/*
* This is kinda bogus. We have fd limits, but that is not
* really related to the size of the pollfd array. Make sure
* we let the process use at least FD_SETSIZE entries and at
* least enough for the current limits. We want to be reasonably
* safe, but not overly restrictive.
*/
PROC_LOCK(td->td_proc);
if ((nfds > lim_cur(td->td_proc, RLIMIT_NOFILE)) &&
(nfds > FD_SETSIZE)) {
PROC_UNLOCK(td->td_proc);
error = EINVAL;
goto done2;
}
工エェ(AA略。
466 :
名無し草:2006/02/07(火) 17:40:40 BE:37858526-#
>455
蝋燭そのものに関してなら観察すればわかる。
ちゃんと科学的説明もついてる。
最近は電灯も普及したし仏壇のない家も多いからなあ。
>>463 COPTFLAGS+= -DFD_SETSIZE=8192
を/etc/make.confに追加して、カーネルを再構築中。
>>465 結局 FD_SETSIZE が天井だったってことなんですかね......