Is there a way to disable "Hyper-Threading Technology" in modern FreeBSD
systems?
At the time of FreeBSD-SA-05:09.htt, it was suggested to use the following
workaround:
setting the "machdep.hlt_logical_cpus" tunable:
# echo "machdep.hlt_logical_cpus=1" >> /boot/loader.conf
Use of this workaround is not recommended on "dual-core" systems, as this
workaround will also disable one of the processor cores.
But this OID no longer seems to exist and I do not want to disable other
processor cores.
My use case is a VirtualBox dedicated server where I believe using HTT might
be problematic because:
1/ running two busy virtual machines on the same physical core could
severely impact their performance
2/ the virtualizer might expose the real CPU to the virtual machines, which
might in turn attempt to use HTT for themselves
Best regards,
Hubert
For example on a bi-Xeon X5650 FreeBSD 8.0p2 system, the relevant sysctl
OIDs are:
kern.ccpu: 0
<cpu count="24" mask="0xffffff">0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23</cpu>
<cpu count="12" mask="0xfff">0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11</cpu>
<cpu count="2" mask="0x3">0, 1</cpu>
<cpu count="2" mask="0xc">2, 3</cpu>
<cpu count="2" mask="0x30">4, 5</cpu>
<cpu count="2" mask="0xc0">6, 7</cpu>
<cpu count="2" mask="0x300">8, 9</cpu>
<cpu count="2" mask="0xc00">10, 11</cpu>
<cpu count="12" mask="0xfff000">12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23</cpu>
<cpu count="2" mask="0x3000">12, 13</cpu>
<cpu count="2" mask="0xc000">14, 15</cpu>
<cpu count="2" mask="0x30000">16, 17</cpu>
<cpu count="2" mask="0xc0000">18, 19</cpu>
<cpu count="2" mask="0x300000">20, 21</cpu>
<cpu count="2" mask="0xc00000">22, 23</cpu>
kern.smp.cpus: 24
debug.kdb.stop_cpus: 1
hw.ncpu: 24
machdep.hlt_cpus: 0
Perhaps by playing with the mask?
--
View this message in context: http://old.nabble.com/Disabling-HyperThreading--tp28357071p28357071.html
Sent from the freebsd-smp mailing list archive at Nabble.com.
_______________________________________________
freeb...@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-smp
To unsubscribe, send any mail to "freebsd-smp...@freebsd.org"
--
Posted automagically by a mail2news gateway at muc.de e.V.
Please direct questions, flames, donations, etc. to news-...@muc.de
membrana wrote:
>
> Hubert Tournier wrote:
>> Is there a way to disable "Hyper-Threading Technology" in modern FreeBSD
>> systems?
> check your bios settings for hyper-threading technology or similar to
> disable it
>
I forgot to specify that the system is a remote dedicated server, for which
i have no physical access.
I could rent a virtual KVM in order to try to access its BIOS settings, but
i'm not sure this would work.
Any other software solution?
> you may check cpuset(1) to assign one virtual machine per cpu, although
> i didn't test this.
>
Thank you. I didn't knew that one!
Best regards,
Hubert
--
View this message in context: http://old.nabble.com/Disabling-HyperThreading--tp28357071p28359495.html
Sent from the freebsd-smp mailing list archive at Nabble.com.
_______________________________________________
machdep.hlt_cpus
is suppose to tell the scheduler that there is extra cores but not to use them.
try to enable and see with top is there app that use logical cores.
You can manually disable any CPU (except for the boot CPU), via
'hint.lapic.X.disabled=1' in loader.conf. You can find the APIC IDs to use in
place of 'X' in dmesg.
--
John Baldwin
Jack L.-3 wrote:
>
> sysctl machdep.hyperthreading_allowed=0 will disable it.
>
Thank you for this lead.
It gives the following result on my system:
sysctl: unknown oid 'machdep.hyperthreading_allowed'
Searching a little bit, i found 2 references to this OID in the kernel
source code:
/usr/src/sys/amd64/amd64/mp_machdep.c
/usr/src/sys/i386/i386/mp_machdep.c
Maybe it's missing because (as i read in these files):
SCHED_ULE doesn't allow enabling/disabling HT cores at run-time.
I'm not sure i could use the OID in /boot/loader.conf however?
I also see in the source code that the default is to enable HT cores:
static int hyperthreading_allowed = 1;
So i will test a custom kernel with this disabled.
For reference, here is the CPU i use:
CPU: Intel(R) Xeon(R) CPU X5650 @ 2.67GHz (2666.65-MHz K8-class
CPU)
Origin = "GenuineIntel" Id = 0x206c2 Stepping = 2
Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
Features2=0x9ee3fd<SSE3,DTES64,MON,DS_CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,<b17>,DCA,SSE4.1,SSE4.2,POPCNT>
AMD Features=0x2c100800<SYSCALL,NX,Page1GB,RDTSCP,LM>
AMD Features2=0x1<LAHF>
TSC: P-state invariant
FreeBSD/SMP: Multiprocessor System Detected: 24 CPUs
FreeBSD/SMP: 2 package(s) x 6 core(s) x 2 SMT threads
Best regards,
Hubert
--
View this message in context: http://old.nabble.com/Disabling-HyperThreading--tp28357071p28467645.html
Sent from the freebsd-smp mailing list archive at Nabble.com.
_______________________________________________
Hubert Tournier wrote:
>
> I also see in the source code that the default is to enable HT cores:
> static int hyperthreading_allowed = 1;
>
> So i will test a custom kernel with this disabled.
>
Well, it's not enough, i still have my 24 CPUs.
I'll give a try to John's way of disabling CPUs, hoping to avoid disabling
the wrong ones.
Best regards,
Hubert
--
View this message in context: http://old.nabble.com/Disabling-HyperThreading--tp28357071p28479447.html
Hubert Tournier wrote:
>
> I'll give a try to John's way of disabling CPUs, hoping to avoid disabling
> the wrong ones.
>
With the kern.sched.topology_spec OID, i had the confirmation that the
hyperthreading "other halves" of the CPU were the even ones:
#sysctl kern.sched.topology_spec
kern.sched.topology_spec: <groups>
<group level="1" cache-level="0">
<cpu count="24" mask="0xffffff">0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23</cpu>
<flags></flags>
<children>
<group level="3" cache-level="2">
<cpu count="12" mask="0xfff">0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11</cpu>
<flags></flags>
<children>
<group level="5" cache-level="1">
<cpu count="2" mask="0x3">0, 1</cpu>
<flags><flag name="THREAD">SMT group</flag>
</flags>
</group>
<group level="5" cache-level="1">
<cpu count="2" mask="0xc">2, 3</cpu>
<flags><flag name="THREAD">SMT group</flag>
Hubert Tournier wrote:
>
> My use case is a VirtualBox dedicated server where I believe using HTT
> might be problematic because:
> 1/ running two busy virtual machines on the same physical core could
> severely impact their performance
> 2/ the virtualizer might expose the real CPU to the virtual machines,
> which might in turn attempt to use HTT for themselves
>
2/ The real CPU (or at least its HTT feature) is exposed to the virtual
machines, but they don't attempt to use HyperThreading (or at least the
FreeBSD guest that I use).
Looking at the differences between my FreeBSD host and guest, i noticed that
there were 2 additional OID in the guest:
machdep.hlt_logical_cpus: 0
machdep.logical_cpus_mask: 254
The vCPU given to the guest appears as cores: "FreeBSD/SMP: 1 package(s) x 8
core(s)".
1/ The risk is confirmed by the now-oracle engineers.
I think i will leave the hyperthreading enabled and just be careful not to
use more vCPU than the number of cores.
Thanks to all of you for your help and time.
Best regards,
Hubert
--
View this message in context: http://old.nabble.com/Disabling-HyperThreading--tp28357071p28505250.html