2010-01-12 5 views
2

Pour un ordinateur multicœur exécutant Linux 2.6.x, que se passe-t-il lorsqu'un thread effectue un appel système? Est-ce qu'il tombe dans le noyau seulement sur le noyau sur lequel tourne le thread, ou est-il déposé dans le noyau sur tous les noyaux (désolé si c'est une question de débutant).Est-ce que Linux tombe dans le noyau sur tous les cœurs?

Est-ce comportement (selon la valeur correcte) les mêmes interruptions lors de la réception en général? Si non, quelles sont les différences?

Répondre

5

Seul le fil qui fait le syscall entre dans le noyau. Toute la planification sous Linux est faite sur la granularité des threads. En ce qui concerne les interruptions, elles sont routées vers un seul cœur, c'est-à-dire qu'un seul processeur est interrompu pour chaque événement matériel donné. Les interruptions peuvent ensuite être affectées manuellement à des cœurs spécifiques. Ceci est fait avec un masque dans /proc/irq/IRQ-NUMBER/smp_affinity. Vous pouvez voir quelles unités centrales reçoivent quelles interruptions matérielles dans /proc/interrupts.

0

Ony une base gère un appel système, et un seul noyau gère une interruption.

Je n'ai aucune référence de la main pour exactement comment les interruptions sont acheminés - Intel's System Programming Guide serait peut-être utile ici.

Mais, imaginez si tous les cœurs ont été interrompus par chaque appel système ou d'interruption. Linux est conçu pour évoluer vers de nombreux cœurs. Cela tuerait cette évolutivité - sur un serveur massif, chaque E/S de disque, interruption de minuterie, etc., bloquerait efficacement chaque cœur du système, les empêchant de faire un travail utile.

Questions connexes