Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Sep 2013 21:26:37 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Adrian Chadd <adrian@freebsd.org>
Cc:        "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>, hiren panchasara <hiren.panchasara@gmail.com>, "freebsd-mips@freebsd.org" <freebsd-mips@freebsd.org>
Subject:   Re: mbuf autotuning effect
Message-ID:  <9CBFAD35-D651-4E28-BEBB-DC3717F38567@bsdimp.com>
In-Reply-To: <CAJ-VmomAjsU%2Bnc=4AEdSn5gDhspc2YVrDtPophJvmee1kSTYog@mail.gmail.com>
References:  <CALCpEUHoAS2RRyO7JVOeSKWKiss9vZmN%2BxA1BDpwHDpkEYcjEA@mail.gmail.com> <CAJ-VmomAjsU%2Bnc=4AEdSn5gDhspc2YVrDtPophJvmee1kSTYog@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

On Sep 6, 2013, at 7:11 PM, Adrian Chadd wrote:

> Yeah, why is VM_KMEM_SIZE only 12mbyte for MIPS? That's a little low =
for a
> platform that has a direct map that's slightly larger than 12mb :)
>=20
> Warner? Juli?

All architectures have it at 12MB, except sparc64 where it is 16MB. This =
can be changed with the options VM_KMEM_SIZE=3Dxxxxx in the config file.

So my guess as to why this is the case: cut and paste worked, so nobody =
changed it after that.

# Still need to reads hiren's email to comprehend it...

Warner


>=20
>=20
> -adrian
>=20
>=20
>=20
> On 6 September 2013 16:36, hiren panchasara =
<hiren.panchasara@gmail.com>wrote:
>=20
>> We are seeing an interesting thing on a mips board with 32MB ram.
>>=20
>> We run out of mbuf very easily and looking at numbers it seems we are =
only
>> getting 6mb of maxmbufmem.
>>=20
>> # sysctl -a | grep hw | grep mem
>> hw.physmem: 33554432
>> hw.usermem: 21774336
>> hw.realmem: 33554432
>> #
>> # sysctl -a | grep maxmbuf
>> kern.ipc.maxmbufmem: 6291456
>>=20
>> I believe that number is very low for a board with 32mb of ram.
>>=20
>> Looking at the code:
>>=20
>> sys/kern/kern_mbuf.c : tunable_mbinit()
>>=20
>> 124         realmem =3D qmin((quad_t)physmem * PAGE_SIZE, =
vm_kmem_size);
>> 125         maxmbufmem =3D realmem / 2;
>> 126         TUNABLE_QUAD_FETCH("kern.ipc.maxmbufmem", &maxmbufmem);
>> 127         if (maxmbufmem > realmem / 4 * 3)
>> 128                 maxmbufmem =3D realmem / 4 * 3;
>>=20
>> So, realmem plays important role in determining maxmbufmem.
>>=20
>> physmem =3D 32mb
>> PAGE_SIZE =3D 4096
>>=20
>> vm_kmem_size is calculated inside sys/kern/kern_malloc.c : kmeminit()
>>=20
>> 705         vm_kmem_size =3D VM_KMEM_SIZE + nmbclusters * PAGE_SIZE;
>> 706         mem_size =3D cnt.v_page_count;
>> 707
>> 708 #if defined(VM_KMEM_SIZE_SCALE)
>> 709         vm_kmem_size_scale =3D VM_KMEM_SIZE_SCALE;
>> 710 #endif
>> 711         TUNABLE_INT_FETCH("vm.kmem_size_scale", =
&vm_kmem_size_scale);
>> 712         if (vm_kmem_size_scale > 0 &&
>> 713             (mem_size / vm_kmem_size_scale) > (vm_kmem_size /
>> PAGE_SIZE))
>> 714                 vm_kmem_size =3D (mem_size / vm_kmem_size_scale) =
*
>> PAGE_SIZE;
>>=20
>> here,
>> VM_KMEM_SIZE =3D 12*1024*1024
>> nmbclusters =3D 0 (initially)
>> PAGE_SIZE =3D 4096
>> # sysctl -a | grep v_page_count
>> vm.stats.vm.v_page_count: 7035
>>=20
>> and VM_KMEM_SIZE_SCALE =3D 3 for mips.
>>=20
>> So, vm_kmem_size =3D 12mb.
>>=20
>> Going back to tunable_mbinit(),
>> we get realmem =3D 12mb.
>> and masmbufmem =3D 6mb.
>>=20
>>=20
>> Wanted to see if I am following the code correctly and how autotuning
>> should work here.
>>=20
>> cheers,
>> Hiren
>> _______________________________________________
>> freebsd-net@freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-net
>> To unsubscribe, send any mail to =
"freebsd-net-unsubscribe@freebsd.org"
>>=20
> _______________________________________________
> freebsd-mips@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-mips
> To unsubscribe, send any mail to =
"freebsd-mips-unsubscribe@freebsd.org"




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9CBFAD35-D651-4E28-BEBB-DC3717F38567>