web-dev-qa-db-fra.com

Linux "top" command: Que sommes-nous, sy, ni, id, wa, hi, si et st (pour l'utilisation du processeur)?

Lorsque j'émets top sous Linux, j'obtiens un résultat similaire à ceci:

Screenshot of top

L'une des lignes contient des informations sur l'utilisation du processeur représentées comme ceci:

Cpu(s): 87.3%us,  1.2%sy,  0.0%ni, 27.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Bien que je connaisse les définitions de chacun d'eux (loin ci-dessous), je ne comprends pas ce que ces tâches signifient exactement.

  • hi - que signifie la maintenance des interruptions matérielles?
  • si - que signifient les interruptions des logiciels de maintenance?
  • st - ils disent que c'est "le temps CPU en attente involontaire par le CPU virtuel pendant que l'hyperviseur dessert un autre processeur (ou)% de temps CPU volé sur une machine virtuelle".

Mais qu'est-ce que cela signifie réellement? Quelqu'un peut-il être plus clair?

J'ai répertorié tous les us, sy, ni, etc., car cela pourrait aider les autres à rechercher la même chose. Ces informations ne figurent pas dans les pages de manuel.

us: user cpu time (or) % CPU time spent in user space
sy: system cpu time (or) % CPU time spent in kernel space
ni: user Nice cpu time (or) % CPU time spent on low priority processes
id: idle cpu time (or) % CPU time spent idle
wa: io wait cpu time (or) % CPU time spent in wait (on disk)
hi: hardware irq (or) % CPU time spent servicing/handling hardware interrupts
si: software irq (or) % CPU time spent servicing/handling software interrupts
st: steal time - - % CPU time in involuntary wait by virtual cpu while hypervisor is servicing another processor (or) % CPU time stolen from a virtual machine
206
its_me

hi est le temps consacré au traitement des interruptions matérielles. Les interruptions matérielles sont générées par des périphériques matériels (cartes réseau, contrôleur de clavier, minuterie externe, capteurs matériels, ...) lorsqu'ils ont besoin de signaler quelque chose au CPU (des données sont arrivées, par exemple).

Étant donné que ceux-ci peuvent se produire très fréquemment et qu'ils bloquent essentiellement le processeur actuel pendant leur fonctionnement, les gestionnaires d'interruption matérielle du noyau sont écrits pour être aussi rapides et simples que possible.

Si un traitement long ou complexe doit être effectué, ces tâches sont différées à l'aide d'un appel de mécanisme softirqs. Celles-ci sont planifiées indépendamment, peuvent s'exécuter sur n'importe quel processeur, peuvent même s'exécuter simultanément (rien de cela n'est vrai des gestionnaires d'interruptions matérielles).

La partie sur les IRQ durs bloquant le CPU actuel et la partie sur softirqs pouvant s'exécuter n'importe où ne sont pas exactement correctes, il peut y avoir des limitations et certains IRQ durs peuvent en interrompre d'autres.

Par exemple, une interruption matérielle "données reçues" d'une carte réseau pourrait simplement stocker les informations "la carte ethX doit être réparée" quelque part et planifier un softirq. Le softirq serait la chose qui déclenche le routage du paquet réel.

si représente le temps passé dans ces softirqs.

Une bonne lecture sur le mécanisme softirq (avec un peu d'histoire aussi) est celle de Matthew Wilcox Je le ferai plus tard: Softirqs, Tasklets, Bottom Demi, Task Queues, Work Queues and Timers = (PDF, 64 Ko).

st, "temps de vol", n'est pertinent que dans les environnements virtualisés. Il représente le moment où le vrai CPU n'était pas disponible pour la machine virtuelle actuelle - il a été "volé" à cela VM par l'hyperviseur (soit pour exécuter une autre VM, soit pour ses propres besoins).

Le document comptabilité du temps processeur d'IBM contient plus d'informations sur le temps de vol et la comptabilité du processeur dans les environnements virtualisés. (Il est destiné au matériel de type zSeries, mais l'idée générale est la même pour la plupart des plates-formes.)

96
Mat
  • propos de nous - Temps passé dans l'espace utilisateur
  • sy - Temps passé dans l'espace noyau
  • ni - Temps passé à exécuter des processus utilisateur niced (priorité définie par l'utilisateur)
  • id - Temps passé dans des opérations inactives
  • wa - Temps passé à attendre sur les périphériques IO (par exemple disque))
  • hi - Temps consacré à la gestion des routines d'interruption matérielle. (Chaque fois qu'une unité périphérique veut attirer l'attention du CPU, elle tire littéralement une ligne, pour signaler au CPU de la réparer)
  • si - Temps passé à gérer les routines d'interruption du logiciel. (un morceau de code, appelle une routine d'interruption ...)
  • st - Temps consacré aux attentes involontaires par le processeur virtuel pendant que l'hyperviseur dessert un autre processeur (volé sur une machine virtuelle)
20
Simon Rigét

La valeur "st" peut être simplement expliquée en utilisant une instance T2.micro EC2 d'AWS.

Dans la documentation AWS vous pouvez lire que vous n'obtenez qu'une performance de base de 10% par VCPU. Cela signifie que si vous avez un processus qui consommerait beaucoup de temps processeur, la valeur "st" restera autour de 90 car vous n'êtes autorisé à utiliser que 10% du VCPU. La somme des autres valeurs restera autour de 10.

AWS utilise donc l'hyperviseur pour vous autoriser uniquement à accéder à une certaine quantité de puissance de calcul. Cela vous ralentit par intention, car vous n'utilisez qu'un type d'instance de bas niveau.

J'espère que cela rend les choses un peu plus faciles à comprendre.

2
draufunddran