Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 Jul 1995 14:20:37 -0700
From:      Matt Dillon <dillon@blob.best.net>
To:        bugs@freebsd.org
Subject:   Think we finally found the 'all processes block' bug
Message-ID:  <199507132120.OAA09138@blob.best.net>

next in thread | raw e-mail | index | archive | help
    I was finally able to catch it with a little custom ps I
    wrote that ran in a loop.

    It would appear that in a heavily loaded machine: 130 users,
    128 MB of ram, load of 10 or so, a condition can occur where
    near-all the processes lock themselves out waiting for new
    filesystem buffers (i.e. sleeping on "newbuf", in kern/kern_vfsbio.c).
    The ps shows up with a whole bunch of processes waiting on newbuf
    and an even larger contingent of processes waiting on ufslk2.

    Delving into the nbuf initialization code, in i386/i386/machdep.c,
    I noticed:


	if (nbuf == 0) {
		nbuf = 30;
		if( physmem > 1024)
			nbuf += min((physmem - 1024) / 12, 1024);
	}
	nswbuf = min(nbuf, 128);

    I believe the min is supposed to be a max, though this does not really
    solve the lockout condition... I have no idea how the lockout is occuring,
    but I believe that increasing the number of buffers will reduce the
    rate of occurance (currently the machine crashes about once a day with
    this bug).

    gdb'ing a live kernel, our 'nbuf' is 1054.  Changing the above min to
    a max would increase that number of 2000+.

    Could the clustering code have something to do with the lockout?  It
    could also be that the processes waiting on ufslk2 are creating the buffer
    shortfall and causding the 'newbuf' sleep problem.  

						Thanks,

						-Matt




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199507132120.OAA09138>