Question

J'ai du mal à trouver ces informations en ligne, je suis à l'université lundi afin que je puisse utiliser la bibliothèque alors mais mieux c'est mieux. Lorsqu'un système dispose de processeurs multicore, chaque processeur prend-il un fil du premier processus dans la file d'attente prête ou en prend-il un du premier et un de la seconde? Pour vérifier également, les threads seront envoyés et récupérés à partir des multicores simultanément par le système d'exploitation? Si quelqu'un pouvait me diriger dans la bonne direction en termes de ressources, ce serait génial!

Était-ce utile?

La solution

L'essentiel est d'apprécier ce qu'est réellement l'architecture de la machine.

Un "noyau" est un CPU avec un cache avec une connexion à la mémoire système. La plupart des architectures de machines sont multi-traitements symétriques, ce qui signifie que la mémoire du système est également accessible par tous les noyaux du système.

La plupart des systèmes d'exploitation exécutent un fil de planificateur sur chaque noyau (Linux fait). Le planificateur a une liste de threads dont il est responsable, et il les exécutera au mieux de ses capacités au cœur qu'elle contrôle. Les règles qu'il utilise pour choisir le thread à exécuter sera soit Round Robin, soit basé sur la priorité, etc.; c'est-à-dire toutes les règles de planification normales. Jusqu'à présent, c'est comme un planificateur que vous trouverez dans un seul ordinateur de noyau. Dans une certaine mesure, chaque planificateur est indépendant de tous les autres planificateurs.

Cependant, c'est un environnement SMP, ce qui signifie qu'il n'a pas vraiment d'importance quel noyau exécute quel thread. En effet, tous les cœurs peuvent voir toute la mémoire, et tous les code et données pour tous les threads de l'ensemble du système sont stockés dans cette seule mémoire.

Les planificateurs parlent donc entre eux pour s'entraider. Les planificateurs avec trop de threads à exécuter peuvent passer un fil à un planificateur dont le noyau est utilisé. Ils équilibrent la charge dans la machine. "Passer un thread over" signifie copier la structure de données qui décrit le thread (ID de thread, quelles données, quel code).

C'est donc tout. Comme la seule communication entre les cœurs est via la mémoire, tout dépend d'un système de sémaphore d'exclusion mutuel efficace disponible, ce que le matériel doit permettre.

La difficulté

J'ai donc peint une image très simple, mais en pratique, la mémoire n'est pas parfaitement symétrique. SMP de nos jours est synthétisé en plus de Hypertransport et QPI.

Il est passé depuis longtemps les jours où les noyaux avaient vraiment un accès égal à la mémoire système au niveau électronique. À la couche la plus basse de leur architecture, AMD est purement Numa, et presque.

De nos jours, un noyau doit envoyer une demande à d'autres cœurs sur une liaison série haute vitesse (hypertransport ou qpi) leur demandant d'envoyer des données qu'ils ont dans leur mémoire attachée. Intel et AMD ont fait du bon travail pour le faire ressembler de manière convaincante à SMP dans le cas général, mais ce n'est pas parfait. Les données dans la mémoire attachées à un autre noyau prennent plus de temps pour se procurer. C'est incroyablement complexe - les noyaux sont maintenant des nœuds sur un réseau - mais c'est ce qu'ils ont dû faire pour obtenir des performances améliorées.

Les planificateurs prennent donc en compte cela lors du choix du noyau qui devrait exécuter quel thread. Ils essaieront de placer un thread sur un noyau qui est le plus proche de la mémoire tenant les données auxquelles le thread a accès.

L'avenir, encore une fois

Si l'écosystème logiciel du monde pouvait être sevré de SMP, les gars du matériel pourraient économiser beaucoup d'espace sur le silicium, et nous aurions des systèmes plus rapides. Cela a déjà été fait; Les transputateurs étaient une bonne tentative d'une architecture strictement NUMA.

NUMA et la communication des processus séquentiels faciliteraient aujourd'hui beaucoup plus facilement les logiciels multi-threads qui évolue très facilement et s'exécutent plus efficacement que les gémottes de mémoire partagées SMP d'aujourd'hui.

SMP était en fait une manière bon marché et méchante de réunir plusieurs cœurs, et le coût en termes de difficultés de développement logiciel et de matériel inefficace a été très élevé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top