SMP detection

Michal Mertl mime at traveller.cz
Thu Aug 31 00:06:52 UTC 2006


Skylar Thompson wrote:
> Jordi Carrillo wrote:
> > 2006/8/30, backyard <backyard1454-bsd at yahoo.com>:
> >>
> >>
> >>
> >> --- Jordi Carrillo <jordilin at gmail.com> wrote:
> >>
> >> > I've read that SMP should be disabled for
> >> > performance issues (I did not know
> >> > that before installing freebsd). I have a P4 3GHz
> >> > with hyperthreading
> >> > technology. I have the SMP-GENERIC kernel and it
> >> > only launches one cpu. So,
> >> > I've decided to disable SMP from BIOS. Is that ok?,
> >> > knowing that I have a
> >> > Smp enabled kernel? or should I install one without
> >> > smp? If so, is there a
> >> > way to install one already precompiled?
> >> > Thanks in advance
> >> >
> >> > --
> >> > http://jordilin.wordpress.com
> >> > _______________________________________________
> >> > freebsd-questions at freebsd.org mailing list
> >> >
> >> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> >> > To unsubscribe, send any mail to
> >> > "freebsd-questions-unsubscribe at freebsd.org"
> >> >
> >>
> >> if the system runs with one cpu now and you don't
> >> enable smp with HT with the sysctl variable then you
> >> should be ok. If your not doing SMP then recompiling
> >> the kernel for single processor mode will make things
> >> run a little quicker because the SMP code won't come
> >> into play.
> >>
> >> with HT disabling in FreeBSD is more for the security
> >> issues about a potential exploit whereby one process
> >> in one pipe can access the priveledged information of
> >> a process in another pipe because the two cores share
> >> one processor cache and thus one cache table. To my
> >> knowledge this hasn't been exploited yet.
> >>
> >> If you just install the generic kernel you it should
> >> be only the uniprocessor one. I would just do a:
> >>
> >> cd /usr/src && make buildworld && make
> >> KERNCONF=GENERIC buildkernel && make KERNCONF=GENERIC
> >> installkernel
> >>
> >> as opposed to a binary version assuming you haven't
> >> updated yet you won't have to install world but I
> >> believe it must have the build in the source tree to
> >> build a kernel. On your P4 though the difference
> >> between SMP and uniproc may not be worth the trouble
> >> because I don't think much of a gain would be made. on
> >> a P1 a much different story...
> >>
> >> if you aren't concerned with bad users or hackers
> >> hitting the box I would just enable HT with the sysctl
> >> variable. This will not make things run slower at all,
> >> just (in theory) less secure, which is why the
> >> veriable was created in the first place as I recall.
> >> If you are concerned I would wait until you update
> >> your system and then just build a GENERIC/CUSTOM
> >> kernel without the SMP option set.
> >>
> >>
> >> -brian
> >>
> >
> >
> > I will disable smp from bios. If I have a smp kernel, I suppose there
> > will
> > be no problem after all. Would that be ok?
> > The problem with having SMP enabled is that the smp kernel only
> > detects one
> > cpu and the system monitor only features one cpu as well as gkrellm (in
> > Linux it shows two cpus). When compiling the system monitor shows the
> > cpu at
> > a maximum of 50%, so what's going on with the other 50%?
> > writing machdep.hlt_logical_cpus to 2 in loader.conf does not solve
> > anything.

> I believe FreeBSD uses the other logical CPU to handle hardware
> interrupts, which can still help perormance. You can check dmesg to see
> how it's actually handling it.

No! Kernel threads (e.g. handling interrupts) aren't that much different
to normal processes.

Logical CPUs on a single HTT capable CPU share most of the CPU logic,
especially all the external stuff (handling interrupts). Scheduling
handling of interrupts on the "secondary/logical" core  wouldn't
probably help performance at all (if that is at all possible).

When FreeBSD sees logical CPUs it means HTT is either enabled in BIOS or
that disabling HTT in BIOS does not hide the CPUs to FreeBSD (bug in
BIOS/FreeBSD).

Until you enable scheduler to schedule tasks to HTT cores (with
machdep.hyperthreading_allowed=1 in loader.conf) (disabled by default
due to mentioned security/performance reasons) machine won't utilize the
logical HTT CPUs. Therefore total CPU utilization won't be more than
50%, because there are the (unused) logical CPUs which don't get
scheduled tasks.

As far as know - trying to use HTT normally hurts performance and only a
very special load on a machine can show increase in overall performance.

Newer Intel CPUs have better HTT (probably meaning less sharing of stuff
among the HTT cores - towards current trend - multi-core) and there
"they say" it performs quite good with real world load to handle the
logical cores as separate CPUs.

Of course (if you built purpose built appliance) you can squeeze more
from the HW when you exactly know what you need to do - you have some
task(s) which do the data analysis and kernel threads which do the
interrupt processing/data shifting) - than effectively using HTT might
be possible (I have never heard of anyone effectively using HTT).

Newest Intel CPUs don't bother with HTT - they are multicore - close to
"nothing is shared among (logical) CPUs". You would see each of these
CPUs as a CPU in FreeBSD and they will get scheduled tasks to finish.

Michal



More information about the freebsd-questions mailing list