Lors de l'exécution mencoder
avec des threads = 4 (sur un processeur quad-core). J'ai remarqué que htop
cela ne montre pas sa véritable utilisation du processeur, mais le top
fait.
Il semble que htop ne rapporte qu'un seul noyau . Est-ce un bug / limitation de htop ? Qu'est-ce qui se passe ici?
Il n'y a aucune autre entrée pour mencoder apparaître dans ps
ou htop
ou top
. Je suppose que 100% signifie que 1 cœur est au maximum, mais même cela me semble étrange; qu'en est-il des autres cœurs?
Mise à jour: ajout de la sortie "Moniteur système"
PID %CPU COMMAND
"top" 1869 220 mencoder
"htop" 1869 95 mencoder -noodml /media/...
"System Monitor" 1869 220 mencoder
Réponses:
Comme vous l'avez dit vous-même, vous pouvez appuyer sur Hpour afficher les threads des utilisateurs.
Juste pour référence future (et pour le plaisir), calculons l'utilisation du CPU!
Un peu d'histoire:
Dans un système d'exploitation moderne, il y a un planificateur. Il vise à garantir que tous les processus et leurs threads obtiennent une part équitable du temps de calcul. Je n'entrerai pas trop dans la programmation (c'est vraiment compliqué). Mais à la fin, il y a quelque chose appelé une file d'attente d'exécution . C'est là que toutes les instructions de tous les processus s'alignent pour attendre que leur tour soit exécuté.
Tout processus place ses "tâches" dans la file d'attente d'exécution, et une fois que le processeur est prêt, il les supprime et les exécute. Lorsqu'un programme se met en veille, par exemple, il se supprime de la file d'attente d'exécution et revient à la «fin de la ligne» une fois qu'il est prêt à s'exécuter à nouveau.
Le tri dans cette file d'attente a à voir avec la priorité des processus (également appelée "valeur intéressante" - c'est-à-dire qu'un processus est agréable à propos des ressources système).
La longueur de la file d'attente détermine la charge du système. Par exemple, une charge de 2,5 signifie qu'il y a 2,5 instructions pour chaque instruction que le processeur peut traiter en temps réel .
Sur Linux, d'ailleurs, cette charge est calculée à 10 ms d'intervalle (par défaut).
Passons maintenant aux valeurs de pourcentage d'utilisation du processeur:
Imaginez que vous avez deux horloges, une est appelée
t
et représente le temps réel . Il mesure une seconde pour chaque seconde. L'autre horloge que nous appelonsc
. Il ne s'exécute que s'il y a du traitement à faire. Cela signifie que ce n'est que lorsqu'un processus calcule quelque chose que l'horloge fonctionne. Ceci est également appelé temps CPU. Chaque processus du système «en a» un.L'utilisation du processeur peut désormais être calculée pour un seul processus:
ou pour tous les processus:
Sur une machine multi-cœurs, cela peut entraîner une valeur de 3,9 bien sûr, car le processeur peut calculer quatre secondes de calcul chaque seconde, s'il est utilisé parfaitement.
Wikipedia fournit cet exemple:
Voici un petit extrait de python qui fait cela
Dans un monde parfait, vous pouvez en déduire que la charge du système est de 100 à 66,93 = 33,1%. (Mais en réalité, ce serait faux à cause de choses complexes comme l'attente des E / S, l'inefficacité de la planification, etc.)
Contrairement à la charge , ces calculs aboutiront toujours à une valeur comprise entre 0 et le nombre de processeurs, soit entre 0 et 1 ou 0 à 100%. Il n'y a désormais aucun moyen de faire la différence entre une machine qui exécute trois tâches, en utilisant 100% de processeur, et une machine qui exécute un million de tâches, obtenant à peine le travail effectué sur l'une d'entre elles, également à 100%. Si vous essayez, par exemple, d'équilibrer un tas de processus sur de nombreux ordinateurs, l'utilisation du processeur est presque inutile. La charge est ce que vous voulez là-bas.
Maintenant, en réalité, il y a plus d'une de ces horloges de temps de traitement. Il y en a un pour attendre les E / S par exemple. Vous pouvez donc également calculer l'utilisation des ressources d'E / S.
Cela n'a peut-être pas été utile concernant la question initiale, mais j'espère que c'est intéressant. :)
la source