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