Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Sep 2013 12:36:47 -0700
From:      hiren panchasara <hiren.panchasara@gmail.com>
To:        Alfred Perlstein <bright@mu.org>, Navdeep Parhar <np@freebsd.org>
Cc:        "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>
Subject:   Re: mbuf autotuning changes
Message-ID:  <CALCpEUFtAk7DRA27D=mZoEbO-8cYh45y6Go8g8q8u6d%2BWJVLLw@mail.gmail.com>
In-Reply-To: <522A2993.6020206@mu.org>
References:  <CALCpEUFxaXKh4%2B8evratZYE3JyfyTmrL7rzpBqUJ%2B_S3Ff-AcA@mail.gmail.com> <522A2993.6020206@mu.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Sep 6, 2013 at 12:14 PM, Alfred Perlstein <bright@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@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@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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CALCpEUFtAk7DRA27D=mZoEbO-8cYh45y6Go8g8q8u6d%2BWJVLLw>