“htop” n’indique pas le pourcentage de CPU correct, mais “top”

Tout en exécutant mencoder avec threads = 4 (sur un processeur quad-core). J’ai remarqué que htop ne montre pas sa véritable utilisation du processeur, mais top fait.

Il semble que htop ne rapporte qu’un seul kernel . Est-ce un bug / limitation de htop ? Qu’est-ce qui se passe ici?

Il n’y a pas d’autres entrées pour mencoder affichées dans ps htop ou top . Je suppose que 100% signifie que 1 kernel est au maximum, mais même cela me semble étrange; Qu’en est-il des autres kernelx?

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 

Comme vous l’avez dit vous-même, vous pouvez appuyer sur H pour afficher les discussions des utilisateurs.

Juste pour référence future (et pour le plaisir), calculons l’utilisation de la CPU!

Un peu de fond:

Dans un système d’exploitation moderne, il existe un planificateur. Il vise à garantir que tous les processus et leurs threads disposent d’une part équitable du temps de calcul. Je ne vais pas trop m’occuper de la planification (c’est vraiment compliqué). Mais à la fin, il y a ce qu’on appelle une queue . C’est là que toutes les instructions de tous les processus s’alignent pour attendre leur tour d’être exécutés.

Tout processus place ses “tâches” dans la queue 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 retire de la queue d’exécution et revient à la “fin de la ligne” une fois qu’il est prêt à être exécuté à nouveau.

Le sorting de cette queue a à voir avec la priorité des processus (également appelée “valeur intéressante”, c.-à-d. Qu’un processus est intéressant pour les ressources système).

La longueur de la queue 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 la CPU peut traiter en temps réel .

Au fait, sous Linux, cette charge est calculée par intervalles de 10 ms (par défaut).

Passons maintenant aux valeurs de pourcentage d’utilisation du processeur:

Imaginez que vous avez deux horloges, l’une s’appelle t et elle représente le temps réel . Il mesure une seconde pour chaque seconde. L’autre horloge que nous appelons c . Il ne fonctionne que s’il y a un traitement à faire. Cela signifie que l’horloge n’est exécutée que lorsqu’un processus calcule quelque chose. Ceci est aussi appelé 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:

texte alternatif

Sur une machine multi-core, cela peut bien sûr donner une valeur de 3,9, car le processeur peut calculer quatre secondes de calcul par seconde, s’il est utilisé parfaitement.

Wikipedia fournit cet exemple:

Une application logicielle s’exécutant sur une machine UNIX à 6 CPU crée trois processus UNIX pour répondre aux besoins de l’utilisateur. Chacun de ces trois processus crée deux threads. Le travail de l’application logicielle est réparti uniformément sur 6 threads d’exécution indépendants créés pour l’application. Si aucune attente de ressources n’est impliquée, le temps processeur total devrait être de six fois le 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é, cela serait faux à cause de choses complexes comme l’attente d’E / S, les inefficacités de planification, etc.)

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

Maintenant, en réalité, il y a plus d’une de ces horloges de temps de traitement. Il y en a un pour l’attente d’E / S par exemple. Ainsi, vous pouvez également calculer l’utilisation des ressources d’E / S.

Cela n’a peut-être pas été utile en ce qui concerne la question initiale, mais j’espère que c’est intéressant. 🙂