Quelque fois il faut désactiver le mode Intel Hyper-Threading (HT) dans votre système. Linux supporte que l'unité centrale soit connectée ou déconnectée à chaude. Tu ne dois pas redémarrer ton système, aller au BIOS/UEFI et désactiver HT à la main. Tu peux désactiver les coeurs temporairement sous Linux pendant le fonctionnement du système.
Regarde la liste des unités centrales. Tu peux voir quelque détails concernant la rélation entre unité centrale et coeur. Regarde les colonnes CPU et CORE.
lscpu --extended
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ
0 0 0 0 0:0:0:0 yes 3200,0000 800,0000
1 0 0 0 0:0:0:0 yes 3200,0000 800,0000
2 0 0 1 1:1:1:0 yes 3200,0000 800,0000
3 0 0 1 1:1:1:0 yes 3200,0000 800,0000
Désactiver une UC seulement. Tu dois être root.
echo 0 > /sys/devices/system/cpu/cpu2/online
Ce petit script met en hors de fonction tous les UC HT. Tu dois être root.
for i in $(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | awk -F "[,-]" '{ print $2; }' | tr ',' '\n' | sort -un)
do
echo 0 > /sys/devices/system/cpu/cpu$i/online
done
Découvrons les changements.
dmesg | grep CPU
...
[439975.285834] IRQ 26: no longer affine to CPU1
[439975.287095] smpboot: CPU 1 is now offline
[439975.301424] IRQ 30: no longer affine to CPU3
[439975.301437] IRQ 32: no longer affine to CPU3
[439975.302453] smpboot: CPU 3 is now offline
lscpu --extended
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ
0 0 0 0 0:0:0:0 yes 3200,0000 800,0000
1 - - - ::: no 3200,0000 800,0000
2 0 0 1 1:1:1:0 yes 3200,0000 800,0000
3 - - - ::: no 3200,0000 800,0000
La commande suivante met tous les UC en marche. Tu dois être root.
for i in $(find /sys/devices/system/cpu/cpu* -name online); do echo 1 > $i; done