mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-04 09:09:56 +00:00
Mirror of the FreeBSD src repository https://git.FreeBSD.org/src.git .
e1086b16a9
- There are two cases where the server can potentially block for a long time while servicing a request: when handling a yp_all() request, which could take a while to complete if the map being transfered is large (e.g. 'ypcat passwd' where passwd.byname has 10,000 entries in it), and while doing DNS lookups when in SunOS compat mode (with the -dns flag), since some DNS lookups can take a long time to complete. While ypserv is blocked, other clients making requests to the server will also block. To fix this, we fork() ypall and DNS lookups into subprocesses and let the parent ypserv process go on servicing other incoming requests. We place a cap on the number of simultaneous processes that ypserv can fork (set at 20 for now) and go back to 'linear mode' if it hits the limit (which just means it won't fork() anymore until the number of simultaneous processes drops under 20 again). The cap does not apply to fork()s done as a result of ypxfr calls, since we want to do our best to insure that map transfers from master servers succeed. To make this work, we need our own special copy of svc_run() so that we can properly terminate child processes once the RPC dispatch functions have run. (I have no idea what SunOS does in this situation. The only other possibility I can think of is async socket I/O, but that seems like a headache and a half to implement.) - Do the politically correct thing and use sigaction() instead of signal() to install the SIGCHLD handler and to ignore SIGPIPEs. - Doing a yp_all() is sometimes slow due to the way read_database() is implemented. This is turn is due to a certain deficiency in the DB hash method: the R_CURSOR flag doesn't work, which means that when handed a key and asked to return the key/data pair for the _next_ key in the map, we have to reset the DB pointer to the start of the database, step through until we find the requested key, step one space ahead to the _next_ key, and then use that. (The original ypserv code used GDBM has a function called gdbm_nextkey() that does this for you.) This can get really slow for large maps. However, when doing a ypall, it seems that all database access are sequential, so we can forgo the first step (the 'search the database until we find the key') since the database should remain open and the cursor should be positioned at the right place until the yp_all() call finishes. We can't make this assumption for arbitrary yp_first()s and yp_next()s however (since we may have requests from several clients for different maps all arriving at different times) so those we have to handle the old way. (This would be much easier if R_CURSOR really worked. Maybe I should be using something other than the hash method.) |
||
---|---|---|
bin | ||
eBones | ||
etc | ||
games | ||
gnu | ||
include | ||
lib | ||
libexec | ||
lkm | ||
release | ||
sbin | ||
secure | ||
share | ||
sys | ||
tools/regression/usr.bin/sed | ||
usr.bin | ||
usr.sbin | ||
COPYRIGHT | ||
CVS-INFO | ||
HW.TROUBLE | ||
Makefile | ||
README | ||
TODO |
----------------------------------------- FreeBSD 2.0 --- ALPHA Release , , ----------------------------------------- /( )` \ \___ / | Welcome to the ALPHA release of FreeBSD 2.0 - the /- _ `-/ ' first public snapshot of our new 4.4BSD Lite based (/\/ \ \ /\ operating system environment. This install proce- / / | ` \ dure is also at the ALPHA stage, and contains only O O ) / | the minimum functionality required by an `-^--'`< ' *EXPERIENCED* person to install the system. (_.) _ ) / It is our hope, of course, that the feedback `.___/` / provided from this snapshot will `-----' / greatly assist us in making the release <----. __ / __ \ of 2.0 much more user friendly. Your <----|====O)))==) \) /==== comments and criticisms are very <----' `--' `.__,' \ valuable to us, so please don't hesitate | | in contacting us! Full details on where and \ / /\ how to provide feedback are given below. ______( (_ / \______/ ,' ,-----' | This install procedure is ALPHA code, and `--{__________) may very possibly *DESTROY* the contents of your ENTIRE DISK! Please do not proceed with this installation unless you've adequately backed up your data first! If any errors occur during this installation, you can see them by toggling over to the alternate screen - type ALT-F2 to switch over, ALT-F1 to switch back to the install screen. The debugging output on the second screen may be very valuable to us in understanding your bug report, so please be sure to take note of it when reporting any failures in the installation! Thanks! Menus and scrolling output windows may be traversed with the arrow and Page Up/Page Down keys. To suspend the installation at any point, hit ESC twice. Hitting TAB will move the focus to different controls. If you've ever dealt with a DOS installation, you'll know how to deal with this. For a more complete description of what's new in this release, please see the release notes. For more documentation on this system, it is recommended that you purchase the 4.4BSD Document Set from O'Reilly Associates and the USENIX Association. ISBN 1-56592-082-1 We have no connection with O'Reilly, we're just satisfied customers! Have fun, and please let us know of any problems you encounter with this release! Comments should be sent to: hackers@FreeBSD.org Bug reports should be sent using the `send-pr' utility, if you were able to get the system installed, otherwise to: bugs@FreeBSD.org And general questions to: questions@FreeBSD.org Please have patience if your questions are not answered right away - this is an especially busy time for us, and our volunteer resources are often strained to the limit (if not somewhat past!). Thanks! The FreeBSD Project