Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Aug 2005 09:00:25 -0600
From:      Scott Long <scottl@samsco.org>
To:        Ville-Pertti Keinonen <will+freebsd-current@will.iki.fi>
Cc:        freebsd-current@freebsd.org, Jeremie Le Hen <jeremie@le-hen.org>, josh.carroll@psualum.com
Subject:   Re: On a hyperthreaded system,	top and gnome system monitor only report one processor
Message-ID:  <430DDD09.5000403@samsco.org>
In-Reply-To: <430DDAB2.1030101@will.iki.fi>
References:  <430D68D4.50609@drexel.edu>	<430D6C0F.1070909@freebsd.org>	<8cb6106e0508250035f066aa1@mail.gmail.com>	<20050825134942.GO659@obiwan.tataz.chchile.org> <430DDAB2.1030101@will.iki.fi>

index | next in thread | previous in thread | raw e-mail

Ville-Pertti Keinonen wrote:
> Jeremie Le Hen wrote:
> 
>> It is commonly accepted that HyperThreading decreases performances
>> on FreeBSD systems.  Both 4BSD and ULE consider dual-core processors
>> as two separates processors.  This is a problem because dual-core
>> processors use the same L2 cache for their logical processors (IIRC)
>> and therefore we cannot schedule whatever threads on them without
>> taking care of not invalidating the cache too much.
> 
> 
> You seem to be confusing dual-core and HyperThreading.
> 
> Dual-core (and multi-core in general) is "real" SMP; it may or may not 
> share various levels of caches (but then again, historically so can SMP 
> on machines with multiple separately packaged processors), but there are 
> definitely multiple independent CPUs.
> 
> HyperThreading (and various non-Intel forms of SMT) doesn't just share 
> caches, but there's basically just one CPU with multiple sets of 
> registers.  Instructions from several threads can be "in flight" 
> simultaneously in the (single) execution core, in order to make better 
> use of the resources available...sometimes, for certain types of code.

Hyperthreading can often be a good thing when you are dealing with code
that is itself multithreaded and has lots of pipeline stalls.  C++ and
Java apps (being that most JVM's are written in C++ and use the native
threading of the OS) are a good example of this.  While one thread
stalls waiting for a lots of memory fetches to figure out a virtual
method dispatch, another thread can come in and do useful work.
Unfortunately, the Unix kernel does match this profile very well, nor
does a lot of traditional Unix apps that are written as discrete
process-oriented C state machines instead of monolithic threaded C++.
In Windows where all the world is MFC and .NET and whatnot, it has some
measurable gains.  Having a scheduler that aggressively optimizes for
this case is also a good thing, and indeed neither FreeBSD scheduler
does this very well, though the ULE scheduler has some foundation pieces
to possibly do it in the future.

Scott


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?430DDD09.5000403>