Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Dec 2002 17:54:46 +0300 (MSK)
From:      Varshavchick Alexander <alex@metrocom.ru>
To:        David Schultz <dschultz@uclink.Berkeley.EDU>
Cc:        Terry Lambert <tlambert2@mindspring.com>, <freebsd-questions@FreeBSD.ORG>, <freebsd-hackers@FreeBSD.ORG>
Subject:   Re: maxusers and random system freezes
Message-ID:  <Pine.GSO.4.33.0212091733590.13345-100000@apache.metrocom.ru>
In-Reply-To: <20021206134724.GA16965@HAL9000.homeunix.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi David,

Thanks, you're a genuis, didn't you know that? Your patch worked perfectly
:)

However, it didn't solve the random freezes problem. The server felt
relieved a bit, load average value pushed down a little, so when the
server is working, this change did him good.

Now more about a state when the server sleeps. It behaves as though the
load average has suddently fired to some immense value - the system
responds to ping, but all other activity has almost halted. It's not like
the server went to a swap, because it occurs practically instantly, and
this state goes for hours. The system is lacking some resources, or may be
a bug somewhere, can you give any hints to it?

My best wishes

----
Alexander Varshavchick, Metrocom Joint Stock Company
Phone: (812)118-3322, 118-3115(fax)

On Fri, 6 Dec 2002, David Schultz wrote:

> Date: Fri, 6 Dec 2002 05:47:24 -0800
> From: David Schultz <dschultz@uclink.Berkeley.EDU>
> To: Varshavchick Alexander <alex@metrocom.ru>
> Cc: Terry Lambert <tlambert2@mindspring.com>, freebsd-questions@FreeBSD.ORG,
>      freebsd-hackers@FreeBSD.ORG
> Subject: Re: maxusers and random system freezes
>
> Thus spake Varshavchick Alexander <alex@metrocom.ru>:
> > On Fri, 6 Dec 2002, David Schultz wrote:
> >
> > > Thus spake Varshavchick Alexander <alex@metrocom.ru>:
> > > > Well, now I made KVA space 2G, we'll see later on if it helps to get rid
> > > > of the sudden system halts, but for some reason a side-effect has
> > > > appeared: pthread_create function returns EAGAIN error now, so I had to
> > > > recompile the software using it with linux threads to make it working.
> > > > With the old kernel these pieces worked without problems. Can it be that
> > > > somehow the enlarged KVA space messed up with the threads mechanism?
> > >
> > > I'm not a pthreads expert, but my best guess is that your program
> > > tried to create a thread with a stack address that was too high.
> > > Remember that with a 2 GB KVA, user processes have only 2 GB to
> > > play with instead of 3 GB, so attempting to mmap() a stack above
> > > about 2 GB would cause pthread_create() to return EAGAIN.
> > >
> >
> > Yes this makes sense, however this call to pthread_create didn't specify
> > any special addresses for the new thread. The pthread_create was called
> > with the NULL attribute which means that the system defaults were being
> > used. Something in the system has gone wrong...
>
> I just glanced at the source in -STABLE, and it appears to be a
> pthreads bug.  (Then again, maybe I'm missing something, since
> nobody seems to have noticed this before.)  The default address at
> which new thread stacks are created is just below the main stack.
> This address is based on the lexical constant USRSTACK, but it
> should be initialized in uthread_init() based on the kern.usrstack
> value returned by sysctl.  (The correct value is already used to
> map the main stack's red zone.)  The result is that you need to
> make world and recompile any apps statically linked against
> pthreads after building your new kernel in order to get things to
> work.
>
> I don't have time to fiddle with pthreads until after Christmas,
> but you might see if the following patch (against -STABLE) helps
> when you reduce the configured KVA size without remaking pthreads.
>
> Index: uthread/uthread_init.c
> ===================================================================
> RCS file: /home/ncvs/src/lib/libc_r/uthread/uthread_init.c,v
> retrieving revision 1.23.2.10
> diff -u -r1.23.2.10 uthread_init.c
> --- uthread/uthread_init.c	2002/10/22 14:44:03	1.23.2.10
> +++ uthread/uthread_init.c	2002/12/06 13:41:06
> @@ -245,6 +245,8 @@
>  		len = sizeof (int);
>  		if (sysctl(mib, 2, &_usrstack, &len, NULL, 0) == -1)
>  			_usrstack = (void *)USRSTACK;
> +		_next_stack = _usrstack - PTHREAD_STACK_INITIAL -
> +		    PTHREAD_STACK_DEFAULT - (2 * PTHREAD_STACK_GUARD);
>  		/*
>  		 * Create a red zone below the main stack.  All other stacks are
>  		 * constrained to a maximum size by the paramters passed to
>


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.33.0212091733590.13345-100000>