Proper (no) accounting for the disabled HTT cores
Suleiman Souhlal
ssouhlal at FreeBSD.org
Fri Sep 1 23:21:43 PDT 2006
Maxim Sobolev wrote:
> 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)++;
You probably also want this for amd64.
Also, wouldn't it be better to completely disable the LAPIC timer on the
hyperthreaded cpus?
-- Suleiman
More information about the freebsd-hackers
mailing list