On Wed, Oct 27, 2010 at 9:22 AM, Andriy Gapon <[email protected]> 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. */
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"