Proper (no) accounting for the disabled HTT cores

From: Maxim Sobolev <sobomax_at_sippysoft.com>
Date: Fri, 01 Sep 2006 19:29:19 -0700
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
_at__at_ -615,6 +615,16 _at__at_
  	/* 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)++;
Received on Sat Sep 02 2006 - 00:29:32 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:59 UTC