10 votes

Quel est le coût des commutations de contexte du noyau par rapport aux commutations de contexte de l'espace utilisateur ?

Selon C10k y cet article En effet, le débit des serveurs à 1 thread par connexion se dégrade au fur et à mesure que les clients se connectent et que les threads sont créés. Selon ces deux sources, cela est dû au fait que plus il y a de threads, plus le temps passé à changer de contexte est important par rapport au travail réel effectué par ces threads. Les serveurs Evented ne semblent pas souffrir autant de la dégradation des performances lorsque le nombre de connexions est élevé.

Cependant, les serveurs événementiels effectuent également des changements de contexte entre les clients, ils le font simplement dans l'espace utilisateur.

  • Pourquoi ces commutations de contexte en espace utilisateur sont-elles plus rapides que les commutations de contexte des threads du noyau ?
  • Que fait exactement un commutateur de contexte du noyau qui est tellement plus cher ?
  • Quel est le coût exact d'un commutateur de contexte du noyau ? Combien de temps cela prend-il ?
  • Le temps de changement de contexte du noyau dépend-il du nombre de threads ?

Je suis surtout intéressé par la façon dont le noyau Linux gère la commutation de contexte, mais les informations sur les autres systèmes d'exploitation sont également les bienvenues.

5voto

Ringding Points 2400
  • Pourquoi ces commutations de contexte en espace utilisateur sont-elles plus rapides que les commutations de contexte des threads du noyau ?

Parce que le CPU n'a pas besoin de passer en mode noyau et de revenir en mode utilisateur.

  • Que fait exactement un commutateur de contexte du noyau qui est tellement plus cher ?

Principalement le passage en mode noyau. IIRC, les tables de pages sont les mêmes en mode noyau et en mode utilisateur sous Linux, donc au moins il n'y a pas de pénalité d'invalidation TLB.

  • Quel est le coût exact d'un changement de contexte du noyau ? Combien de temps cela prend-il ?

Doit être mesuré et peut varier d'une machine à l'autre. Je pense qu'un ordinateur de bureau/serveur typique de nos jours peut effectuer quelques centaines de milliers de changements de contexte par seconde, probablement quelques millions.

  • Le temps de changement de contexte du noyau dépend-il du nombre de threads ?

Cela dépend de la façon dont l'ordonnanceur du noyau gère cela. D'après ce que je sais, sous Linux, c'est assez efficace, même avec un grand nombre de threads, mais plus de threads signifie plus d'utilisation de la mémoire, plus de pression sur le cache et donc probablement moins de performances. Je m'attends également à une certaine surcharge liée à la gestion de milliers de sockets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X