Le multiprocesseur symétrique (SMP) est une architecture informatique courante qui permet à plusieurs processeurs ou cœurs de processeur de travailler ensemble sur un pied d'égalité au sein d'un même système.

Que signifie SMP (Symmetric Multiprocessing) ?
Le multiprocesseur symétrique est une architecture informatique dans laquelle deux ou plusieurs processeurs (ou plusieurs cœurs présentés comme des pairs) partagent la même mémoire principale physique et le même sous-système d'E/S tout en exécutant une seule instance de système d'exploitation .
« Symétrique » signifie que chaque processeur possède le même statut et peut exécuter n'importe quel thread ou tâche du noyau ; il n'y a pas de processeur « maître » dédié qui gère la planification ou les entrées/sorties. Le système d'exploitation traite tous les processeurs comme un pool partagé, répartissant les threads exécutables entre eux et coordonnant l'accès aux ressources partagées grâce à des mécanismes de synchronisation tels que les verrous, les opérations atomiques et les règles d'ordonnancement de la mémoire.
Comme tous les processeurs peuvent accéder au même espace d'adressage, le SMP facilite le partage de données entre les threads, mais il introduit également une surcharge de contention et de coordination lorsque de nombreux cœurs se disputent la même bande passante mémoire ou accèdent fréquemment aux mêmes structures de données partagées.
Dans les systèmes modernes, le SMP se présente souvent sous la forme de processeurs multicœurs et de systèmes multiprocesseurs. servers, où le système peut encore être logiquement SMP même si l'accès à la mémoire sous-jacente n'est pas parfaitement uniforme (comme dans NUMA), puisque le système d'exploitation répartit toujours le travail sur plusieurs processeurs équivalents au sein d'une image système cohérente.
Comment fonctionne le multiprocesseur symétrique ?
Le SMP fonctionne en faisant partager un même système d'exploitation, un même espace mémoire et un même ensemble de ressources matérielles à plusieurs processeurs ou cœurs . Ainsi, le système d'exploitation peut exécuter des tâches en parallèle tout en garantissant la cohérence des données partagées. Voici comment cela fonctionne :
- Le système démarre sur une seule image système. Une instance du système d'exploitation initialise le matériel et met en ligne des processeurs/cœurs supplémentaires, afin qu'ils puissent participer aux tâches en cours au lieu de rester inactifs.
- Le système d'exploitation construit un modèle de file d'attente d'exécution partagée pour les threads. Il surveille les processus/threads exécutables et leurs priorités, afin de pouvoir décider ce qui doit être exécuté ensuite sur tous les processeurs disponibles.
- Le travail est réparti entre les processeurs. Le planificateur attribue des threads à différents processeurs (et peut les migrer) afin de répartir la charge, de réduire le temps d'attente et de maintenir la réactivité du système en cas de concurrence.
- Les processeurs exécutent les threads simultanément dans le même espace d'adressage. Chaque processeur exécute le thread qui lui est assigné, tandis que tous les threads peuvent lire/écrire dans la mémoire partagée, ce qui permet une communication rapide et des structures de données partagées sans passage de messages explicite.
- Le système d'exploitation et les applications synchronisent l'accès aux ressources partagées. Les verrous, les opérations atomiques et autres primitives de synchronisation empêchent les conditions de concurrence, de sorte que les mises à jour de la mémoire partagée restent correctes même lorsque plusieurs processeurs accèdent aux mêmes données.
- Maintenance du matériel cachette la cohérence. Les protocoles de cohérence garantissent que lorsqu'un processeur met à jour une adresse mémoire, les copies mises en cache par les autres processeurs sont mises à jour ou invalidées, de sorte que tous les processeurs aient une vue cohérente de la mémoire.
- Le système s'équilibre et s'adapte à la charge. Le système d'exploitation surveille l'utilisation du processeur, les conflits d'accès à la mémoire et la pression exercée sur celle-ci, puis ajuste la planification et l'allocation des ressources afin d'améliorer le débit tout en minimisant les goulots d'étranglement tels que les conflits d'accès à la mémoire. bande passante limites.
Caractéristiques clés du multiprocesseur symétrique
Les caractéristiques clés du multiprocesseur symétrique expliquent ce qui le distingue des autres architectures multiprocesseurs et les compromis qu'il implique lorsque plusieurs processeurs partagent une même image système. Elles comprennent :
- Processeurs/cœurs homologues (symétriques)Tous les processeurs ont le même rôle et les mêmes capacités, de sorte que n'importe quel processeur peut exécuter des threads utilisateur, des threads noyau et gérer les interruptions (selon la politique du système d'exploitation), évitant ainsi une séparation stricte entre maître et esclave.
- instance unique de système d'exploitationUn seul système d'exploitation contrôle l'ensemble de la machine et planifie le travail sur tous les processeurs, ce qui simplifie la gestion et présente le système comme un seul ordinateur plutôt que comme plusieurs nœuds coordonnés.
- Espace d'adressage mémoire partagé et cohérentTous les processeurs peuvent accéder à la même mémoire vive (RAM) en utilisant le même modèle d'adressage, ce qui facilite le partage de données entre les threads et permet au système d'exploitation de maintenir une vue unifiée des processus et des ressources.
- Planification centralisée avec l'équilibrage de chargeLe système d'exploitation répartit les threads exécutables entre les processeurs et peut les migrer pour maintenir une utilisation uniforme, améliorant ainsi le débit et réduisant les goulots d'étranglement lorsque les charges de travail sont bien parallélisables.
- Cohérence du cache entre les processeursLes protocoles de cohérence matérielle maintiennent la cohérence des caches par cœur, de sorte que les lectures suivent les écritures les plus récentes (dans les règles du modèle de mémoire), ce qui est essentiel pour une concurrence correcte de la mémoire partagée.
- Surcharge et contention de la synchronisation. Étant donné que les processeurs partagent la mémoire et les structures de données du noyau, des verrous et des opérations atomiques sont nécessaires ; un partage important peut entraîner une contention des verrous, un « ping-pong » des lignes de cache et une réduction de la mise à l'échelle à un nombre élevé de cœurs.
- Sous-système d'E/S partagé et interruptionsLes périphériques et les chemins d'E/S sont partagés, et les interruptions peuvent être acheminées entre les processeurs, ce qui améliore flexcette capacité existe, mais elle peut créer des points chauds si la gestion des E/S se concentre sur un sous-ensemble de cœurs.
- Évolutivité limitée par les ressources partagées. Les gains de performance dépendent du degré de parallélisation de la charge de travail et des contraintes partagées telles que la bande passante mémoire, la capacité du cache de dernier niveau et les coûts d'interconnexion/d'écoute ; l'ajout de processeurs ne produit donc pas toujours des gains de vitesse linéaires.
Exemple de multitraitement symétrique

Un exemple courant de multitraitement symétrique est un prise double x86 server (par exemple, un système avec deux processeurs Intel Xeon ou AMD EPYC) exécutant un seul Linux or Fenêtres server Par exemple, le système d'exploitation reconnaît plusieurs cœurs de processeur équivalents, répartit les threads sur l'ensemble d'entre eux, et tous les cœurs partagent un espace mémoire système cohérent.
Utilisation du multiprocesseur symétrique
Le SMP est utilisé lorsqu'on souhaite qu'un seul système exécute plusieurs tâches simultanément, que ce soit pour augmenter le débit total, maintenir une faible latence en cas de charge ou prendre en charge des applications parallèles. Ses principales applications sont les suivantes :
- Usage général servers. Gère de nombreux utilisateurs et services simultanés (web servers, applications servers, filet servers) en répartissant les requêtes indépendantes sur plusieurs processeurs/cœurs pour un débit plus élevé et une meilleure réactivité.
- Base de données les systèmes. Gère l'exécution de requêtes parallèles, les transactions simultanées et les tâches de maintenance en arrière-plan en planifiant les processus sur différents cœurs tout en partageant un seul tampon/cache en mémoire.
- Virtualisation et privé cloud hôtes Prend en charge de nombreux VMs ou des conteneurs sur une seule machine ; hyperviseur et les invités bénéficient de plusieurs cœurs pour la planification des vCPU, des threads d'E/S et de la surcharge d'isolation.
- Calcul haute performance et les charges de travail scientifiques. Accélère multithread simulations, méthodes numériques et traitement de données capables de diviser le travail en blocs parallèles au sein d'un seul nœud de mémoire partagée.
- Compilation, intégration continue et développement de logiciels les machines. Compile, effectue des tests et exécute des outils d'analyse plus rapidement en parallélisant les étapes de construction indépendantes, les suites de tests et l'analyse statique sur plusieurs cœurs.
- Production et traitement des médiasAméliore les performances d'encodage/transcodage vidéo, de rendu et de traitement d'images lorsque des images, des tuiles ou des effets peuvent être traités en parallèle.
- Analyses et l'ingénierie des donnéesAccélère l'ETL, les transformations en mémoire et le traitement par lots tâches pouvant exécuter plusieurs threads de travail partageant de grands ensembles de données dans RAM.
- Applications de l'entreprise et middleware. Prend en charge les JVM/.NET de grande taille temps d'exécution, les systèmes de messagerie et les maillages de services qui reposent sur de nombreux threads (GC, réseau, gestion des requêtes) et bénéficient d'une exécution parallèle.
Quels sont les avantages et les défis du multiprocesseur symétrique ?
Le multiprocesseur symétrique (SMP) améliore considérablement les performances en permettant à plusieurs processeurs ou cœurs de traiter des tâches en parallèle, mais son architecture à mémoire partagée engendre des limitations en termes de coordination et d'évolutivité. Les avantages et les inconvénients du SMP dépendent de la capacité à paralléliser efficacement une charge de travail et de la surcharge induite par la contention des ressources partagées telles que les verrous, les caches et la bande passante mémoire.
Avantages du multiprocesseur symétrique
Le SMP offre une solution simple pour améliorer les performances en exécutant davantage de tâches simultanément au sein d'une même image système, ce qui peut accroître le débit et la réactivité. Voici les principaux avantages :
- Débit plus élevé pour les charges de travail simultanéesPlusieurs processeurs/cœurs peuvent traiter des requêtes indépendantes en parallèle, augmentant ainsi le volume total de travail effectué par seconde pour des services tels que… applications web, Apiset les bases de données.
- Meilleure réactivité sous charge. Lorsqu'un thread se bloque (E/S, verrous, défauts de page), les autres processeurs peuvent continuer à exécuter le travail prêt, réduisant ainsi les délais de mise en file d'attente et permettant aux tâches interactives ou sensibles à la latence de s'exécuter plus rapidement.
- Communication efficace par mémoire partagée. Les threads partagent un même espace d'adressage, de sorte que le passage de données entre les travailleurs peut être aussi simple que l'écriture dans une mémoire partagée, souvent plus rapide que l'échange de messages entre des machines distinctes.
- Modèle d'application et de système plus simple que les systèmes distribuésUne instance de système d'exploitation, une système de fichiers L'utilisation d'un espace de noms et d'un modèle de processus unique simplifie le déploiement et les opérations par rapport à la coordination de plusieurs nœuds.
- Flexplanification et utilisation des ressourcesLe système d'exploitation peut répartir les threads entre les processeurs afin d'équilibrer la charge, de prioriser les tâches critiques et d'éviter de laisser des ressources inutilisées lorsque du travail est disponible.
- Mise à l'échelle rentable au sein d'une seule serverL'ajout de cœurs/sockets peut améliorer les performances sans la complexité supplémentaire de la coordination réseau, des installations de plusieurs systèmes d'exploitation ou de la cohérence distribuée.
- Parallélisme amélioré pour les piles logicielles modernes. De nombreuses plateformes (environnements d'exécution JVM/.NET, web) serversLes moteurs d'analyse (par exemple, les processeurs multicœurs) sont conçus pour exploiter plusieurs cœurs, ce qui permet à l'architecture SMP de s'aligner parfaitement avec les conceptions multithread courantes.
Défis du multitraitement symétrique
L'architecture SMP pose également des problèmes de mise à l'échelle et de fiabilité, car plusieurs processeurs partagent la même mémoire, les mêmes caches et les mêmes ressources du noyau, ce qui peut créer des goulots d'étranglement à mesure que le nombre de cœurs augmente. Voici les inconvénients :
- Accélération limitée pour les travaux non parallèlesSi une charge de travail comporte des sections séquentielles, les gains globaux plafonnent car ces parties s'exécutent toujours sur un seul cœur, et l'ajout de processeurs ne peut pas éliminer ce goulot d'étranglement.
- Surcharge liée aux conflits de verrouillage et à la synchronisation. Les structures de données partagées nécessitent des verrous ou des opérations atomiques ; une forte contention peut sérialiser l’exécution, augmenter le temps d’attente et réduire l’efficacité du processeur.
- Pénalités de cohérence du cache. Lorsque plusieurs cœurs écrivent fréquemment sur les mêmes lignes de cache, le trafic de cohérence peut provoquer un « rebond des lignes de cache », ralentissant les deux cœurs même s'ils effectuent un travail utile.
- Goulots d'étranglement de la bande passante de la mémoire partagée. Les processeurs peuvent dépasser les capacités du sous-système de mémoire ; à mesure que davantage de cœurs traitent des données, ils se disputent la bande passante de la RAM et le cache de dernier niveau, ce qui limite la mise à l’échelle.
- Effets NUMA dans les systèmes multi-socketsLe temps d'accès à la mémoire peut varier selon le socket ; si les threads s'exécutent loin de leurs données, la latence augmente et la bande passante diminue, sauf si le système d'exploitation et les applications gèrent correctement la localité.
- Débogage et correction plus complexes. Les problèmes de concurrence tels que les conditions de concurrence, les interblocages et les bogues subtils d'ordonnancement de la mémoire deviennent plus probables, en particulier dans les applications fortement multithreadées.
- Points chauds du noyau et des E/S. Certains chemins d'accès du système d'exploitation et la gestion des périphériques peuvent devenir des goulots d'étranglement centralisés (gestion des interruptions, pile réseau, verrous du système de fichiers), réduisant ainsi l'avantage des processeurs supplémentaires.
FAQ sur le multiprocesseur symétrique
Voici les réponses aux questions les plus fréquemment posées sur le multiprocesseur symétrique.
Quelle est la différence entre le multiprocesseur symétrique et le multiprocesseur asymétrique ?
Comparons plus en détail le multiprocesseur symétrique et asymétrique :
| Aspect | Multitraitement symétrique (SMP) | Multitraitement asymétrique (AMP) |
| Rôles du processeur | Tous les processeurs/cœurs sont équivalents ; n’importe quel processeur peut exécuter le système d’exploitation et les applications. | Les processeurs ont des rôles fixes ou spécialisés (par exemple, un « maître », d’autres « travailleurs » ou des fonctions dédiées). |
| Modèle de système d'exploitation | En général, une seule image système gère tous les processeurs comme un pool partagé. | Souvent, un système d'exploitation maître (ou cœur maître) contrôle la planification ; d'autres cœurs peuvent exécuter un code limité, un firmware ou des instances de système d'exploitation distinctes. |
| Planification | Le planificateur du système d'exploitation peut placer n'importe quel thread exécutable sur n'importe quel processeur. | Le travail est explicitement attribué à des processeurs spécifiques par le maître ou par conception ; moins flexible. |
| Gestion des interruptions et des E/S | Peut être distribué sur plusieurs processeurs (en fonction de la politique du système d'exploitation). | Généralement centralisé sur le processeur principal ou acheminé vers des processeurs spécifiques. |
| Modèle de mémoire | L'espace d'adressage mémoire partagé et cohérent est courant. | Peut être partagé, partitionné ou basé sur les messages ; souvent moins uniforme et plus spécifique à l'application. |
| Communication entre les processeurs | La synchronisation de mémoire partagée (verrous/opérations atomiques) est typique. | Utilise souvent une coordination explicite (dispatch maître, files d'attente, IPC), parfois plus simple mais moins générale. |
| Caractéristiques d'évolutivité | Bonne capacité d'évolution, mais limitée par la contention, la cohérence et la bande passante mémoire. | Peut s'adapter à des charges de travail spécialisées, mais flexLa capacité et la mise à l'échelle à usage général sont généralement inférieures. |
| Complexité pour les développeurs | Modèle de programmation « système unique » plus simple, mais les bugs de concurrence sont fréquents. | Peut simplifier certaines tâches en temps réel ou dédiées, mais augmente la complexité de la conception du système et nécessite un partitionnement explicite. |
| Cas d'utilisation typiques | Usage général servers, postes de travail, hôtes de virtualisation, bases de données. | Systèmes embarqués/temps réel, conceptions hétérogènes, multiprocesseurs hérités, systèmes avec cœurs de contrôle et de traitement dédiés. |
SMP vs. NUMA
Faisons maintenant de même pour SMP et NUMA :
| Aspect | SMP (Multitraitement symétrique) | NUMA (Accès mémoire non uniforme) |
| Ce qu'il décrit | Un modèle d'ordonnancement OS/CPU multiprocesseur où les CPU/cœurs sont traités comme des pairs. | Une architecture mémoire où la latence/bande passante d'accès à la mémoire dépend du processeur/socket auquel la mémoire est connectée. |
| Idée clé | « N'importe quel processeur peut exécuter n'importe quel thread » sous une seule image système d'exploitation. | « La mémoire locale est plus rapide que la mémoire distante » entre les sockets/nœuds. |
| Accès à la mémoire | Souvent présentée comme une mémoire partagée et cohérente avec (idéalement) un coût d'accès similaire. | Non uniforme : chaque processeur possède une mémoire locale ; l'accès à la mémoire d'un autre processeur est plus lent. |
| Matériel typique | Processeurs multicœurs et multi-sockets servers. | La plupart des multiprises modernes servers (et certains grands systèmes) sont NUMA |
| vue du système d'exploitation | Une seule image système ; le planificateur répartit les threads entre les processeurs. | Il s'agit toujours d'une seule image système, mais le système d'exploitation doit tenir compte de la localité de la mémoire lors de la planification et de l'allocation de celle-ci. |
| Sensibilité aux performances | Limité par la contention (verrous), le trafic de cohérence du cache et la bande passante de la mémoire. | Fortement affecté par l'emplacement des threads/données ; un placement « incorrect » peut ajouter de la latence et réduire le débit. |
| Problèmes de programmation | Exactitude de la concurrence et gestion des conflits. | Gestion de la concurrence et de la localité (épinglage, allocateurs compatibles NUMA, évitement des accès distants). |
| Lien familial | En pratique, le SMP ne nécessite pas une mémoire uniforme. | Les systèmes NUMA peuvent toujours fonctionner dans un style SMP (souvent appelé ccNUMA : NUMA cohérent avec le cache). |
| Meilleur pour | Parallélisme à usage général sur une seule machine. | Mise à l'échelle des machines multi-sockets en conservant les tâches de travail à proximité des données afin de réduire les pénalités liées à la mémoire distante. |
Le SMP a-t-il un impact sur les performances ?
Oui, le SMP influe directement sur les performances car il détermine la capacité d'un système à exécuter des tâches en parallèle sur plusieurs processeurs ou cœurs. Pour les charges de travail comportant de nombreuses tâches indépendantes ou des threads bien parallélisés (services web, bases de données, compilations, encodage multimédia), le SMP peut augmenter le débit et réduire la latence en répartissant la charge de travail entre les cœurs.
Cependant, le gain n'est pas automatiquement linéaire. Les performances peuvent stagner, voire se dégrader, lorsque plusieurs threads se disputent les mêmes verrous ou données partagées, lorsque le trafic de cohérence du cache augmente en raison d'écritures partagées fréquentes, ou lorsque le système atteint ses limites partagées, telles que la bande passante mémoire et la capacité du cache de dernier niveau. Sur les systèmes multi-sockets serversLes effets NUMA influencent encore davantage les résultats si les threads s'exécutent loin de la mémoire où résident leurs données, ce qui ajoute de la latence et réduit la bande passante effective.