Date: Mon, 1 Dec 1997 02:46:22 -0700 (MST) From: Charles Mott <cmott@srv.net> To: chat@FreeBSD.ORG Cc: hackers@FreeBSD.ORG Subject: Re: ftp server on ftp.cdrom.com Message-ID: <Pine.BSF.3.96.971201023942.8138A-100000@darkstar.home> In-Reply-To: <199712010456.UAA00927@implode.root.com>
next in thread | previous in thread | raw e-mail | index | archive | help
> I implemented the limit using (believe it or not) system V shared memory. > The login class idea from wu-ftpd is escentially the same, but the > implementation in wu-ftpd doesn't scale and is very slow. Why is it slow? > Wu-ftpd maintains a file of all of the process IDs for a given class and > since this might become stale if an ftpd process should terminate unusually > or if the system crashes, it verifies each of the entries by doing a > kill(pid, 0) on them. On a machine like wcarchive, this means thousands of > kill()'s every time the limit for a class needs to be checked, which is at > least once for the login, and perhaps again if the current number is output > in the welcome message. Looking for a better way, I noticed one day that > system V shared memory keeps a count on the number of processes that have a > segment mapped, and further, the attach count is available via shmctl(). Aha. > So, I map ("attach") the appropriate shared memory segment into the process > (there is one per ftp login class). If the process exits for any reason, > normal or abnormal, the system unmaps the shared memory segment and thus > always keeps the attach count accurate. This provides a very low overhead > way of tracking the current number of users in each class without the need > of all of the PID files and verification. This is a really interesting way to do things. Question: is there anything unreliable about using waitpid() to see which processes have terminated? Charles Mott
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.96.971201023942.8138A-100000>