15 votes

htop n'affiche pas le pourcentage correct du CPU, mais top le fait.

En cours d'exécution mencoder avec threads=4 (sur un cpu quad-core). J'ai remarqué que htop ne montre pas son vrai l'utilisation du CPU, mais top fait.

Il semble que htop ne fait état que d'un seul noyau dur . S'agit-il d'un bogue/limitation de htop ? Qu'est-ce qui se passe ici ?

Il n'y a pas d'autres entrées pour mencoder apparaissent dans ps o htop o top . Je suppose que 100% signifie qu'un 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 "System Monitor".

                  PID   %CPU   COMMAND                    
           "top"  1869   220   mencoder                 
          "htop"  1869    95   mencoder -noodml /media/...  
"System Monitor"  1869   220   mencoder

30voto

andybee Points 497

Comme vous l'avez dit vous-même, vous pouvez frapper H pour afficher les fils de discussion 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 a pour but de s'assurer que tous les processus et leurs threads reçoivent une part équitable du temps de calcul. Je ne vais pas m'étendre sur l'ordonnancement (c'est très compliqué). Mais en fin de compte, il existe un élément appelé exécuter la file d'attente . C'est là que toutes les instructions de tous les processus s'alignent pour attendre leur tour d'être exécutées.

Tout processus place ses "tâches" dans la file d'attente d'exécution, et lorsque le processeur est prêt, il les retire et les exécute. Lorsqu'un programme se met en veille, par exemple, il se retire de la file d'attente d'exécution et retourne à la "fin de la ligne" lorsqu'il est prêt à s'exécuter à nouveau.

Le tri sur cette file d'attente est lié à l'utilisation des processus. Priorité (également appelée "belle valeur" - c'est-à-dire qu'un processus est joli sur les ressources du système).

La longueur de la file d'attente détermine le Chargement du système. Une charge de 2,5 par exemple signifie qu'il y a 2,5 instructions pour chaque instruction que le CPU peut traiter en en temps réel .

Sous Linux, d'ailleurs, cette charge est calculée par intervalles de 10 ms (par défaut).

Passons maintenant aux valeurs en pourcentage de l'utilisation du CPU :

Imaginez que vous avez deux horloges, l'une s'appelle t et il représente en temps réel . Elle mesure une seconde pour chaque seconde. L'autre horloge que nous appelons c . Il ne s'exécute que s'il y a un traitement à effectuer. En d'autres termes, l'horloge ne fonctionne que lorsqu'un processus calcule quelque chose. C'est ce qu'on appelle aussi le temps CPU. Chaque processus du système "en a" un.

L'utilisation du processeur peut maintenant être calculée pour un seul processus :

U = c/t = 0.5s / 1s = 0.5

ou pour tous les processus :

alt text

Sur une machine à plusieurs cœurs, cela peut donner une valeur de 3,9 bien sûr, car l'unité centrale peut calculer quatre secondes de calcul par seconde, si elle est parfaitement utilisée.

Wikipedia fournit cet exemple :

Une application logicielle fonctionnant dans machine UNIX à 6 processeurs crée trois processus UNIX pour répondre aux besoins de l'utilisateur l'utilisateur. Chacun de ces trois processus crée deux threads. Le travail de l'application logicielle est uniformément réparti sur 6 threads indépendants d'exécution indépendants créés pour l'application l'application. Si aucune attente de ressources n'est impliquée, le temps total de l'unité centrale devrait être six fois supérieur au temps réel écoulé temps réel écoulé.

Voici un petit extrait de Python qui fait cela

>>> import time
>>> t = time.time()
>>> c = time.clock()
>>> # the next line will take a while to compute
>>> tuple(tuple(i**0.2 for i in range(600)) for i in range(6000))
>>> print (time.clock() / (time.time() - t)) * 100, "%"
66.9384021612 %

Dans un monde parfait, vous pourriez 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, les inefficacités d'ordonnancement, etc.)

Contrairement à charge ces calculs seront toujours donnent une valeur comprise entre 0 et le nombre de processeurs, c'est-à-dire entre 0 et 1 ou 0 à 100%. Il n'y a maintenant aucun moyen de faire la différence entre une machine qui exécute trois tâches, utilisant 100% du cpu, et une machine qui exécute un million de tâches, n'effectuant pratiquement aucun travail sur aucune d'entre elles, également à 100%. Si vous essayez, par exemple, d'équilibrer un ensemble de processus sur plusieurs ordinateurs, l'utilisation du processeur est pratiquement inutile. La charge est ce que vous voulez ici.

En réalité, il y a plus d'une horloge de traitement. Il y en a une pour l'attente des E/S par exemple. Vous pouvez donc également calculer l'utilisation des ressources d'E/S.

Cela n'a peut-être pas été utile par rapport à la question initiale, mais j'espère que c'est intéressant. :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X