introduction
C'est une question intéressante. Probablement l'un des plus intéressants depuis des mois pour moi personnellement. Comme l'OP, il n'y a pas d'option pour désactiver Hyper Threading dans mon ancien BIOS (inventé en 2012, mis à jour en 2016 environ).
Bugs hyper-threading dans Intel Skylake et Kaby Lake:
Toute personne utilisant des processeurs Intel Skylake ou Kaby Lake doit lire les rapports de bogues concernant Hyper Threading qui ont fait surface il y a quelques mois. Cette histoire du UK Register explique comment les développeurs Debian ont repéré comment Hyper Threading peut planter et corrompre la machine.
Il y a de nombreux problèmes avec Skylake signalés dans Ask Ubuntu au cours de la dernière année et on se demande comment discerner quels problèmes peuvent avoir été causés par des bogues Hyper Threading.
Cette réponse est divisée en trois parties:
- Affichage des processeurs lorsque Hyper-Threading est activé / désactivé
- Script Bash pour automatiser l'activation / la désactivation de l'hyper-threading
- Conky se bloque si Hyper Threading est désactivé avant de démarrer
Affichage des processeurs lorsque Hyper-Threading est activé / désactivé
Ci-dessous, vous pouvez voir l'utilisation du processeur lorsque l'hyper-threading est désactivé et qu'un test de stress du processeur est effectué. Environ 10 secondes plus tard, le même script est répété avec l'hyper threading activé. Enfin, 10 secondes après, le script est exécuté avec l'hyper-threading désactivé à nouveau:
L'affichage est divisé en deux sections:
- Sur la moitié gauche la fenêtre du terminal invoquant le script
set-hyper-threading
avec le paramètre 0 (off) puis 1 (on).
- Sur la moitié droite
conky
s'affiche le pourcentage d'utilisation du processeur de CPUS 1 à 8.
Premier script exécutant Hyper Threading off
La première fois que le script est exécuté, les CPU 2, 4, 6 et 8 (selon Conky) sont figés à 3%, 2%, 2% et 2%. Les nombres CPU 1, 3, 5 et 7 atteignent 100% pendant le test de stress.
La topologie du processeur s'affiche avec l'hyper-threading désactivé et seuls les quatre cœurs ont signalé:
/sys/devices/system/cpu/cpu0/topology/core_id:0
/sys/devices/system/cpu/cpu2/topology/core_id:1
/sys/devices/system/cpu/cpu4/topology/core_id:2
/sys/devices/system/cpu/cpu6/topology/core_id:3
Deuxième script exécutant Hyper Threading sur
La deuxième fois que le script est exécuté, Hyper-Threading est activé et tous les numéros de CPU 1-8 augmentent à 100% pendant l'exécution du test de stress.
La topologie du processeur est affichée avec l'hyper-threading activé et seuls les quatre cœurs plus et quatre cœurs virtuels ont été signalés:
/sys/devices/system/cpu/cpu0/topology/core_id:0
/sys/devices/system/cpu/cpu1/topology/core_id:0
/sys/devices/system/cpu/cpu2/topology/core_id:1
/sys/devices/system/cpu/cpu3/topology/core_id:1
/sys/devices/system/cpu/cpu4/topology/core_id:2
/sys/devices/system/cpu/cpu5/topology/core_id:2
/sys/devices/system/cpu/cpu6/topology/core_id:3
/sys/devices/system/cpu/cpu7/topology/core_id:3
Le troisième script exécute Hyper Threading off
Notez comment, après la fin du deuxième script, les CPU 2, 4, 6 et 8 tournent au ralenti à 4%, 2%, 3%, 4%. Ceci est important car dans le troisième test, la désactivation de Hyper-Threading montre les pourcentages CPU gelés à 4%, 2%, 3%, 4% plutôt que 3%, 2%, 2% et 2% du premier test.
Par conséquent, la désactivation de l'hyper-threading semble simplement geler les processeurs virtuels à l'état actuel.
Notez également que si vous activez ou désactivez Hyper-Threading, le script affiche toujours "Hyper Threading pris en charge".
Script Bash pour automatiser l'activation / la désactivation de l'hyper-threading
Lors de la visualisation du script ci-dessous, gardez à l'esprit que Conky numérote les CPU de 1 à 8 mais Linux numérote les CPU de 0 à 7.
#!/bin/bash
# NAME: set-hyper-threading
# PATH: /usr/local/bin
# DESC: Turn Hyper threading off or on.
# DATE: Aug. 5, 2017.
# NOTE: Written Part of testing for Ubuntu answer:
# /ubuntu/942728/disable-hyper-threading-in-ubuntu/942843#942843
# PARM: 1="0" turn off hyper threading, "1" turn it on.
if [[ $# -ne 1 ]]; then
echo 'One argument required. 0 to turn off hyper-threading or'
echo '1 to turn hyper-threading back on'
exit 1
fi
echo $1 > /sys/devices/system/cpu/cpu1/online
echo $1 > /sys/devices/system/cpu/cpu3/online
echo $1 > /sys/devices/system/cpu/cpu5/online
echo $1 > /sys/devices/system/cpu/cpu7/online
grep "" /sys/devices/system/cpu/cpu*/topology/core_id
grep -q '^flags.*[[:space:]]ht[[:space:]]' /proc/cpuinfo && \
echo "Hyper-threading is supported"
grep -E 'model|stepping' /proc/cpuinfo | sort -u
stress --cpu 8 --io 1 --vm 1 --vm-bytes 128M --timeout 10s
REMARQUE: Le programme stress
est intégré à tous les systèmes Debian dont Ubuntu est un dérivé. Par conséquent, vous n'avez pas besoin de télécharger et d'installer de packages pour exécuter ce script dans Ubuntu.
Si vous avez un processeur double cœur, vous devez supprimer (ou commenter #
) les lignes contrôlant les numéros de processeur 5 et 7.
Nous remercions Hi-Angel pour la ligne bash grep "" /sys/devices/system/cpu/cpu*/topology/core_id
affichant la topologie CPU.
Conky se bloque si Hyper Threading est désactivé avant de démarrer
Pour obtenir les CPU 2, 4, 6, 8 au plus bas pourcentage d'utilisation possible, j'ai essayé de désactiver Hyper-Threading pendant le démarrage. J'ai utilisé ce script pour cela:
# NAME: /etc/cron.d/turn-off-hyper-threading
# DATE: Auguust 5, 1017
# DESC: This turns off CPU 1, 3, 5 & 7
# NOTE: Part of testing for Ubuntu answer:
# /ubuntu/942728/disable-hyper-threading-in-ubuntu/942843#942843
# BUGS: Conky crashes with Segmentation Fault when CPU 2,4,6 & 8 (as conky calls them)
# are off-line.
#
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#
# @reboot root echo 0 > /sys/devices/system/cpu/cpu1/online
# @reboot root echo 0 > /sys/devices/system/cpu/cpu3/online
# @reboot root echo 0 > /sys/devices/system/cpu/cpu5/online
# @reboot root echo 0 > /sys/devices/system/cpu/cpu7/online
Cependant se conky
bloque avec une erreur de segmentation si l'hyper-threading est désactivé au démarrage. En tant que tel, j'ai dû commenter les quatre @reboot
lignes du script.
Code Conky pour afficher le pourcentage d'utilisation du processeur et le facteur de charge
Si vous souhaitez configurer un affichage similaire dans Conky, voici l'extrait de code correspondant:
${color orange}${voffset 2}${hr 1}
${color2}${voffset 5}Intel® i-7 3630QM 3.4 GHz: ${color1}@ ${color green}${freq} MHz
${color}${goto 13}CPU 1 ${goto 81}${color green}${cpu cpu1}% ${goto 131}${color3}${cpubar cpu1 18}
${color}${goto 13}CPU 2 ${goto 81}${color green}${cpu cpu2}% ${goto 131}${color3}${cpubar cpu2 18}
${color}${goto 13}CPU 3 ${goto 81}${color green}${cpu cpu3}% ${goto 131}${color3}${cpubar cpu3 18}
${color}${goto 13}CPU 4 ${goto 81}${color green}${cpu cpu4}% ${goto 131}${color3}${cpubar cpu4 18}
${color}${goto 13}CPU 5 ${goto 81}${color green}${cpu cpu5}% ${goto 131}${color3}${cpubar cpu5 18}
${color}${goto 13}CPU 6 ${goto 81}${color green}${cpu cpu6}% ${goto 131}${color3}${cpubar cpu6 18}
${color}${goto 13}CPU 7 ${goto 81}${color green}${cpu cpu7}% ${goto 131}${color3}${cpubar cpu7 18}
${color}${goto 13}CPU 8 ${goto 81}${color green}${cpu cpu8}% ${goto 131}${color3}${cpubar cpu8 18}
${color1}All CPU ${color green}${cpu}% ${goto 131}${color1}Temp: ${color green}${hwmon 2 temp 1}°C ${goto 250}${color1}Up: ${color green}$uptime
${color green}$running_processes ${color1}running of ${color green}$processes ${color1}loaded processes.
Load Avg. 1-5-15 minutes: ${alignr}${color green}${execpi .001 (awk '{printf "%s/", $1}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4} ${execpi .001 (awk '{printf "%s/", $2}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4} ${execpi .001 (awk '{printf "%s/", $3}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4}
${color1}NVIDIA ${color}-GPU ${color green}${nvidia gpufreq} Mhz ${color}-Memory ${color green}${nvidia memfreq} Mhz
${color1}GT650M ${color}-Temp ${color green}${nvidia temp}°C ${color}-Threshold ${color green}${nvidia threshold}°C
${color orange}${voffset 2}${hr 1}
REMARQUE: Le code Nvidia ci-dessus n'a jamais été testé car je n'ai pas encore le GPU Nvidia sous Ubuntu. Toute année bientôt maintenant :)