SMT et performances des processeurs POWER9 (Partie 2 – Le multithreading)

Publié le 12/01/2020

Seconde partie de notre article consacré aux performances des processeurs et plus particulièrement à la technologie multithreading.

Revenons à nos histoires de threads et définissons tout d’abord de quoi il s’agit. Un thread, c’est un bloc d’instructions machine cohérentes qui ne peuvent être dissociées les unes des autres.

Un programme est constitué de nombreuses instructions, ces dernières pouvant être décomposées en blocs cohérents, c’est ce que l’on appellera des threads. Chaque thread peut être exécuté indépendamment des autres threads.

Les processeurs modernes disposent d’une architecture leur permettant d’exécuter plusieurs threads en simultané sur chaque cœur/core. Si l’on est capable de décomposer les traitements en plusieurs threads, on pourra améliorer le débit général du dit traitement car différents threads s’exécuteront en parallèle et la durée d’exécution générale sera sensiblement réduite.

  • SMT OFF (SMT1) : exécution d’un seul thread (monothread)
  • SMT2 : exécution de 2 threads en simultané par core
  • SMT4 : exécution de 4 threads en simultané par core
  • SMT8 : exécution de 8 threads en simultané par core

Il sera, par exemple, plus rapide d’exécuter, en simultané, tous les threads d’un programme, plutôt que de les exécuter les uns après les autres.

Exemple avec un job à 4 threads.


Exécution des 4 threads en SMT OFF (SMT1), c’est-à-dire les uns après les autres. Afin de simplifier les schémas, nous avons représenté des threads de même durée, dans la réalité, les threads auront des durées différentes puisqu’ils ne représentent pas les mêmes flux d’instructions.


Exécution des 4 threads en SMT4 ou en SMT8. Les 4 threads s’exécutent en simultané.


Bilan : Le temps d’exécution de chaque thread est un peu plus long en SMT4 ou SMT8 que lorsqu’il s’exécute en SMT OFF (SMT1), mais la durée totale d’exécution des 4 threads, est beaucoup plus courte. Ainsi, puisqu’en SMT4 ou en SMT8 on effectue plus de threads simultanés, un job multithread va donc s’exécuter beaucoup plus rapidement.

Gain de temps avec multithread (version animée)

Dans cet exemple, lorsque le processeur est réglé en monothread (SMT OFF / SMT1) et qu’un job à 4 threads s’exécute, la durée d’exécution du job est égale au temps « t ».

Si le processeur est réglé en SMT4 ou en SMT8, les 4 threads vont pouvoir s’exécuter en simultané. Comme nous l’avons vu dans la première partie de l’article (architecture des processeurs), plus il y aura de threads simultanés, moins les performances unitaires des threads seront élevées car ils partageront les caches et disposeront de moins de ressources d’exécution. C’est la raison pour laquelle la durée d’exécution de chaque thread sera un peu plus longue que lorsque le thread s’exécute en SMT OFF (SMT1), toutefois la durée d’exécution de l’ensemble des threads sera beaucoup plus courte qu’en mode SMT OFF (SMT1). La différence de temps sera égale à « x ».

En SMT4 ou en SMT8, le débit général est donc beaucoup efficace qu’en SMT OFF (SMT1) (monothread).

==> Le multithreading, c’est donc la capacité d’un cœur/core a pouvoir traiter des flux d’instructions en parallèle, et donc en simultané, afin d’optimiser le débit des données traitées. Plus il y aura de threads simultanés plus on améliorera le débit des traitements.


Nous allons voir une représentation plus précise des threads et des instructions afin de mieux comprendre le fonctionnement du multithreading.

Les schémas ci-dessous montrent l’exécution de 8 threads sur un core POWER9. L’axe des abscisses représente le temps, exprimé en cycles processeur, l’axe des ordonnées représente les étages des pipelines du core. Les pipelines sont l’une des principales fonctions de calcul des ressources d’exécution d’un core. Ils sont composés de différents étages ayant chacun une fonction très précise. Le nombre d’étage sur ces schémas a été volontairement réduit pour des raisons de lisibilité.

Exécution de 8 threads en mode SMT OFF (équivalent du SMT1)

Dans cet exemple, les 8 threads s’exécutent les uns après les autres dans les différents étages du pipeline. Les threads sont tous différents et n’ont donc pas les mêmes durées d’exécution (exprimées en cycles processeur).

La totalité d’exécution des 8 threads de cet exemple est de 38 cycles processeur.


Regardons désormais l’exécution des mêmes threads en mode SMT8.

Le constat est simple, la durée d’exécution totale des 8 threads a été réduite de 2/3. La durée est de 13 cycles en mode SMT8 au lieu de 38 cycles en mode SMT1. Chaque thread a été un peu plus long voire beaucoup plus long que lors de son exécution unitaire en mode SMT OFF, mais la durée d’exécution de l’ensemble des threads a été sensiblement réduite.


Comparaison des deux modes.

Le mode SMT OFF (SMT1) laisse de nombreux étages de pipeline vides alors que le mode SMT8 permet d’obtenir un meilleur remplissage des différents étages des pipelines. Les cycles processeurs sont donc beaucoup plus efficients en mode SMT8. Bien entendu, les modes SMT2 et SMT4 donnent des résultats intermédiaires entre le mode SMT OFF et le mode SMT8.


Calcul de la différence de performances entre les deux modes.

38 cycles en SMT OFF et 13 cycles en SMT8. Il suffit ensuite de diviser le premier par le second afin d’obtenir le rapport. Le résultat est de 2,9, nous verrons un peu plus loin qu’il s’agit de la différence officielle de performance entre ces deux modes.


Le débit en SMT8 est donc presque 3 fois supérieur à celui du débit d’un core exécutant les instructions et threads en mode SMT OFF (SMT1).

Comparaison des modes d’exécution SMT (version animée)

Pourquoi le multithreading permet un remplissage des pipelines ?

Lorsqu’un job s’exécute, il accède à des données, mais ces dernières ne sont pas forcément dans les caches L1 et L2 du core, dans ce cas, il faut aller les chercher en mémoire centrale ou sur disque, mais les temps d’accès aux disque et même à la mémoire centrale (RAM) sont extrêmement longs en comparaison de la vitesse de traitement du processeur.

Lorsque le thread est en attente de chargement du cache (cache miss) pour poursuivre son exécution, le processeur ou plus exactement le core, est en attente et les cycles processeur sont donc perdus. Si plusieurs threads s’exécutent en simultané, le core à toujours une activité car statistiquement, tous les threads ne sont pas en attente au même moment. Par conséquent, le remplissage des pipelines en multithreading est beaucoup plus efficace et le nombre de cycles processeur perdus est beaucoup plus faible.


Pour schématiser ce principe de multithreading, on pourrait faire une analogie simple avec des routes ayant plusieurs voies de circulation (threads) et sur lesquelles les véhicules pourraient être comparés aux flux d’instructions.

Plus il y aura de voies, moins les véhicules seront rapides mais plus il y aura de véhicules à circuler en simultané.

Comparaison du multithreading et voies de circulation (version animée)

En résumé, si on souhaite augmenter le débit général d’un serveur, il faut utiliser la technologie multihreading des cores, en revanche, dans le cas d’un job monothread, il pourra être conseillé d’utiliser le core en mode SMT OFF (SMT1) afin de disposer de la plus grande puissance possible, et de pouvoir obtenir une augmentation de la fréquence d’horloge du core.

L’utilisation du mode SMT OFF (SMT1) pourrait être justifiée dans le cas d’un gros traitement batch monothread. Toutefois si ce job s’exécute alors qu’il n’y a pas d’autres process importants, l’IBM i aura la capacité à passer le mode SMT en OFF durant son exécution et rebasculera ensuite en mode SMT8, si la valeur système QPRCMLTTSK est réglée sur 2.


Nous allons désormais regarder le détail des performances par mode de multithreading. Ces chiffres sont basés sur les relevés de performances fournis par IBM (Power Systems Performance Report).

La mesure des performances IBM i s’effectue en CPW (Commercial Processing Workload), malheureusement IBM ne fournit que les mesures en mode SMT8. En revanche, pour AIX, l’UNIX d’IBM s’exécutant également sur les serveurs Power Systems à base de processeur POWER, IBM donne plus de détails. Les mesures AIX ne sont pas exprimées en CPW, mais en rPerf (Relative Performance).

Les tableaux suivants sont donc exprimés en rPerf. IBM confirme que si les unités rPerf et CPW sont différentes, les rapports, quant à eux, restent quasiment proportionnels.

Nous avons pu le vérifier en comparant les mesures rPerf et CPW en mode SMT8, publiées toutes les deux. Les proportionnalités entre ces deux mesures sont conservées quels que soient les modèles de processeur POWER8 et POWER9 et quels que soient le nombre de cores (entre 0 et 3% de différence).

Un dernier point avant d’aborder les tableaux de mesure, il concerne ce que l’on appelle les CVE ( Common Vulnerabilities and Exposures), c’est-à-dire les failles de sécurité.

Certaines d’entre elles ont été fortement médiatisées fin 2017 et sur toute l’année 2018. Il s’agissait des failles nommées Spectre et Meltdown, qui affectaient tous les processeurs modernes.

Comme tous les fondeurs de processeur, IBM a dû corriger ces failles, mais les correctifs ont une incidence sur les performances.

Ainsi, les processeurs Intel ont perdu environ … 20% en termes de performances, les processeurs POWER, quant à eux, n’ont été impactés que de 5 à 7% suivants les modèles.

Les tableaux vont comparer les performances des processeurs :

  • POWER8 sans les correctifs CVE
  • POWER8 avec les correctifs CVE
  • POWER9 avec les correctifs CVE

Le POWER9 ayant été commercialisé après la découverte des failles Spectre et Meltdown, les correctifs ont toujours été inclus, contrairement aux serveurs à base de POWER8.


Comparaison Power S814 / Power S914 4-core


Comparaison Power S814 / Power S914 6-core


Comparaison Power S814 / Power S914 8-core


Comparaison de tous les modèles Power S814 et Power S914 (à la même échelle)

Les constats sur les S814/S914 sont les suivants :

  • En mode SMT1, les cores POWER8 sont 8 à 12% plus performants que les cores POWER9 !
  • En mode SMT2, les cores POWER9 sont 3 à 8% plus performants que les cores POWER8.
  • En mode SMT4, les cores POWER9 sont 9 à 15% plus performants que les cores POWER8.
  • En mode SMT8, les cores POWER9 sont 28 à 35% plus performants que les cores POWER8.
  • Bilan, plus il y a de threads actifs, plus la différence entre le POWER8 et le POWER9 est importante, à l’avantage de ce dernier.

Comparaison Power S824 / Power S924 8-core


Comparaison Power S824 / Power S924 16-core


Comparaison Power S824 / Power S924 24-core


Comparaison de tous les modèles Power S824 et Power S924 (à la même échelle)

Les constats sur les S824/S924 sont les suivants :

  • En mode SMT1, les cores POWER8 sont 0 à 4% plus performants que les cores POWER9 !
  • En mode SMT2, les cores POWER9 sont 12 à 17% plus performants que les cores POWER8.
  • En mode SMT4, les cores POWER9 sont 19 à 25% plus performants que les cores POWER8.
  • En mode SMT8, les cores POWER9 sont 40 à 47% plus performants que les cores POWER8.
  • Bilan, comme pour les modèles S914, plus il y a de threads actifs sur le S924, plus la différence entre le POWER8 et le POWER9 est importante.

Comparaison Power E880C / Power E980 32-core


Comparaison Power E880C / Power E980 120-core


Comparaison Power E880C / Power E980 192-core


Comparaison de tous les modèles Power E880C et Power E980 (à la même échelle)

Les constats sur les E880C/E980 sont les suivants :

  • En mode SMT1, les cores POWER8 sont 5 à 8% plus performants que les cores POWER9 !
  • En mode SMT2, les cores POWER9 sont 8 à 10% plus performants que les cores POWER8.
  • En mode SMT4, les cores POWER9 sont 15 à 18% plus performants que les cores POWER8.
  • En mode SMT8, les cores POWER9 sont 35 à 38% plus performants que les cores POWER8.
  • Bilan, plus il y a de threads actifs sur le E980, plus la différence entre le POWER8 et le POWER9 est importante.

La graphique ci-dessous affiche le gain de performances entre les niveaux de SMT sur un processeur POWER8.

Si on prend comme base le mode SMT1, le mode SMT8 permet de doubler les performances (x 2,02).


Même graphique que le précédent, mais pour des processeurs POWER9.

Le mode SMT8 d’un processeur POWER9 permet de tripler les performances par rapport au mode SMT1 (x 2,95). Cela correspond exactement au graphique que nous avons présenté plus haut dans cet article avec les cycles processeurs dans lequel nous pouvions constater un gain de performances en SMT8 équivalent à 2,9 fois celles du mode SMT OFF (SMT1).


Après ces deux articles de présentation de l’architecture des processeurs et du multithreading, nous constatons que plus il y aura de threads actifs, plus le débit du core sera élevé et donc meilleures seront les performances générales.

Bilan, nous recommandons fortement de ne pas désactiver le multithreading et de laisser la valeur par défaut de QPRCMLTTSK à 2 afin que le système ajuste lui-même le niveau de SMT et de s’assurer que le mode est bien ajusté en SMT8. Il n’y a quasiment aucun intérêt à utiliser un autre mode.

Le multithreading permet d’améliorer très sensiblement les performances d’un core.

Le mode SMT8 permet au POWER9 d’offrir des performances supérieures de 28 à 47% par rapport au POWER8 suivant les modèles de serveur.

Première partie de l’article, consacrée à l’architecture des processeurs.