Cela dépend beaucoup du type d'application que vous exécutez. Si vous avez des applications qui sont des appels système WRT très faciles à déclencher, vous pouvez vous attendre à de grandes quantités de changements de contexte. Si la plupart de vos applications sont inactives et ne se réveillent que lorsque des problèmes se produisent sur un socket, vous pouvez vous attendre à des taux de commutation de contexte faibles.
Appels système
Les appels système provoquent des changements de contexte par leur nature même. Lorsqu'un processus effectue un appel système, il demande au noyau de prendre le relais de son heure actuelle et à la mémoire d'effectuer des tâches pour lesquelles le processus n'a pas le privilège de le faire, et de revenir au même endroit une fois terminé.
Lorsque nous regardons la définition de l'appel système write (2) de Linux, cela devient très clair:
PRÉNOM
write - écrit dans un descripteur de fichier
SYNOPSIS
#comprendre
ssize_t write (int fd, const void * buf, size_t count);
LA DESCRIPTION
write () écrit jusqu'à compter le nombre d'octets du tampon indiqué par buf dans le fichier
référencé par le descripteur de fichier fd. [..]
Valeur de retour
En cas de succès, le nombre d'octets écrits est renvoyé (zéro indique
rien n'a été écrit). En cas d'erreur, -1 est renvoyé et errno contient le code d'erreur
de manière appropriée.
[..]
En gros, cela indique au noyau de reprendre l’opération du processus, d’accéder aux count
octets, en partant de l’adresse mémoire indiquée par *buf
le descripteur fd
de fichier du processus en cours, puis de revenir au processus et de lui indiquer comment il s’est passé.
Un bon exemple à cet égard est le serveur de jeu dédié aux jeux basés sur Valve Source, hlds . http://nopaste.narf.at/f1b22dbc9 montre une seconde d'appels système effectués par une seule instance d'un serveur de jeu sur laquelle aucun joueur ne se trouve. Ce processus prend environ 3% de temps CPU sur un Xeon X3220 (2.4 Ghz), juste pour vous donner une idée de son coût.
Multi-tâches
Une autre source de changement de contexte peut être constituée par les processus qui ne font pas d'appels système, mais qui doivent être déplacés d'un processeur donné pour laisser la place à d'autres processus.
Cpuburn est une bonne façon de visualiser . cpuburn ne fait pas de appels système lui-même, il itère simplement sur sa propre mémoire, il ne devrait donc pas causer de changement de contexte.
Prenez un ordinateur inactif, démarrez vmstat, puis lancez burnMMX (ou tout autre test du package cpuburn) pour chaque cœur de processeur du système. Vous devriez avoir une utilisation complète du système à ce moment-là, mais pratiquement aucun changement de contexte accru. Ensuite, essayez de démarrer quelques processus supplémentaires. Vous verrez que le taux de commutation de contexte augmente à mesure que les processus commencent à concurrencer les cœurs de processeur. La quantité de commutation dépend du ratio processus / cœur et de la résolution multitâche de votre noyau.
Lectures complémentaires
linfo.org a un bon article sur le changement de contexte et les appels système . Wikipedia a des informations génériques et une belle collection de liens sur les appels système.