Proper (no) accounting for the disabled HTT cores
Maxim Sobolev
sobomax at sippysoft.com
Fri Sep 1 19:29:32 PDT 2006
Hi,
Currently, FreeBSD by default disables hyper-threading "cores", by not
scheduling any threads to it. However, it still counts those cores as
"active but permanently idle" when calculating system-wide CPUs
statistics. It is incorrect, since it skews statistics quite a bit and
creates real problems for certain types of applications (monitoring
applications for example), by making them believe that the system does
have enough idle resources, while in fact it does not.
I think the proper way to handle disabled cores is to not account for
them in any way. Please find the patch attached, which fixes the
problem. Any comments or suggestions are welcome.
-Maxim
Index: local_apic.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/i386/local_apic.c,v
retrieving revision 1.28
diff -d -u -r1.28 local_apic.c
--- local_apic.c 12 Jul 2006 21:22:43 -0000 1.28
+++ local_apic.c 2 Sep 2006 00:42:32 -0000
@@ -615,6 +615,16 @@
/* Send EOI first thing. */
lapic_eoi();
+ /*
+ * Don't do any accounting for the disabled HTT cores, since it
+ * will provide misleading numbers for the userland.
+ *
+ * No locking is necessary here, since even if we loose the race
+ * when hlt_cpus_mask changes it is not a big deal, really.
+ */
+ if ((hlt_cpus_mask & (1 << PCPU_GET(cpuid))) != 0)
+ return;
+
/* Look up our local APIC structure for the tick counters. */
la = &lapics[PCPU_GET(apic_id)];
(*la->la_timer_count)++;
More information about the freebsd-hackers
mailing list