J'utilise le serveur Ubuntu 16.04. Je peux voir que le filetage hype est activé lorsque j'utilise la commande lscpu.
Je veux le désactiver. J'ai parcouru les forums ubuntu et ici et ici .
Ce sont de bonnes discussions pour lesquelles l'hyper threading peut ne pas être bon. Mais aucune solution définitive sur la façon de l'éteindre.
Quelqu'un peut-il donner les étapes pour désactiver l'hyperthreading? Merci .
Réponses:
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:
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é
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:
set-hyper-threading
avec le paramètre 0 (off) puis 1 (on).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é:
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:
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.
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:
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:
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 :)
la source
noht
n'existe pas. J'ai même recherché l'option via des sources linux-4.13-rc1 que je possède parfois. Cependant, je comprends certainement ce qui aurait pu vous embrouiller: dat bugreport se plaint que l'option ne fonctionne pas, puis elle est fermée commenextrelease
, comme s'ils corrigeaient quelque chose. Cependant, si vous lisez les commentaires, vous verrez que la seule utilisation denoht
est pour un script fabriqué à la main qui vérifie la ligne de commande du noyau pour l'option, puis désactive les cœurs via le/sys/
système de fichiers. IOWnoht
est inutile.noht
.Les noyaux récents prennent en charge le paramètre de noyau maxcpus .
Cela vous permet de définir le nombre de cpus sur le nombre de cœurs physiques. Cela peut être utile pour atténuer les menaces causées par les vulnérabilités MDS sur les processeurs Intel de la famille 6.
Comment:
avec les privilèges sudo (root) ouvrez / etc / default / grub avec votre éditeur de texte préféré.
Trouvez la ligne qui commence par GRUB_CMDLINE_LINUX_DEFAULT =
et ajoutez maxcpus = n à tous les paramètres de noyau existants tels que les paramètres communs de splash silencieux (où n = le nombre de cœurs physiques de votre processeur).
Par exemple, sur mon fidèle processeur Intel (R) Core (TM) i3-3220 à 3,30 GHz double cœur avec hyperthreading, j'ai ajouté maxcpus = 2 pour désactiver l'hyperthreading au démarrage.
Enregistrez le fichier, puis exécutez la commande
sudo update-grub
et redémarrez.Vous pouvez confirmer le succès en exécutant la commande
lscpu | grep "per core"
qui devrait fournir une sortie comme celle-ci:Thread(s) per core: 1
Testé sur le noyau 4.4.0
Sources:
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/kernel-parameters.txt
https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html
/unix/145645/disabling-cpu-cores-on-quad-core-processor-on-linux
la source
Vous pouvez désactiver l'hyperthreading sous Linux en tant que root ou avec des privilèges de superutilisateur avec:
Vous pouvez afficher l' état d'hyperthreading actuel avec:
Cette commande imprime l'un des éléments suivants:
Alternativement, la plupart des firmwares du BIOS incluent également une option pour désactiver l'hyperthreading. S'il est désactivé dans le BIOS, le chat ci-dessus revient probablement
forceoff
.la source
maxcpus=
paramètre du noyau pour désactiver l'hyperthreading. Principalement parce que je ne trouve aucune documentation officielle sur son interaction avec les cœurs hyperthreading. Est-il garanti de toujours désactiver l'hyperthreading si vous le spécifiezmaxcpus=#real_cores
? Ou pourriez-vous vous retrouver avec la moitié des cœurs réels avec HT toujours activé sur certains systèmes? De plus, unmaxcpus=
paramètre n'est pas portable entre des machines avec différents nombres de cœurs. Le maintien des variations de ce paramètre pour différentes machines serait fastidieux et sujet aux erreurs.lscpu | grep "per core"
Vous faites un point de vaild concernant la portabilité cependant, d'un autre côté, définir le paramètre du noyau une fois ne semble pas une tâche trop onéreuse tome.Voici un script pour identifier les cœurs ht et les basculer en ligne / hors ligne.
@ WinEunuuchs2Unix , vous pouvez peut-être ajouter ceci à votre excellente réponse.
la source
for i in $(find /sys/devices/system/cpu/cpu[0-9]* -maxdepth 0 -type d |sort -V); do
Le
maxcpus=n
paramètre dansGRUB_CMDLINE_LINUX_DEFAULT=
ne fonctionne pas correctement. Il m'a laissé 2 cœurs et 4 fils au lieu de 4 cœurs 4 fils.J'ai trouvé une solution.
Ajouter
mitigations=auto,nosmt
à laGRUB_CMDLINE_LINUX_DEFAULT=
placeTesté sur Ubuntu 16.04 LTS avec Linux 4.4.0.
Source: https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/MDS
la source
Une façon un peu plus robuste de rechercher dans le noyau des paires d'hyperthread est nécessaire pour les systèmes où la carte mère héberge plusieurs sockets CPU car core_id est dupliqué. Voici ma version sur un système avec deux puces Xeon à 8 cœurs (exemple d'Ubuntu 16.04):
À diverses fins, vous pouvez également consulter les fichiers
la source
Si vous avez lu les discussions, vous savez probablement qu'il est généralement déraisonnable de désactiver, donc je suppose que vous le souhaitez à des fins d'apprentissage.
L'idée de HT est d'avoir plusieurs ensembles de registres CPU pour chaque cœur physique (les soi-disant cœurs virtuels) . Il n'y a pas de "meilleur" noyau virtuel, ils sont identiques. Armé de cette connaissance, vous pouvez désactiver les cœurs virtuels, sauf un pour chaque physique.
Vous voulez d'abord savoir quelle paire de cœurs virtuels appartient à quel cœur physique du
/sys/
système de fichiers. Vous pouvez utiliser lecore_id
fichier pour cela:À partir de la sortie, vous pouvez déduire que cpu0 + cpu2 sont contenus dans un noyau physique et cpu1 + cpu3 dans l'autre. Maintenant, élevez les privilèges et utilisez la
echo
commande pour désactiver un dans chaque paire:Notez que cpu0 n'a pas de fichier "en ligne" et ne peut pas être désactivé, j'ai donc désactivé cpu2 à la place.
la source
La réponse de @ visit1985 ne fonctionne pas si le séparateur dans thread_siblings_list n'est pas une virgule (ce qui est, par exemple, le cas sur mon système AMD Ryzen).
Voici un script pour désactiver l'hyper-threading qui fonctionne avec n'importe quel séparateur:
Et en voici un pour activer l'hyper-threading:
la source