Instructeur : Dans cette leçon,
nous allons aborder les fonctions de l'unité centrale.
Cela comprend des éléments tels que le multithreading,
le multiprocessing symétrique, le cœur
unique par rapport au cœur multiple et la prise en charge de la virtualisation.
La première chose que
nous allons aborder est le multithreading, également appelé SMT
ou multithreading simultané ou hyperthreading, en fonction
du processeur que vous achetez.
Hyper-threading est un terme utilisé
par Intel pour ce processus.
Le terme plus générique est SMT (simultaneous
multithreading).
En ce qui concerne le threading,
il s'agit du concept d'un flux unique d'instructions
envoyées par une application logicielle à un processeur.
Aujourd'hui, la plupart des applications ont été conçues pour exécuter un seul
processus dans un seul thread.
Cela signifie que ce logiciel fait
tout en série.
Ainsi, si je vous donne une instruction
sur cinq choses différentes à faire,
vous ferez ces choses dans l'ordre,
un, deux, trois, quatre et cinq.
Et si chacune d'entre elles vous prenait 10
minutes, cela ferait un total de 50 minutes.
Mais si je vous permettais de faire du multithreading
et de faire ces choses dans le
désordre ou en même temps, vous pourriez alors
faire plus d'une chose à la fois en envoyant ces choses à différents
threads ou à différents flux.
Par exemple, supposons que je vous dise que
je veux que vous écriviez quelque
chose avec votre main droite
et que vous tapiez en même temps sur le bureau avec votre
main gauche.
Vous pouvez faire les deux en même
temps, parce que vous avez deux
fils, ou deux mains pour faire ces actions.
C'est l'idée du multithreading.
Intel et les autres fabricants ont donc mis au point
un moyen de permettre aux logiciels de communiquer
avec leurs processeurs et d'exécuter
simultanément plusieurs threads parallèles
au sein d'un même processeur.
Cela permet à ces threads d'être
exécutés par ce processeur et de réduire le temps
d'inactivité de l'unité centrale en attente
de l'action suivante.
Ce faisant, nous pouvons essentiellement
essayer d'augmenter notre capacité
et de faire passer plus de choses
par le processeur et d'essayer de faire plus de choses
dans le même laps de temps.
C'est très bien, mais cela ne fonctionne que jusqu'à un certain
point, et le logiciel doit être capable d'utiliser et
de comprendre cela pour pouvoir dire au système que vous
voulez utiliser plusieurs fils en même temps.
Il s'agit de la principale limitation
lorsque l'on a affaire à quelque chose comme l'hyperthreading.
Une autre façon de contourner
ce problème est de recourir au multiprocessus symétrique, ou SMP.
Le SMP est la méthode traditionnelle utilisée
par les stations de travail et les serveurs,
car ils sont dotés de plusieurs processeurs.
Pour ce faire, vous devez disposer
d'une carte mère dotée de deux ou quatre emplacements de processeur,
et installer deux ou quatre processeurs sur
cette carte mère.
Dans ce cas, tous les processeurs doivent être
du même type et de la même vitesse pour pouvoir
fonctionner ensemble.
Et votre système d'exploitation sous-jacent doit comprendre
comment utiliser plus d'un processeur.
Par défaut, la plupart des systèmes d'exploitation ne le font pas.
Il fallait donc disposer d'un système d'exploitation basé
sur un serveur, comme Windows Server 2019, pour pouvoir prendre
en charge plusieurs processeurs.
Pour cette raison, le SMP (symmetric multiprocessing) n'était pas très utile pour
les ordinateurs de bureau et les ordinateurs portables.
Au lieu de cela, la plupart des ordinateurs de bureau et des ordinateurs
portables ont dû s'en remettre à l'hyperthreading
des processeurs Intel ou au multithreading simultané, ou SMT,
si vous utilisez un processeur AMD.
L'hyperthreading et le SMT ont donc très bien fonctionné pendant longtemps,
mais nous avons fini par nous heurter à la limite de la quantité de
données que nous voulions traiter et du fait que nous ne
disposions que d'un seul processeur pour le faire.
Comme la plupart des systèmes d'exploitation
ne savaient pas comment gérer les prises
multiples ou les processeurs multiples sur une carte mère
donnée, les fabricants ont commencé à créer ce que
l'on appelle un paquet multicœur.
Lorsque je parle d'un paquet,
je parle de l'unité centrale, de la puce physique.
Au lieu d'avoir deux boîtiers physiques
ou deux puces physiques sur deux prises différentes
de votre carte mère, ces
fabricants ont décidé de créer un seul
boîtier qui fonctionne comme un seul processeur.
Mais à l'intérieur de ce paquet,
il y avait en fait plusieurs CPU ou plusieurs processeurs.
Pour la carte mère, cela signifie qu'il semble
y avoir un seul processeur physique, car c'est le cas, mais à l'intérieur,
il y a plusieurs cœurs, ou unités
centrales de traitement, à l'intérieur.
Cela permet à n'importe quel système d'exploitation
de s'adresser à ce processeur unique ou à cet ensemble de processeurs,
et l'ensemble de processeurs lui-même
peut alors répartir ces instructions
entre les multiples cœurs internes du processeur.
Pensez-y de la manière suivante.
Vous avez une maison avec quatre chambres à coucher.
Si quelqu'un se présente à la porte d'entrée et dit : "J'ai besoin
d'un lit pour la nuit", il ne se préoccupe
pas de savoir lequel de ces quatre lits il obtiendra,
du moment qu'il a un lit pour la nuit.
Vous entrez donc par la porte d'entrée, vous les
emmenez dans une seule pièce et vous ne leur montrez qu'une seule pièce.
C'est essentiellement ce que fait ce processeur multicœur.
Lorsque de nouvelles personnes franchissent la porte, le
système les conduit dans une chambre individuelle où elles peuvent
dormir pour la nuit ou effectuer leurs démarches, avant de les renvoyer.
Tout cela est géré par
la personne qui se trouve à la porte
d'entrée, qui, dans ce cas, est ce paquet multicœur.
Il les place ensuite dans le compartiment individuel
ou le sous-processeur individuel dont il a besoin pour effectuer ce travail.
C'est l'idée d'un paquet multicœur.
La plupart d'entre nous en ont déjà entendu parler,
car votre système est probablement
équipé d'un processeur multicœur.
Vous disposez probablement d'un processeur double
cœur, c'est-à-dire de deux processeurs dans une seule puce,
ou d'un processeur quadruple, c'est-à-dire
de quatre processeurs dans une seule
puce.
Ou vous avez un processeur hexa, ce qui signifie
que vous avez six cœurs à l'intérieur d'une seule puce.
Ou bien vous avez un processeur octa,
ce qui signifie que vous avez huit cœurs dans une seule puce.
Par exemple, sur mon processeur, j'ai un processeur à huit cœurs sur mon ordinateur
de bureau, et il s'agit d'une seule puce physique, mais il y a huit
sous-processeurs à l'intérieur.
C'est ce qu'on appelle un processeur
à huit cœurs, ou multi-cœurs.
En plus du multi-cœur et de l'hyperthreading,
il est possible de combiner les
deux, de sorte que chacun
de ces processeurs à l'intérieur du paquet, par exemple,
dans mon système, j'ai l'octa-cœur,
qui a huit processeurs.
Ce paquet contient huit processeurs,
et chacun de ces huit processeurs
peut également prendre en charge l'hyperthreading.
Cela signifie que j'ai 16 threads avec huit CPU, ce qui me donne
une grande capacité de traitement sur cette
machine particulière.
Très bien, à ce stade, nous avons abordé trois des quatre
points que nous voulions traiter dans cette leçon.
Nous avons parlé de l'hyperthreading
et du multithreading simultané, connu sous le nom de SMT.
Nous avons parlé du multiprocessing symétrique, c'est-à-dire
de la présence de plusieurs unités centrales dans les sockets,
puis nous avons abordé l'idée des processeurs multicœurs, qui
consistent en une seule unité centrale
dotée de plusieurs processeurs, qu'ils soient
au nombre de deux, quatre, six ou huit.
La dernière chose dont nous devons parler est la virtualisation.
La virtualisation est une autre caractéristique des processeurs, mais elle n'est
pas vraiment liée aux trois aspects que
nous venons d'évoquer.
Les trois sujets dont nous venons de parler
portaient sur la manière d'obtenir davantage de performances à partir
d'une seule ou de plusieurs puces.
Mais lorsque nous parlons de virtualisation,
nous parlons de la possibilité d'émuler un matériel
qui n'existe pas en réalité.
Cela est possible grâce
à la technologie de virtualisation d'Intel,
connue sous le nom de VT, ou à la virtualisation d'AMD,
connue sous le nom d'AMD-V.
Aujourd'hui, ces deux systèmes fournissent des extensions de processeur
pour prendre en charge la virtualisation, que l'on appelle
virtualisation assistée par le matériel.
Cela soulève probablement
la question suivante : qu'est-ce que la virtualisation ?
La virtualisation est la capacité d'un ordinateur à faire
semblant de faire fonctionner plusieurs autres ordinateurs à l'intérieur
de lui-même.
Il se peut que j'aie un seul ordinateur
portable, comme mon MacBook.
Et dans ce MacBook, j'ai un seul système d'exploitation, macOS.
Maintenant, si je voulais utiliser Windows
ou Linux, je devrais reformater ma machine
et installer ce logiciel.
Ce serait vraiment gênant.
Mais avec la virtualisation, je n'ai pas à le faire.
Au lieu de cela, je peux exécuter
un programme comme VMware ou Virtualbox ou Parallels, et dans
ce logiciel, je peux créer
un ordinateur virtuel.
Je peux lui dire que je veux qu'il ait un processeur,
deux processeurs ou quatre processeurs.
Et je peux lui indiquer la quantité de mémoire que je veux
et la quantité d'espace de stockage que je veux.
Il créera cet ordinateur virtuel
qui n'existe que dans le logiciel.
Maintenant, lorsque j'exécute le nouveau système d'exploitation,
comme Windows, à l'intérieur, je pourrais dire qu'il s'agit d'un processeur à deux cœurs.
Il dispose de quatre gigaoctets de mémoire vive et d'un disque dur de 50 gigaoctets.
Tout cela n'existe que dans les logiciels.
Mais lorsque j'installe Windows dans cette machine virtuelle,
Windows pense qu'il s'agit d'un ordinateur complet.
Il pense avoir deux processeurs, quatre
gigaoctets de mémoire et
un disque dur de 50 gigaoctets.
Ainsi, Windows pense qu'il
dispose de tout ce matériel physique, et c'est ce que
la virtualisation nous permet de faire.
Il nous permet de virtualiser un ordinateur
et de fournir du matériel virtuel et d'exécuter
plusieurs systèmes d'exploitation
à l'intérieur d'un seul hôte physique.
Outre VT et AMD-V, il existe également un deuxième niveau
de prise en charge matérielle
de la virtualisation que vous pouvez rechercher dans certains
processeurs modernes.
Sur les systèmes Intel, il s'agit de l'EPT
(extended page table).
Dans le cas d'un processeur AMD,
il s'agit de l'indexation de virtualisation rapide, ou RVI.
Ces deux éléments sont considérés comme des fonctions de traduction
d'adresses de second niveau (SLAT) de la virtualisation logicielle qui
sont ensuite sous-jacentes et prises en charge par le processeur
matériel afin de permettre une meilleure gestion de la
mémoire virtuelle et d'améliorer les performances
lors de l'utilisation de la
mémoire à l'intérieur d'une machine virtuelle.
Nous allons parler plus en détail de la virtualisation
dans nos propres leçons, mais pour l'instant,
je veux juste que vous compreniez
que certains processeurs ont la capacité de le faire à l'intérieur
de leur ensemble de processeurs,
et les processeurs qui ont cette capacité, comme
ceux qui supportent VT d'Intel ou AMD-V d'AMD, vous donneront de meilleures performances
lorsque vous faites de la virtualisation
que ceux qui n'en ont pas.
Par conséquent, si vous construisez
une machine et que vous souhaitez l'utiliser pour la
virtualisation, par exemple un serveur
sur lequel tourneront de nombreux autres serveurs
virtuels, vous devez vous assurer que les processeurs
que vous choisissez sont dotés de la technologie VT ou AMD-V afin qu'ils puissent prendre en charge
la virtualisation matérielle accélérée directe, car cela vous
permettra de bénéficier d'une expérience et de performances bien meilleures que
si vous deviez recourir à la virtualisation logicielle.