Salut suzerains Linux / UNIX,
L'un de vous a-t-il une règle générale quant au nombre de commutateurs de contexte (par cœur de processeur) qui est Normal sur un serveur Linux?
Mon collège ici l'a évoqué, et il voit 16K sur une x86_64
machine à 8 cœurs .
Voici quelques statistiques de sarface ces derniers jours ...
alt text http://src.autonomy.net.au/imagebin/81895e338fae67d3d205c09db44a81e6-Picture_10.png
Et pour voir les statistiques de création de processus, voici une vue logarithmique du même graphique ...
alt text http://src.autonomy.net.au/imagebin/7481f7e52bead4effc90248fc23c72fe-Picture_11.png
Et les 8 noyaux s'ennuient à mort ...
alt text http://src.autonomy.net.au/imagebin/0e94326652e977fd74edcd840f94200f-Picture_12.png
CS vs IOwait (échelle x10000)
alt text http://src.autonomy.net.au/imagebin/a52a2a8a120394849c0da4045933e306-Picture_13.png
Plus d'informations inutiles au cas où quelqu'un le demanderait.
- Le stockage sur lequel le serveur fonctionne est un réseau SAN de 0,5 To via FC.
- Il y a 8 Go de RAM, principalement du cache - pas de permutation.
la source
Réponses:
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:
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 descripteurfd
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.
la source
System calls cause context switches by their very own nature
semble fausse. Les appels système provoquent un changement de mode, comme indiqué par linfo.org/context_switch.htmlMon serveur Web moyennement chargé se situe entre 100 et 150 commutateurs une seconde la plupart du temps, avec des pics atteignant des milliers.
Les taux élevés de commutation de contexte ne sont pas un problème en soi, mais ils peuvent indiquer un problème plus grave.
edit: les commutateurs de contexte sont un symptôme, pas une cause. Qu'essayez-vous d'exécuter sur le serveur? Si vous avez un ordinateur multiprocesseur, vous pouvez essayer de définir l'affinité cpu pour les processus de votre serveur principal.
Sinon, si vous utilisez X, essayez de passer en mode console.
modifier à nouveau: à 16k cs par seconde, chaque unité centrale calcule une moyenne de deux commutateurs par milliseconde, soit un demi à un sixième du temps normal. Pourrait-il exécuter beaucoup de threads liés IO?
modifier à nouveau les graphiques de post: semble certainement lié à IO. le système passe-t-il le plus clair de son temps dans SYS lorsque les changements de contexte sont élevés?
éditer une fois de plus: High iowait et system dans ce dernier graphe - éclipsant complètement l'espace utilisateur. Vous avez des problèmes d'E / S.
Quelle carte FC utilisez-vous?
edit: hmmm. avez-vous une chance d'obtenir des points de repère sur votre accès SAN avec Bonnie ++ ou dbench pendant le temps mort? Je serais intéressé de voir si ils ont des résultats similaires.
edit: J'y ai pensé pendant le week-end et j'ai vu des modèles d'utilisation similaires lorsque Bonnie exécute la passe "écrire un octet à la fois". Cela peut expliquer le grand nombre de commutations en cours, chaque écriture nécessitant un appel système distinct.
la source
Je suis plus enclin à s'inquiéter du taux d'occupation du processeur de l'état du système. Si elle est proche de 10% ou plus, cela signifie que votre système d’exploitation passe trop de temps à changer de contexte. Même si certains processus sont transférés sur une autre machine beaucoup plus lentement, ils méritent de le faire.
la source
Des choses comme celle-ci sont la raison pour laquelle vous devriez essayer de conserver des lignes de base de performances pour vos serveurs. De cette façon, vous pouvez comparer des choses que vous remarquez tout à coup avec des choses que vous avez enregistrées dans le passé.
Cela dit, j'ai des serveurs en cours d'exécution (principalement des serveurs Oracle très peu occupés), qui sont stables autour de 2k avec quelques pics de 4k. Pour mes serveurs, c'est normal, pour les serveurs d'autres personnes, il peut être trop bas ou trop haut.
Jusqu'où pouvez-vous remonter dans vos données?
Quel type d'informations de processeur pouvez-vous nous donner?
la source
Il n'y a pas de règle de base. Un commutateur de contexte est simplement le processeur qui passe du traitement d'un thread à un autre. Si vous exécutez beaucoup de processus (ou quelques processus hautement threadés), vous verrez plus de commutateurs. Heureusement, vous n'avez pas à vous soucier du nombre de changements de contexte, le coût est faible et plus ou moins inévitable.
la source