Qu'est-ce que l'heure de l'horloge murale, l'heure du processeur utilisateur et l'heure du processeur système sous UNIX?


144

Je peux faire une supposition en fonction des noms, mais que sont spécifiquement wall-clock-time, user-cpu-time et system-cpu-time sous UNIX?

Le temps utilisateur-cpu est-il le temps passé à exécuter le code utilisateur tandis que le temps kernel-cpu est le temps passé dans le noyau en raison du besoin d'opérations privilégiées (comme IO sur disque)?

Dans quelle unité de temps cette mesure est-elle.

Et le temps d'horloge murale est-il vraiment le nombre de secondes que le processus a passé sur le processeur ou le nom est-il simplement trompeur?


Réponses:


143

L'heure de l'horloge murale est l'heure qu'une horloge sur le mur (ou un chronomètre en main) mesurerait comme s'étant écoulée entre le début du processus et «maintenant».

Le temps utilisateur-cpu et le temps système-cpu sont à peu près comme vous l'avez dit - le temps passé dans le code utilisateur et le temps passé dans le code du noyau.

Les unités sont des secondes (et des sous-secondes, qui peuvent être des microsecondes ou des nanosecondes).

L'heure de l'horloge murale n'est pas le nombre de secondes que le processus a passé sur le processeur; c'est le temps écoulé, y compris le temps passé à attendre son allumage du processeur (pendant que d'autres processus s'exécutent).


16
Cela signifie-t-il que l'heure de l'horloge murale sera toujours supérieure à l'heure du processeur?
Pacerier

36
@Pacerier: sur une machine monocœur, oui, mais les machines multicœurs et les programmes multi-threads peuvent utiliser plus d'une seconde CPU par seconde écoulée.
Jonathan Leffler

@JonathanLeffler merci pour la réponse, je voulais obtenir le nombre de nanosecondes qui s'est écoulé mais calculer le temps CPU à l'aide de la formule CPUtime = #clock_cycles / clock_ratene peut pas être le même que calculer le temps écoulé. Savez-vous si je peux obtenir le temps écoulé à partir du temps CPU?
Bionix1441

2
@ Bionix1441: Vous ne pouvez pas dériver le temps écoulé du temps CPU pour plusieurs raisons. Premièrement, un processus peut être inactif, ne consommant pas de temps CPU, pendant des périodes arbitraires (par exemple, un processus démon attendant qu'un client se connecte sur le réseau), il peut donc ne rien faire pendant des jours à la fois. . Deuxièmement, s'il est en cours d'exécution, il peut avoir plusieurs threads, et s'il a, par exemple, 4 threads et qu'il y a 4 cœurs ou plus sur le système, il peut accumuler 4 secondes CPU d'effort dépensé par seconde de temps écoulé. Ceux-ci montrent qu'il n'y a pas de formule simple (ou même complexe) que vous pourriez utiliser.
Jonathan Leffler

1
@Catbuilts: Savez-vous que le noyau Unix fonctionne séparément des programmes utilisateur. Lorsque votre programme effectue un appel système (par exemple, read()ou getpid()), le noyau exécute le code au nom de votre programme. Le noyau gère également le multitâche préventif pour que les autres programmes puissent s'exécuter à leur tour, et effectue des travaux généraux pour maintenir le bon fonctionnement du système. Ce code est exécuté en «code noyau» (également en «mode noyau»). Ceci est distinct du code que vous avez écrit et des bibliothèques utilisateur (y compris la bibliothèque système C) que vous exécutez.
Jonathan Leffler

36

Heure de l'horloge murale: temps écoulé en fonction de l'horloge interne de l'ordinateur, qui doit correspondre à l'heure du monde extérieur. Cela n'a rien à voir avec l'utilisation du processeur; il est donné pour référence.

Temps CPU utilisateur et temps système: exactement ce que vous pensez. Les appels système, qui incluent les appels d'E / S tels que read,write etc. sont exécutées en sautant dans le code du noyau et de l' exécution que.

Si le temps d'horloge murale <temps CPU, vous exécutez un programme en parallèle. Si l'heure de l'horloge murale> temps CPU, vous attendez un disque, un réseau ou d'autres périphériques.

Tous sont mesurés en secondes, selon le SI .


7

L'heure de l'horloge murale est exactement ce qu'elle dit, le temps écoulé tel que mesuré par l'horloge sur votre mur (ou votre montre-bracelet)

Le temps CPU de l'utilisateur est le temps passé dans le "terrain utilisateur", c'est-à-dire le temps passé sur les processus non liés au noyau

Le temps du processeur système est le temps passé dans le noyau, généralement le temps passé à traiter les appels système.


7
time [WHAT-EVER-COMMAND]

real    7m2.444s
user    76m14.607s
sys 2m29.432s

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24

horloge réelle ou murale

réel 7m2.444s

Sur un système avec un processeur à 24 cœurs, ce cmd / processus a pris plus de 7 minutes. Cela en utilisant le plus de parallélisme possible avec tous les cœurs donnés.

utilisateur

utilisateur 76m14.607s

Le cmd / process a utilisé autant de temps cpu. En d'autres termes, sur une machine avec un processeur monocœur, le réel et l'utilisateur seront presque égaux, donc la même commande prendra ~ 76 minutes pour se terminer.

sys

sys 2m29.432s

Il s'agit du temps nécessaire au noyau pour exécuter toutes les opérations de base / au niveau du système pour exécuter cette cmd, y compris le changement de contexte, l'allocation de ressources, etc.

Remarque: l'exemple suppose que votre commande utilise le parallélisme / les threads.

Page de manuel détaillée: https://linux.die.net/man/1/time


Compte tenu des heures que vous avez publiées, n'est-ce pas à peu près la moitié du parallélisme effectué? (Je fais juste (user + sys) / realpour représenter ça.
dtc
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.