Apologies, just realised I should make a quick correction. When I
said "The maxusers value gets compiled into the param.o object", I
meant that values which are calculated from maxusers are compiled into
the object file. MAXUSERS is a macro, and not itself placed into the
object file.
On 4/30/17, Wiremu Demchick <william.demchick@gmail.com> wrote:
> I'm new to the OpenBSD source, so I welcome correction from someone
> who knows more. But, I'll put my neck out and attempt to give a basic
> tour of this aspect of the source.
>
> The maxusers entry in the config(8) file is where it all begins.
> http://man.openbsd.org/config.8
>
> The figure of 80 seems to be the default used for GENERIC builds for
> i386 and amd64. However, the figure is different for some platforms,
> like Octeon, where it is 32. You may be interested in the following
> source files:
> sys/arch/amd64/conf/GENERIC
> sys/arch/i386/conf/GENERIC
> sys/arch/octeon/conf/GENERIC
>
> The maxusers value gets compiled into the param.o object, see:
> sys/conf/param.c
> sys/arch/amd64/conf/Makefile.amd64 lines 105-110
>
> Note that in param.c the maxusers value is now called MAXUSERS. In
> param.c, MAXUSERS is used to calculated a few values, namely
> maxprocess, maxthread, maxfiles, and initialvnodes.
>
> Taking the example of maxprocess and maxthread, we see in
> sys/kern/kern.c the following comment:
> 287 /*
> 288 * Although process entries are dynamically created,
> we still keep
> 289 * a global limit on the maximum number we will
> create. We reserve
> 290 * the last 5 processes to root. The variable nprocesses is
> the
> 291 * current number of processes, maxprocess is the
> limit. Similar
> 292 * rules for threads (struct proc): we reserve the
> last 5 to root;
> 293 * the variable nthreads is the current number of
> procs, maxthread is
> 294 * the limit.
> 295 */
>
> So, it would appear that in this case the maxprocess value (which is
> calculated from MAXUSERS) is a global max. However, as far as I can
> tell, it would appear that MAXUSERS is not an absolute limit on the
> maximum number of users that can have processes running at a given
> time, but is rather a variable used to estimate what resources are
> required. (See again the config(8) manpage, which says maxusers is
> "Used to size various system tables and maximum operating conditions
> in an approximate fashion.".)
>
> Of course, there are the limits imposed upon individual users, but
> that is a different mechanism. (See
> http://man.openbsd.org/getrlimit.2, RLIMIT_NPROC. kern_fork.c also
> implements this limit.)
>
> So, to answer your question, what happens when the process table is
> full? Line 301 of kern_fork.c says:
> return EAGAIN;
>
> That agrees with:
> http://man.openbsd.org/fork.2
>
> In the case of maxfiles, it seems like ENFILE is returned, but I have
> not confirmed this:
> http://man.openbsd.org/open.2
>
> Mauri ora koutou.
>
> On 4/30/17, Luke Small <lukensmall@gmail.com> wrote:
>> As I recall, there is a build configuration of 80 users for some kernel
>> components. What happens if the system exceeds that number?
>>
>
--
Wiremu Demchick
īmēra - william.demchick@gmail.com
īmēra - william@generationzero.org.nz
īmēra - william.demchick@enspiral.com
waea - 04 282 0414 (+6442820414)
waea pūkoro - 021 292 3891 (+64212923891)
kei wikimedia - Kiwi128
No comments:
Post a Comment