Skip site navigation (1)Skip section navigation (2)
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>