SMT et performances des processeurs POWER9 (Partie 1 – Architecture des processeurs)

Qu’est-ce le niveau de S.M.T d’un processeur POWER ?

Commençons par le début. L’acronyme S.M.T signifie Simultaneous MultiThreading, que l’on pourrait traduire en français par : unités de traitement simultanés multiples.

OK, c’est bien de donner le nom complet et de s’avancer dans une traduction, mais si on n’est pas familier des technologies processeurs d’IBM, on n’y comprend toujours rien !

Alors, nous allons essayer d’être un peu plus clair.

Les fabricants de processeurs cherchent sans cesse de nouvelles technologies permettant d’améliorer le rendement et les performances de leurs puces. La plus connue d’entre elles étant l’augmentation de la fréquence du processeur. Mais cette dernière a atteint ses limites il y a plusieurs années déjà !

La course à la fréquence n’est plus vraiment d’actualité. Après avoir dépassé les 5 GHz il y a quelques années, les fréquences sont désormais comprises entre 3 et un peu plus de 4 GHz. La fréquence ne faisant pas tout, d’autres technologies permettent également d’atteindre des performances de plus en plus élevées. On pourra citer, entre autres :

  • la finesse de gravure (lithographie)
  • le nombre de transistors
  • le nombre de cœurs (cores) par chipset
  • le nombre d’étages et l’architecture des pipelines
  • le nombre de registres
  • la composition chimique des transistors (C.M.O.S, S.O.I …)
  • la capacité et le nombre de caches mémoire
  • le type d’accès à la mémoire (S.M.P, N.U.M.A …)
  • le multitheading

C’est ce dernier point que nous allons aborder dans cet article : le MultiThreading.


Mais avant tout, une explication de l’architecture processeur est nécessaire.

Un processeur (socket) POWER9 est composé de 12 cores et chacun d’entre eux supporte 8 threads que l’on peut également appeler des processeurs logiques. Ainsi, un POWER9 supporte jusqu’à 96 threads.

Processeur – Core – Thread (version animée)

Point important : Il y a souvent confusion de termes entre processeur et cœur (core), y compris chez IBM. Lorsque l’on parle de licence processeur pour l’IBM i, il faut comprendre licence par cœur (ou core). Ainsi, sur un processeur 12 cores, on peut aller jusqu’à 12 licences IBM i.

Voici une représentation plus précise d’un processeur POWER9. La vue ci-dessous détaille les principales fonctions de la puce :

  • Cores / coeurs
  • Caches L3
  • Caches L2

Le processeur POWER9 est pourvu de 12 cores. Zoomons sur l’un d’entre eux afin d’en examiner les détails. Chaque core se décompose en deux grandes parties :

  • La zone des ressources d’exécution, ou CPU Core
  • La zone de cache (L2 + L3)

Détails des différentes zones constituant le core :

  • ISU : Instruction Sequencing Unit
  • IFU : Instruction Fetch Unit
  • LSU : Load-Store Unit
  • Exec slides
  • Super slides
  • Cache L2
  • Cache L3

Représentation détaillée d’un processeur POWER9 (version animée)

Nous connaissons désormais l’architecture d’un core de processeur POWER9. Nous allons re-schématiser sa structure et la représenter en deux parties :

  • Core POWER9 ou zone de ressources d’exécution
  • Zone de caches

Focalisons nous maintenant sur les fameux threads, considérés comme des processeurs logiques par les Operating Systems. Nous savons que chaque core POWER9 peut supporter jusqu’à 8 threads simultanés. Ces threads sont en fait des unités d’exécution des instructions, opérant dans la zone de ressources d’exécution du core.

Les cores POWER9 supportent jusqu’à 8 threads simultanés, mais suivant le type de charge et le nombre de process actifs, ils peuvent fonctionner en différents modes :

  • 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

Pourquoi existe-t-il plusieurs modes ?

A l’origine tous les processeurs étaient mono-core et mono-thread. Comme nous l’avons évoqué précédemment, la multiplication des cores a permis l’amélioration de la puissance d’un processeur, l’accroissement du nombre de thread étant une autre méthode permettant l’augmentation du débit d’un processeur.

Voici une schématisation de l’exécution des différents modes allant du ST (Single Thread) ou SMT1 jusqu’au SMT8.

Exécution en mode ST / SMT1 / SMT OFF

Dans le cas d’exécution en monothread, les unités d’exécution sont quasiment dédiées au thread actif. Ce dernier disposant également de l’intégralité des caches. Une zone, nommée Power Gate, pourra, le cas échéant, être utilisée pour l’augmentation de la fréquence du processeur.


Exécution en mode SMT2

Dans ce mode, deux threads s’exécutent en simultané, chacun disposant de la moitié des ressources d’exécution, et se partagent les caches. Le bilan de ce mode se traduit par une augmentation de 70% du débit du core POWER9 par rapport au mode SMT1. Le gain n’était que de 45% sur les cores POWER8.


Exécution en mode SMT4

Dans le mode SMT4, les threads sont groupés par deux, chaque paire disposant de la moitié des ressources d’exécution du core. Les caches sont partagés entre les quatre threads.

Le débit général d’un core POWER9 augmente de 38% par rapport au mode SMT2, le gain n’était que de 30% pour les cores POWER8.


Exécution en mode SMT8

En mode SMT8, les threads seront groupés par deux et l’on trouvera deux paires par moitié des ressources d’exécution du core. Clairement, il y aura 4 threads par moitié de core. Les 8 threads se partageront les caches L2 et L3.

Détails des niveaux de thread (version animée)

==> Ces différents schémas montrent clairement que suivant le niveau de SMT utilisé, les threads ne disposent pas de la même quantité de ressources d’exécution et par conséquent les threads n’auront pas les mêmes performances.


Pour résumer, il existe 4 états SMT possibles :

  • SMT1 : le thread unique dispose d’environ 60% des ressources d’exécution du core et de 100% des caches
  • SMT2 : chaque thread dispose de 50% des ressources d’exécution du core et d’environ 50% des caches.
  • SMT4 : chaque thread dispose d’environ 25% des ressources d’exécution du core d’environ 25% des caches.
  • SMT8 : chaque thread dispose d’environ 12,5% des ressources d’exécution du core et d’environ 12,5% des caches.

Les différents modes SMT (version animée)

Les threads sont considérés, par les Operating Systems, comme des processeurs logiques.

Exemple avec une partition IBM i sur un serveur POWER9 (modèle 9009-41A Power S914).

La partition dispose de 0,50 core physique ou CE (Capacity Entitlement) (entouré en rouge) et un maximum de 1 processeur virtuel (VP). Nous allons voir que le niveau SMT (processeurs logiques) est en lien direct avec la valeur nombre maximal de processeurs virtuels (entouré en bleu).


La commande WRKSYSACT confirme que la capacité de traitement de cette partition est de 0,50.


La macro FLIGHTLOG permet d’afficher le nombre de processeurs logiques de la partition, et l’on constate qu’elle en possède … 8, ce qui correspond à un paramétrage SMT8.


Si l’on modifie le nombre de processeurs virtuels maximum de cette partition (redémarrage nécessaire) en les passant de 1 à 2 …


… on constate que le nombre de processeurs virtuels passe à 16.

Comme nous l’avons vu précédemment, chaque core POWER9 dispose de 8 threads donc de 8 processeurs logiques. Cela signifie que si l’on affecte deux processeurs virtuels (2 cores) à la partition, cette dernière disposera donc de 16 processeurs logiques (8 + 8).

Pour information, seuls les threads des processeurs virtuels réellement utilisés seront actifs. Le nombre de VP maximum donne le nombre de processeurs logiques maximum, mais c’est le nombre de VP souhaités qui donne le nombre de processeurs logiques utilisés.

Si l’on affecte un maximum de 3 processeurs virtuels à la partition, elle aura 24 threads (ou processeurs logiques) et ainsi de suite.


Même constat avec un Virtual I/O Server (VIOS), une partition AIX ou Linux PowerPC. Un core dédié en SMT8, donne 8 processeurs logiques (0 à 7).

VIOS avec 1 core dédié en SMT8 : 8 processeurs logiques

Comment peut-on modifier le nombre de threads d’une partition IBM i ?

La valeur système QPRCMLTTSK permet d’activer ou de désactiver le multithreading.

Lorsqu’elle est réglée à 0, le multithreading est désactivé, on se trouve donc en ST ou SMT OFF, ce qui correspond à ce que l’on pourrait nommer le mode SMT1.

La valeur par défaut est 2, elle signifie que le système contrôle lui-même le niveau SMT.

Il est totalement déconseillé de désactiver le SMT, sauf cas très particulier. Les niveaux 1 et 2 sont assez similaires en termes de fonctionnement à la différence près, que la valeur 2 laisse au système la capacité à contrôler lui-même le niveau SMT en fonction du workload rencontré.

Lorsque l’on est en niveau 1 ou 2 sur la valeur système QPRCMLTTSK, le niveau de SMT par défaut est le niveau maximum correspondant à la technologie processeur (voir tableau ci-dessous).

Depuis le POWER5, en 2004, les processeurs IBM POWER disposent de plusieurs threads par cœur (ou core). Voici les valeurs maximales par technologie processeur et version IBM i.

ProcesseurAnnéeVersion IBM iThreads / core
POWER520045.3 – 5.4 – 6.1 – 7.12
POWER5+20055.3 – 5.4 – 6.1 – 7.12
POWER620075.4 – 6.1 – 7.1 – 7.22
POWER6+20085.4 – 6.1 – 7.1 – 7.22
POWER720106.1 – 7.1 – 7.2 – 7.34
POWER7+20126.1 – 7.1 – 7.2 – 7.34
POWER820147.14
POWER820147.2 – 7.3 – 7.48
POWER920177.2 – 7.3 – 7.48

Tableau récapitulatif du nombre de threads par cœur/core sur les processeurs POWER depuis 2004

Sur un POWER9, par exemple, le niveau SMT par défaut sera SMT8. Mais il est possible de modifier manuellement ce niveau et de le passer à d’autres valeurs comme SMT4 ou SMT2. SMT1, quant à lui, correspondant à la désactivation du multithreading.

Si l’on souhaite modifier le niveau de mutithreading, il faut passer par une API système, directement en ligne de commande.

Pour passer en SMT2, SMT4 ou SMT8

CALL PGM(QSYS/QWCCHGPR) PARM(X'00000002')
CALL PGM(QSYS/QWCCHGPR) PARM(X'00000004')
CALL PGM(QSYS/QWCCHGPR) PARM(X'00000008')

Pour revenir au niveau par défaut de la technologie processeur, donc au niveau maximum du nombre de threads (Ex : 4 pour un POWER7 ou 8 pour un POWER9).

CALL PGM(QSYS/QWCCHGPR) PARM(X'00000000')

Pour vérifier le niveau en cours, il faut également utiliser une API, mais cette fois, il faudra faire un programme CL car il y a des paramètres de retour.

CALL PGM(QSYS/QWCRTVPR)

La multiplication du nombre de threads augmente le débit général d’un core, mais la capacité de traitement intrinsèque d’un thread diminue proportionnellement au nombre de threads actifs. Nous verrons cela plus en détail dans la seconde partie avec chiffres à l’appui.


En comparaison, les cœurs des processeurs Intel ne disposent que de 2 threads. C’est que l’on nomme l’Hyper-Threading. Cela signifie que chaque cœur Intel, ne peut exécuter que 2 threads simultanés (thread 0 et thread 1).

Intel préfère augmenter le nombre de core de ses processeurs plutôt que le nombre de threads par cœur.

La génération Intel Skylake d’octobre 2019, destinée aux serveurs de calculs intensifs, dispose de 56 cores avec 2 threads par core soit 112 threads sur le modèle Xeon Platinum.

Nous avons vu que le design du POWER9 est un socket 12 cores, mais IBM a également sorti une version … 24 cores pour les modèles dédiés aux supercalculateurs. Voir l’article consacré à ces modèles.

En fait il s’agit du même processeur, mais le design des cores à été revu. Chaque core étant divisé en deux cores plus petits partageant les caches L2 et L3.

Ces modèles avec des cores disposant de moins de ressources d’exécution, supportent le SMT4 au maximum, donc toujours 96 threads au total (24 x 4), comme pour le 12-core (12 x 8).


Précision complémentaire sur le nombre de cores d’un processeur POWER9. Sur le serveur Power S914, il existe 3 modèles de processeur (4, 6 et 8 cores), alors pourtant que tous les processeurs POWER9 ont un design à 12 cores. D’où vient cette différence ?

Dans la pratique, IBM limite le nombre de cores de ses processeurs pour plusieurs raisons :

  • augmentation de la fréquence du processeur
  • bridage des processeurs “d’entrée de gamme” (gamme scale-out)

Dans le cas d’un S914 4-core, 8 cores sont “grillés” lors de la fabrication de la puce. Ces cores ne seront jamais réactivables, ils sont “grillés” définitivement. Seuls les cores désactivés peuvent être réactivés.

Il est possible de faire désactiver des cores lors de la commande d’un serveur afin de limiter le nombre de core, à la demande d’un éditeur de logiciel par exemple. Ce dernier souhaitant s’assurer que le serveur n’utilisera pas plus de puissance sur son progiciel que ce qu’il a facturé !

Les cores désactivés pouvant être réactivés ensuite par une clé PowerVM.


Idem avec le modèle S914 6-core sur lequel 6 cores ont été “grillés” …

… et sur le S914 8-cores avec 4 cores “grillés”.

Cette spécificité est également présente sur les autres modèles de la gamme.

Sur le Power S924 et le Power E950, il existe des processeurs 8-core, 10-core, 11-core et 12-core, ce qui signifie que ces puces ont respectivement 4, 2, 1 et 0 cores “grillés”.

Sur le Power E980, il existe des processeurs 6-core, 8-core, 10-core, 11-core et 12-core, ce qui signifie que ces puces ont respectivement 6, 4, 2, 1 et 0 cores “grillés”.


La seconde partie de l’article est consacrée au multithreading avec comparaison des performances entre les niveaux de SMT et les dernières générations de processeurs POWER.