Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Jul 2011 10:24:21 +0400
From:      Sergey Kandaurov <pluknet@freebsd.org>
To:        John Baldwin <jhb@freebsd.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, Attilio Rao <attilio@freebsd.org>, Robert Watson <rwatson@freebsd.org>, Pan Tsu <inyaoo@gmail.com>, svn-src-head@freebsd.org, Sean Bruno <seanbru@yahoo-inc.com>
Subject:   Re: svn commit: r224217 - in head/sys: amd64/include ia64/include mips/conf sys
Message-ID:  <CAE-mSOLCoRR02pA5JDa=itZhtsDyBE5-sF7DjawPdg6zopn8fw@mail.gmail.com>
In-Reply-To: <201107210920.09604.jhb@freebsd.org>
References:  <201107191300.p6JD0UU7073447@svn.freebsd.org> <CAJ-FndB5m5%2BzxO=5eyKXBdzHiSPBDGoSPeXNTkp1fdB3EQZZ3A@mail.gmail.com> <CAE-mSOKyJmN=yqAa4bB_KdiO%2B0fPb5nMxRdM2WHS1aT1cfoD7g@mail.gmail.com> <201107210920.09604.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 21 July 2011 17:20, John Baldwin <jhb@freebsd.org> wrote:
> On Thursday, July 21, 2011 8:37:26 am Sergey Kandaurov wrote:
>> On 21 July 2011 14:14, Attilio Rao <attilio@freebsd.org> wrote:
>> > 2011/7/20 Pan Tsu <inyaoo@gmail.com>:
>> >> Attilio Rao <attilio@FreeBSD.org> writes:
>> >>
>> >>> Author: attilio
>> >>> Date: Tue Jul 19 13:00:30 2011
>> >>> New Revision: 224217
>> >>> URL: http://svn.freebsd.org/changeset/base/224217
>> >>>
>> >>> Log:
>> >>> =A0 Bump MAXCPU for amd64, ia64 and XLP mips appropriately.
>> >>> =A0 From now on, default values for FreeBSD will be 64 maxiumum supp=
orted
>> >>> =A0 CPUs on amd64 and ia64 and 128 for XLP. All the other architectu=
res
>> >>> =A0 seem already capped appropriately (with the exception of sparc64=
 which
>> >>> =A0 needs further support on jalapeno flavour).
>> >>>
>> >>> =A0 Bump __FreeBSD_version in order to reflect KBI/KPI brekage intro=
duced
>> >>> =A0 during the infrastructure cleanup for supporting MAXCPU > 32. Th=
is
>> >>> =A0 covers cpumask_t retiral too.
>> >>>
>> >>> =A0 The switch is considered completed at the present time, so for
> whatever
>> >>> =A0 bug you may experience that is reconducible to that area, please
> report
>> >>> =A0 immediately.
>> >>>
>> >>> =A0 Requested by: =A0 =A0 =A0 marcel, jchandra
>> >>> =A0 Tested by: =A0pluknet, sbruno
>> >>> =A0 Approved by: =A0 =A0 =A0 =A0re (kib)
>> >>>
>> >>> Modified:
>> >>> =A0 head/sys/amd64/include/param.h
>> >>> =A0 head/sys/ia64/include/param.h
>> >>> =A0 head/sys/mips/conf/XLP
>> >>> =A0 head/sys/mips/conf/XLP64
>> >>> =A0 head/sys/mips/conf/XLPN32
>> >>> =A0 head/sys/sys/param.h
>> >>>
>> >>> Modified: head/sys/amd64/include/param.h
>> >>>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
>> >>> --- head/sys/amd64/include/param.h =A0 =A0Tue Jul 19 12:41:57 2011
> =A0(r224216)
>> >>> +++ head/sys/amd64/include/param.h =A0 =A0Tue Jul 19 13:00:30 2011
> =A0(r224217)
>> >>> @@ -65,7 +65,7 @@
>> >>>
>> >>> =A0#if defined(SMP) || defined(KLD_MODULE)
>> >>> =A0#ifndef MAXCPU
>> >>> -#define MAXCPU =A0 =A0 =A0 =A0 =A0 =A0 =A0 32
>> >>> +#define MAXCPU =A0 =A0 =A0 =A0 =A0 =A0 =A0 64
>> >>> =A0#endif
>> >>> =A0#else
>> >>> =A0#define MAXCPU =A0 =A0 =A0 =A0 =A0 =A0 =A0 1
>> >>
>> >> Do you plan to bump MEMSTAT_MAXCPU, too?
>> >>
>> >> =A0$ vmstat -z
>> >> =A0vmstat: memstat_sysctl_uma: Too many CPUs
>> >> =A0$ vmstat -m
>> >> =A0vmstat: memstat_sysctl_malloc: Too many CPUs
>> >>
>> >> =A0$ sysctl kern. | grep smp.\*cpus
>> >> =A0kern.smp.maxcpus: 64
>> >> =A0kern.smp.cpus: 2
>> >>
>> >
>> > Jeeeez, we seriously need to fix this getting rid of the static values=
.
>> >
>> > Anyway, can you try the following patch?:
>> > http://www.freebsd.org/~attilio/memstat_maxcpu.diff
>> >
>> > It is going to add some memory overhead for i386 case.
>> >
>>
>> Something like this should work (vmstat -z, vmstat -m both work).
>> It gets rid of MEMSTAT_MAXCPU at the expense of malloc() at runtime.
>> http://plukky.net/~pluknet/patches/libmemstat_nomaxcpu.diff
>>
>> Probably it should work with maxid, instead of maxcpu to save some memor=
y.
>> Though, using maxcpu is more safe.
>
> Actually, I would prefer that it use mp_maxid as that is the general vari=
able
> things should use. =A0mp_maxcpus is a concession for the few places that =
may
> need to know the MAXCPUS value (e.g. if using libkvm to access a structur=
e in
> a crashdump or live kernel that has a member array with MAXCPU elements).
> Code that just wants to allocate memory to hold per-CPU data should use
> mp_maxid whenever possible.
>

Hi,

I changed the patch to use mp_maxid wherever possible.
http://plukky.net/~pluknet/patches/libmemstat_nomaxcpu.2.diff

To summarize:

1) malloc stats
kern.malloc_stats uses internally MAXCPU, and we have to query MAXCPU
from kernel, too. See kern/kern_malloc.c:sysctl_kern_malloc_stats():
849    mtsh.mtsh_maxcpus =3D MAXCPU;

1a) memstat_sysctl_malloc()
left unchanged, sysctl kern.smp.maxcpus
1b) memstat_kvm_malloc()
left unchanged, _mp_maxcpus symbol

2) uma stats
vm.zone_stats uses (mp_maxid + 1), vm/uma_core.c:sysctl_vm_zone_stats():
3247    ush.ush_maxcpus =3D (mp_maxid + 1);

2a) memstat_sysctl_uma()
Switched to query sysctl kern.smp.maxid
2b) memstat_kvm_uma()
left unchanged,  _mp_maxid symbol

So, there's only one change in memstat_sysctl_uma().
A bad side of things is that libmemstat() now knows these vm_zone
and malloc_stats internals.
As Robert suggested me on IRC to query maxcpu value from
uma_stream_header and malloc_type_stream_header structures
respectively to be independent from kernel details.

--=20
wbr,
pluknet



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAE-mSOLCoRR02pA5JDa=itZhtsDyBE5-sF7DjawPdg6zopn8fw>