Date: Thu, 28 Jun 2012 10:53:01 +0300 From: Konstantin Belousov <kostikbel@gmail.com> To: davidxu@freebsd.org Cc: Attilio Rao <attilio@freebsd.org>, svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r237660 - head/lib/libc/gen Message-ID: <20120628075301.GS2337@deviant.kiev.zoral.com.ua> In-Reply-To: <4FEBC70F.40408@gmail.com> References: <201206272032.q5RKWjvt031174@svn.freebsd.org> <4FEBB8C9.8070006@gmail.com> <CAJ-FndBdpP4hFPyqHaU6GucXeGi3WT4d%2Bpu-9hCNEpAPZAZQgg@mail.gmail.com> <4FEBC0A2.3010708@gmail.com> <CAJ-FndD9Hc_KvHe8vC3usVDZh7MYb51gtXsHgmins8dBC3mu_w@mail.gmail.com> <4FEBC70F.40408@gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--YD+BIkcXU0IoTTos Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Jun 28, 2012 at 10:53:03AM +0800, David Xu wrote: > On 2012/6/28 10:32, Attilio Rao wrote: > >2012/6/28, David Xu<listlog2011@gmail.com>: > >>On 2012/6/28 10:21, Attilio Rao wrote: > >>>2012/6/28, David Xu<listlog2011@gmail.com>: > >>>>On 2012/6/28 4:32, Konstantin Belousov wrote: > >>>>>Author: kib > >>>>>Date: Wed Jun 27 20:32:45 2012 > >>>>>New Revision: 237660 > >>>>>URL: http://svn.freebsd.org/changeset/base/237660 > >>>>> > >>>>>Log: > >>>>> Optimize the handling of SC_NPROCESSORS_CONF, by using auxv=20 > >>>>> AT_NCPU > >>>>> value if present. > >>>>> > >>>>> MFC after: 1 week > >>>>> > >>>>>Modified: > >>>>> head/lib/libc/gen/sysconf.c > >>>>> > >>>>>Modified: head/lib/libc/gen/sysconf.c > >>>>>=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/lib/libc/gen/sysconf.c Wed Jun 27 20:24:25 2012 (r237659) > >>>>>+++ head/lib/libc/gen/sysconf.c Wed Jun 27 20:32:45 2012 (r237660) > >>>>>@@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$"); > >>>>> #include<sys/resource.h> > >>>>> #include<sys/socket.h> > >>>>> > >>>>>+#include<elf.h> > >>>>> #include<errno.h> > >>>>> #include<limits.h> > >>>>> #include<paths.h> > >>>>>@@ -51,6 +52,7 @@ __FBSDID("$FreeBSD$"); > >>>>> > >>>>> #include "../stdlib/atexit.h" > >>>>> #include "tzfile.h" /* from=20 > >>>>> ../../../contrib/tzcode/stdtime */ > >>>>>+#include "libc_private.h" > >>>>> > >>>>> #define _PATH_ZONEINFO TZDIR /* from tzfile.h */ > >>>>> > >>>>>@@ -585,6 +587,8 @@ yesno: > >>>>> > >>>>> case _SC_NPROCESSORS_CONF: > >>>>> case _SC_NPROCESSORS_ONLN: > >>>>>+ if (_elf_aux_info(AT_NCPUS,&value, sizeof(value)) =3D=3D 0) > >>>>>+ return ((long)value); > >>>>> mib[0] =3D CTL_HW; > >>>>> mib[1] =3D HW_NCPU; > >>>>> break; > >>>>> > >>>>Will this make controlling the number of CPU online or CPU hotplug > >>>>be impossible on FreeBSD ? > >>>If I think about hotplug CPUs I can think of other 1000 > >>>problems/races/bad situations to be fixed before this one, really. > >>These are problems only in kernel, but kib's change is about ABI > >>between userland and kernel, I hope we don't introduce an ABI which > >>is not extendable road stone. > >I'm not entirely sure I see the ABI breakage here. > It is not breakage, it is the ABI thinks number of online cpu is fixed, > obviously, it is not the case in future unless FreeBSD won't support > dynamic number of online cpus. >=20 >=20 > >If the AT_NCPUS > >becames unconvenient and not correct at some point we can just fix > >sysconf() to not look into the aux vector anymoe. > If you already know this will be a problem, why do you introduce it > and later need to fix it ? >=20 > > Please note that > >AT_NCPUS is already exported nowadays. I think this is instead a > >clever optimization to avoid the sysctl() (usual way to retrieve the > >number of CPUs). > But why don't you cache it in libc ? following code is enough: >=20 > static int online_cpu; > if (online_cpu =3D=3D 0) > online_cpu =3D sysctl > return online_cpu; >=20 Thread did evolved somewhat while I was AFK. First, please note that the ABI which I designed there is fixable: if kernel does not export AT_NCPUS at all, then auxv correctly handles the situation returning an error, and libc falls back to sysctl(2). Second, sysconf(3) is very weird API. Note the following statement from SUSv4: "The value shall not change during the lifetime of the calling process, [XSI] [Option Start] except that sysconf(_SC_OPEN_MAX) may return different values before and after a call to setrlimit() which changes the RLIMIT_NOFILE soft limit." Corresponding comment is also present in sysconf.c. So I do not see an issue there, esp. for advisory value which NCPUS is anyway. --YD+BIkcXU0IoTTos Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (FreeBSD) iEYEARECAAYFAk/sDV0ACgkQC3+MBN1Mb4jAxwCeOOJVbcfvLsTXSgOupccMhLDZ OmgAnie0Etxxw62u1QPnCI0lCNYFOKez =jhGE -----END PGP SIGNATURE----- --YD+BIkcXU0IoTTos--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120628075301.GS2337>