IBM Cloud Docs
Désactivation d'Intel Hyper-Threading Technology

Désactivation d'Intel Hyper-Threading Technology

Si votre configuration d'infrastructure et votre configuration d'application l'exigent, vous pouvez désactiver Intel Hyper-Threading Technology (Intel HT Technology) sur votre machine virtuelle invitée.

Les instructions de cette rubrique pour désactiver Intel Hyper-Threading Technology sur les machines virtuelles invitées ne s'appliquent qu'aux serveurs virtuels qui sont mis à disposition sur des hôtes qui utilisent des processeurs Intel.

Comprendre les raisons de la désactivation d'Intel Hyper-Threading Technology

Intel Hyper-Threading Technology est un terme qui décrit le multithreading simultané (SMT). Hyper-Threading Technology divise chaque coeur physique en deux processeurs virtuels. Hyper-Threading Technology équivaut à fractionner une large route à une seule voie en deux voies relativement plus étroites. L'autoroute à deux voies assure un meilleur service que la route à une voie en cas de circulation lente et rapide. Hyper-Threading Technology offre de meilleures performances d'application lorsqu'il existe des E-S de fichier, des E-S de réseau et d'autres opérations plus lentes combinées à des opérations intensives de l'unité centrale. L'avantage en termes de performances de Hyper-Threading Technology se situe généralement entre 0 et 30 % par rapport à un mode single-thread. Certaines applications peuvent également connaître une baisse de performance.

Hyper-Threading Technology n'est pas toujours souhaitable. Dans ce cas, vous pouvez choisir de le désactiver et d'exécuter les coeurs en mode single-thread. Il existe trois raisons principales d'envisager la désactivation de Hyper-Threading Technology. La première raison est liée à la licence logicielle. De nombreux fournisseurs de logiciels anciens, tels que les fournisseurs d'outils d'automatisation de la conception électronique (EDA), exigent une licence pour chaque unité centrale, qu'ils utilisent Hyper-Threading Technology ou le mode single-thread. Lorsque le coeur est en mode Hyper-Threading Technology, vous avez besoin de deux fois plus de licences qu'en mode single-thread, même si l'application n'obtient pas des performances deux fois supérieures à celles du mode single-thread. Par conséquent, les spécialistes de l'EDA et d'autres secteurs désactivent Hyper-Threading Technology et préfèrent exécuter leurs logiciels en mode single-thread.

La deuxième raison de désactiver la technologie Hyper-Threading est d'éviter les problèmes d'équilibrage de charge et les surcharges du système d'exploitation qui en découlent. Les applications de calcul haute performance (HPC) créent généralement autant de tâches MPI (interface de transmission de messages) que le nombre de coeurs physiques et laissent le système d'exploitation gérer chaque tâche MPI sur un coeur physique distinct. Lorsque Hyper-Threading Technology est activé, le système d'exploitation reconnaît deux fois plus de processeurs. Alors que le système d'exploitation réussit généralement bien à affecter les tâches MPI à l'un des deux threads d'un coeur, il peut arriver qu'il place les deux tâches sur un coeur physique et laisse les autres coeurs libres. Le fait d'avoir les deux tâches sur un coeur physique avec d'autres coeurs libres entraîne une utilisation non optimale du système et des performances variables des applications. En outre, le noyau du système d'exploitation alloue des structures de données pour chacune des unités centrales actives et les met à jour en continu, afin qu'un plus grand espace de noyau soit alloué en mode Hyper-Threading Technology et de réduire les coûts de gestion. La réduction de la surcharge du système d'exploitation par la désactivation de Hyper-Threading Technology permet à de nombreuses applications HPC d'atteindre des performances optimales.

La troisième raison de désactiver Hyper-Threading Technology est la sécurité. Certains utilisateurs préfèrent désactiver la technologie Hyper-Threading pour éviter toute possibilité d'attaque de canal latéral associée à l'exécution de la technologie Hyper-Threading. IBM Cloud ne partage pas de noyau physique entre les machines virtuelles de deux clients de sorte que ce type d'attaque n'est pas possible.

Si vous déterminez que la désactivation de Hyper-Threading Technology convient à votre configuration, vous pouvez utiliser l'une des méthodes suivantes pour le désactiver sur vos machines virtuelles (VM) invitées dans IBM Cloud.

Vérification du statut de Hyper-Threading Technology et modification de celui-ci dans ma VM invitée : notions de base

Lorsqu'une machine virtuelle est en marche, vous pouvez vérifier le statut de Hyper-Threading Technology à l'aide de la commande lscpu sur les systèmes d'exploitation Linux. Une sortie similaire à la suivante est générée :

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) per core:  2
Core(s) per socket:  4
...

Dans cet exemple, remarquez que le nombre Thread(s) per core affiche 2, indiquant que Hyper-Threading Technology est activé. La machine virtuelle dispose de 4 coeurs physiques et de 8 unités centrales virtuelles. Les versions modernes du noyau Linux permettent aux utilisateurs de désactiver Hyper-Threading Technology pour chaque coeur. Vous pouvez exécuter certains coeurs avec Hyper-Threading Technology activé et d'autres coeurs avec Hyper-Threading Technology désactivé. Pour visualiser ce résultat pour chaque coeur, vous pouvez utiliser la commande lscpu --extended. Une sortie similaire à la suivante est générée :

CPU     NODE          SOCKET      CORE             L1d:L1i:L2:L3 ONLINE
0       0             0           0                0:0:0:0       yes
1       0             0           0                1:1:0:0       yes
2       0             0           1                2:2:1:0       yes
3       0             0           1                3:3:1:0       yes
4       0             0           2                4:4:2:0       yes
5       0             0           2                5:5:2:0       yes
6       0             0           3                6:6:3:0       yes
7       0             0           3                7:7:3:0       yes

La sortie de l'exemple précédent montre que chaque coeur dispose de 2 processeurs et que les deux processeurs sont en ligne. Le coeur 0 a des éléments apparentés : UC 0 et UC 1. Pour obtenir la liste des éléments apparentés, vous pouvez trouver les données dans la liste thread_sibling_list dans le système de fichiers des unités, comme illustré dans l'exemple suivant :

cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list
0-1
0-1
2-3
2-3
4-5
4-5
6-7
6-7

Certains noyaux et certaines architectures d'unités centrales utilisent une virgule ( , ) au lieu d'un trait d'union (-) dans la liste des unités d'exécution apparentées.

Vous pouvez désactiver la technologie Hyper-Threading pour un seul cœur en écrivant un zéro (0) dans le champ en ligne du système de fichiers de périphérique pour le processeur correspondant. Par exemple, pour désactiver Hyper-Threading Technology sur le coeur 2 (unité centrale 5 dans l'exemple précédent), exécutez la commande suivante :

echo 0 > /sys/devices/system/cpu/cpu5/online

Cette commande fait basculer l'unité centrale 5 hors ligne, désactivant ainsi Hyper-Threading Technology sur le coeur 2 mais maintenant les autres coeurs en mode Hyper-Threading Technology, comme le montre l'exemple suivant lorsque vous exécutez la commande lscpu --extended :

CPU     NODE          SOCKET      CORE             L1d:L1i:L2:L3 ONLINE
0       0             0           0                0:0:0:0       yes
1       0             0           0                1:1:0:0       yes
2       0             0           1                2:2:1:0       yes
3       0             0           1                3:3:1:0       yes
4       0             0           2                4:4:2:0       yes
5       -             -           -                :::           no
6       0             0           3                6:6:3:0       yes
7       0             0           3                7:7:3:0       yes

Vous pouvez répéter le processus précédent pour chaque coeur afin de désactiver Hyper-Threading Technology pour la VM. Lorsque la VM comporte de nombreux processeurs, cela peut être difficile. Le script suivant est un script bash très simple qui permet de désactiver Hyper-Threading Technology sur chaque coeur :

#!/bin/bash
     for vcpu in `cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | cut -s -d- -f2 | cut -d- -f2 | uniq`; do
          echo 0 > /sys/devices/system/cpu/cpu$vcpu/online
     done

Activation de Hyper-Threading Technology pour un coeur spécifique et une unité centrale associée

Si vous voulez réactiver Hyper-Threading Technology, vous pouvez le faire en écrivant un 1 dans la zone en ligne pour chacun des processeurs.

echo 1 > /sys/devices/system/cpu/cpu5/online

Activation de Hyper-Threading Technology pour tous les coeurs de la VM

Vous pouvez également utiliser le script bash simple suivant pour activer Hyper-Threading Technology pour la machine virtuelle.

#!/bin/bash
     for vcpu in `lscpu --extended | grep "no" | awk '{print $1}'`; do
          echo 1 > /sys/devices/system/cpu/cpu$vcpu/online
     done

Activation et désactivation de Hyper-Threading Technology dans ma VM invitée : Script

Vous pouvez également essayer ce script, créé par Wyatt Gorman, pour activer et désactiver la technologie Hyper-Threading. Lorsque vous téléchargez et exécutez le script, vous obtenez les options suivantes :

OPTIONS
-d | --disable             Disable Hyper-Threaded vCPUs
-e | --enable              Enable Hyper-Threaded vCPUs
-s | --show                Show Hyper-Threading status
-h | --help                Display this usage output

Vous pouvez obtenir le statut Hyper-Threading Technology, désactiver Hyper-Threading Technology et activer Hyper-Threading Technology pour tous les coeurs de la VM. Toutefois, si vous devez désactiver Hyper-Threading Technology sur un sous-ensemble de coeurs, suivez les étapes de la section de base.

Activation et désactivation de Hyper-Threading Technology dans ma VM invitée lors de l'initialisation : Données utilisateur

IBM Cloud fournit un moyen de spécifier des données facultatives lorsque vous créez une instance de serveur virtuel pour configurer des instances ou exécuter des scripts lorsque l'instance est mise à disposition ; il s'agit des données utilisateur.

Pendant le processus de création de l'instance de serveur virtuel, vous pouvez spécifier l'exemple de code suivant dans la section Données utilisateur de la console IBM Cloud :

#cloud-config
bootcmd:
 - for cpunum in $(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | cut -s -d- -f2- | tr ',' '\n' | sort -un); do echo 0 > /sys/devices/system/cpu/cpu$cpunum/online; done

Le script que vous fournissez dans la zone Données utilisateur désactive Hyper-Threading Technology lors du processus d'amorçage de l'instance. Les messages indiquent que les unités centrales sont désactivées :

dmesg |grep offline
[    9.488364] smpboot: CPU 1 is now offline
[    9.544370] smpboot: CPU 3 is now offline
[    9.572823] smpboot: CPU 5 is now offline
[    9.600633] smpboot: CPU 7 is now offline

Vous pouvez utiliser une approche similaire pour injecter ce processus dans Terraform.