On Wed, Oct 27, 2010 at 9:22 AM, Andriy Gapon <a...@freebsd.org> wrote: > > [patch attachment was lost]
Ugh... Mailman hates me I guess :(... > on 27/10/2010 19:07 Garrett Cooper said the following: >> How about this patch? I implemented this as a readonly tunable and > > I don't think that it's correct to call it a tunable or use CTLFLAG_RDTUN. > As I understand it is a read-only sysctl. Converted to CTLFLAG_RD. >> sysconf tunable, because (AFAIK) the value that is being tested >> shouldn't change during runtime after the system has been booted up, >> and figuring that the value wasn't going to change it was better to >> lose 4/8 bytes on the kernel stack instead of having to recompute the >> value every time in a function call, with the associated lost heap / >> stack memory in the process, as the assumption is that this libcall >> was going to be called frequently by some programs. Thanks! -Garrett
Index: include/unistd.h =================================================================== --- include/unistd.h (revision 214413) +++ include/unistd.h (working copy) @@ -288,6 +288,7 @@ #if __BSD_VISIBLE #define _SC_NPROCESSORS_CONF 57 #define _SC_NPROCESSORS_ONLN 58 +#define _SC_CPUSET_SIZE 122 #endif /* Extensions found in Solaris and Linux. */ Index: lib/libc/gen/sysconf.c =================================================================== --- lib/libc/gen/sysconf.c (revision 214413) +++ lib/libc/gen/sysconf.c (working copy) @@ -597,6 +597,15 @@ return (lvalue); #endif +#ifdef _SC_CPUSET_SIZE + case _SC_CPUSET_SIZE: + len = sizeof(lvalue); + if (sysctlbyname("kern.sched.cpusetsize", &lvalue, &len, NULL, + 0) == -1) + return (-1); + return (lvalue); +#endif + default: errno = EINVAL; return (-1); Index: sys/kern/sched_ule.c =================================================================== --- sys/kern/sched_ule.c (revision 214413) +++ sys/kern/sched_ule.c (working copy) @@ -2712,6 +2712,8 @@ sbuf_delete(topo); return (err); } + +static size_t _kern_cpuset_size = sizeof(cpuset_t); #endif SYSCTL_NODE(_kern, OID_AUTO, sched, CTLFLAG_RW, 0, "Scheduler"); @@ -2748,6 +2750,15 @@ SYSCTL_PROC(_kern_sched, OID_AUTO, topology_spec, CTLTYPE_STRING | CTLFLAG_RD, NULL, 0, sysctl_kern_sched_topology_spec, "A", "XML dump of detected CPU topology"); + +/* + * Return the size of cpuset_t at the kernel level + * + * XXX (gcooper): replace ULONG with SIZE once CTLTYPE_SIZE is implemented. + */ +SYSCTL_ULONG(_kern_sched, OID_AUTO, cpusetsize, CTLFLAG_RD, + &_kern_cpuset_size, 0, "Kernel-level cpuset_t struct size"); + #endif /* ps compat. All cpu percentages from ULE are weighted. */
_______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"