Date: Tue, 21 Dec 2010 10:59:43 +0200 From: Andriy Gapon <avg@freebsd.org> To: perryh@pluto.rain.com Cc: freebsd-stable@freebsd.org Subject: Re: Tunables (Re: How to debug a double fault? (Re: Could MSGBUF_SIZE be made a loader tunable?)) Message-ID: <4D106C7F.5090409@freebsd.org> In-Reply-To: <4d0dcc58.Z6ITxDmhSuMVmGVR%perryh@pluto.rain.com> References: <4cfc72a5.3nAjkv8mdrO/NrKQ%perryh@pluto.rain.com> <4CFD0633.9060509@freebsd.org> <4d089a74.vwMJkPEIddt7PIxy%perryh@pluto.rain.com> <4D08AACB.6060306@freebsd.org> <4d09dd2e.iVncbZ/gHBXX0WdL%perryh@pluto.rain.com> <4D09E0F3.5040302@freebsd.org> <4d0dcc58.Z6ITxDmhSuMVmGVR%perryh@pluto.rain.com>
next in thread | previous in thread | raw e-mail | index | archive | help
on 19/12/2010 11:11 perryh@pluto.rain.com said the following: > Andriy Gapon <avg@freebsd.org> wrote: >> on 16/12/2010 11:34 perryh@pluto.rain.com said the following: >>> Andriy Gapon <avg@freebsd.org> wrote: >>>> BTW, are you sure that you correctly placed initialization of >>>> msgbufsize ? >>> >>> I am not at all sure of that ... >>> >>> Apart from the name, msgbufsize is set up in exactly the same >>> way and place -- in init_param1() -- as maxswzone and maxbcache. >>> Perhaps that is not early enough ... >> >> I don't see any connection between msgbufsize and maxswzone, >> so I also don't know if that place is early enough. > > The only "connection" is that maxswzone and maxbcache seemed to > be loader tunables that cannot be changed (via sysctl) while the > system is running -- the same usage paradigm I have in mind for > msgbufsize. In other words they are all tunables. We have dozens of them. > I've since found the description of i386 startup in the Architecture > Handbook, and based on that -- and the code in locore.s and machdep.c > -- it certainly _seems_ as if init_param1() should be early enough: > > Practically the first thing that locore.s does after establishing > virtual addressing is to call init386(), and init386() calls > init_param1() long before it either accesses msgbufsize directly > or calls getmemsize() (which uses msgbufsize to allocate space for > the kernel message buffer). Documentation and code are known to get out of sync sometimes. Not saying that this is the case here though... >> Just try to initialize the variable where it's defined and use >> TUNABLE_LONG. > > Is there any documentation on how to use the TUNABLE_* macros, or > on when to use, say, TUNABLE_LONG vs TUNABLE_LONG_FETCH? I found > nothing with their definitions in sys/kernel.h, nor in any of the > base-system manpages, nor in /usr/share/doc/... Another question for which I don't have an answer. So far in my experience TUNABLE_XXX has always sufficed for me, I've never had a reason to use TUNABLE_XXX_FETCH. Technical difference is that TUNABLE_XXX_FETCH is a function (function-like macro) that explicitly fetches tunable's value from kernel environment; while TUNABLE_XXX is a wrapper around SYSINIT that registers the tunable for automatic processing during rather early stage of boot (SI_SUB_TUNABLES). -- Andriy Gapon
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4D106C7F.5090409>