mbuf autotuning changes

hiren panchasara hiren.panchasara at gmail.com
Fri Sep 6 19:36:49 UTC 2013


On Fri, Sep 6, 2013 at 12:14 PM, Alfred Perlstein <bright at mu.org> wrote:

> On 9/6/13 12:10 PM, hiren panchasara wrote:
>
>> tunable_mbinit() in kern_mbuf.c looks like this:
>>
>> 119         /*
>> 120          * The default limit for all mbuf related memory is 1/2 of all
>> 121          * available kernel memory (physical or kmem).
>> 122          * At most it can be 3/4 of available kernel memory.
>> 123          */
>> 124         realmem = qmin((quad_t)physmem * PAGE_SIZE,
>> 125             vm_map_max(kmem_map) - vm_map_min(kmem_map));
>> 126         maxmbufmem = realmem / 2;
>> 127         TUNABLE_QUAD_FETCH("kern.ipc.**maxmbufmem", &maxmbufmem);
>> 128         if (maxmbufmem > realmem / 4 * 3)
>> 129                 maxmbufmem = realmem / 4 * 3;
>>
>> If I am reading the code correctly, we loose the value on line 126 when we
>> do FETCH on line 127.
>>
>> And after line 127, if we havent specified kern.ipc.maxmbufmem (in
>> loader.conf - I guess...), we set that value to 0.
>>
>> And because of that the if condition on line 128 is almost always false?
>>
>> What am I missing here?
>>
>> Thanks,
>> Hiren
>> ______________________________**_________________
>> freebsd-net at freebsd.org mailing list
>> http://lists.freebsd.org/**mailman/listinfo/freebsd-net<http://lists.freebsd.org/mailman/listinfo/freebsd-net>
>> To unsubscribe, send any mail to "freebsd-net-unsubscribe@**freebsd.org<freebsd-net-unsubscribe at freebsd.org>
>> "
>>
>>  I think TUNABLE_*_FETCH will only write to the variable if it explicitly
> set.
>
> Meaning, unless the user actually sets a value in loader.conf then 127 is
> a no-op.
>

Thanks Navdeep and Alfred.

Thats correct. Its not touching the var if its not set.

I guess the other TUNABLE_INT_FETCHs later in the function checking for
variable ==0 confused me. i.e. nmbclusters.

131         TUNABLE_INT_FETCH("kern.ipc.nmbclusters", &nmbclusters);
132         if (nmbclusters == 0)
133                 nmbclusters = maxmbufmem / MCLBYTES / 4;

But those are global variable so here we are just checking if they are
explicitly set of not. If not, we will set them.

For maxmbufmem, we will set it to 1/2 the realmem. and if user sets it
explicitly than we will make sure its not more than 3/4 of the realmem.

Thanks again.
Hiren


More information about the freebsd-net mailing list