Que signifient' real',' user 'et' sys ' dans la sortie de time(1)?

$ time foo
real        0m0.003s
user        0m0.000s
sys         0m0.004s
$

que signifient' real',' user 'et' sys ' dans la sortie du temps?

lequel est significatif lors de l'analyse comparative de mon application?

1377
demandé sur rayryeng 2009-02-17 14:33:51

4 réponses

statistiques sur le temps de traitement réel, des utilisateurs et des systèmes

L'une de ces choses n'est pas comme l'autre. Le temps réel se rapporte au temps réel écoulé; L'Utilisateur et le SAJR se rapportent au temps CPU utilisé seulement par le processus.

  • Real est Horloge murale temps - temps du début à la fin de l'appel. C'est tout le temps écoulé y compris les tranches de temps utilisées par d'autres processus et temps que le processus passe bloqué (par exemple s'il attend que l'E/S soit terminée).

  • Utilisateur est la quantité de temps CPU passé en mode code (à l'extérieur du noyau) à l'intérieur le processus. Ce N'est que le temps CPU réel utilisé dans l'exécution du processus. Les autres processus et le temps que le processus passe Bloqué ne comptent pas dans ce chiffre.

  • Sys est le temps CPU passé dans le noyau au cours du processus. Cela signifie exécuter le temps CPU passé dans les appels système dans le noyau, par opposition au code de la bibliothèque, qui est encore en cours d'exécution dans l'espace utilisateur. Comme 'user', c'est seulement le temps CPU utilisé par le processus. Voir ci-dessous une brève description du mode noyau (aussi appelé mode "superviseur") et du mécanisme d'appel système.

User+Sys vous dira combien de temps CPU réel votre processus utilisé. Notez que c'est à travers tous les CPU, donc si le processus a plusieurs threads (et ce processus est en cours d'exécution sur un ordinateur avec plus d'un processeur) il pourrait potentiellement dépasser le temps d'horloge de mur rapporté par Real (qui se produit habituellement). Il convient de noter que ces chiffres incluent le temps User et Sys de tous les processus de l'enfant (et de leurs descendants) ainsi qu'au moment où ils pourraient avoir sont collectées, par exemple par wait(2) ou waitpid(2) , bien que les appels de système sous-jacents renvoient les statistiques pour le processus et ses enfants séparément.

origines des statistiques déclarées par time (1)

les statistiques rapportées par time sont recueillies à partir de divers appels système. 'User' et' Sys 'viennent de wait (2) ou times (2) , selon le système particulier. 'Real' est calculé à partir d'un temps de début et de fin obtenu à partir de l'appel gettimeofday (2) . Selon la version du système, diverses autres statistiques telles que le nombre de changements de contexte peuvent aussi être recueillies par time .

sur une machine multi-processeur, un processus multi-filetés ou un processus fourche enfants pourraient avoir un temps écoulé plus petit que le temps CPU total - Comme différents fils ou les processus peuvent se dérouler en parallèle. En outre, les statistiques de temps rapportées viennent de différentes origines, de sorte que les temps enregistrés pour des tâches de course très courtes peuvent être sujets à des erreurs d'arrondissement, comme le montre l'exemple donné par l'affiche originale.

Une brève introduction sur le Noyau vs mode Utilisateur

Sur Unix, ou tout protégé de la mémoire du système d'exploitation, Noyau " ou "Superviseur" mode se réfère à un mode privilégié que le CPU peut utiliser. Certaines actions privilégiées qui pourraient affecter la sécurité ou la stabilité ne peuvent être faites que lorsque le CPU fonctionne dans ce mode; ces actions ne sont pas disponibles pour le code d'application. Un exemple d'une telle action pourrait être la manipulation du MMU pour accéder à l'espace d'adresse d'un autre processus. Normalement, mode utilisateur code ne peut pas le faire( avec bonne raison), bien qu'il puisse demander "1519790920 la" mémoire partagée à partir du noyau, qui pourrait être lus ou écrits par plus d'un processus. Dans ce cas, la mémoire partagée est explicitement demandée au noyau par le biais d'un mécanisme sécurisé et les deux processus doivent s'y attacher explicitement pour pouvoir l'utiliser.

le mode privilégié est généralement appelé mode 'kernel' parce que le noyau est exécuté par le CPU tournant dans ce mode. Pour passer au noyau mode vous devez émettre une instruction spécifique (souvent appelée trap ) qui commute le CPU en mode noyau et exécute le code à partir d'un emplacement spécifique tenu dans une table de saut. pour des raisons de sécurité, vous ne pouvez pas passer en mode noyau et exécuter du code arbitraire - les pièges sont gérés à travers une table d'adresses qui ne peut pas être écrite à moins que le CPU ne tourne en mode superviseur. Vous piège explicite le nombre de trap et l'adresse sont recherchés dans la table jump; le noyau a un nombre fini de points d'entrée contrôlés.

les appels 'système' dans la bibliothèque C (en particulier ceux décrits dans la Section 2 des pages de manuel) ont un composant de mode utilisateur, qui est ce que vous appelez réellement à partir de votre programme C. Dans les coulisses, ils peuvent émettre un ou plusieurs appels système vers le noyau pour faire des services spécifiques tels que l'E/S, mais ils ont encore du code en mode utilisateur. Il est il est également tout à fait possible de lancer directement un trap en mode noyau à partir de n'importe quel code d'espace utilisateur si vous le souhaitez, bien que vous puissiez avoir besoin d'écrire un extrait du langage assembly pour configurer correctement les registres pour l'appel. Une page décrivant les appels système fournis par le noyau Linux et les conventions pour la création de registres peut être trouvée ici .

plus d'informations à propos de "sys"

il y a des choses que votre le code ne peut pas faire à partir du mode Utilisateur - des choses comme allouer la mémoire ou accéder au matériel (HDD, réseau, etc.). Ces derniers sont sous la supervision du noyau, et lui seul peut faire. Certaines opérations que vous effectuez (comme malloc ou fread / fwrite ) invoqueront ces fonctions du noyau et compteront alors comme temps "système". Malheureusement, ce n'est pas aussi simple que "chaque appel à malloc sera compté dans le temps 'sys'". L'appel à malloc fera son propre traitement (encore comptés dans le temps "utilisateur") et puis quelque part sur le chemin il peut appeler la fonction dans le noyau (comptés dans le temps "système"). Après le retour de l'appel du noyau, il y aura un peu plus de temps dans 'user' et ensuite malloc retournera à votre code. Comme lorsque le commutateur qui se passe, et combien il est passé en mode noyau... on ne peut pas dire. Il dépend de l'implémentation de la bibliothèque. En outre, d'autres fonctions apparemment innocentes pourraient également utiliser malloc et similaires à l'arrière-plan, qui aura de nouveau un certain temps dans " sys " puis.

1647
répondu ConcernedOfTunbridgeWells 2017-06-16 17:00:53

pour développer la réponse acceptée , je voulais juste fournir une autre raison pour laquelle realuser + sys .

gardez à l'esprit que real représente le temps réel écoulé, tandis que user et sys représentent le temps D'exécution CPU. En conséquence, sur un système multicore ,le user et/ou sys temps (ainsi que leur somme) peut effectivement dépasser le réel temps. Par exemple, sur une application Java que j'exécute pour une classe, j'obtiens cet ensemble de valeurs:

real    1m47.363s
user    2m41.318s
sys     0m4.013s
216
répondu lensovet 2017-05-23 12:34:44

montre temps réel total de turn-around pour un processus; alors que l'Utilisateur affiche le temps d'exécution des instructions définies par l'utilisateur et Sys est pour le temps d'exécution des appels système!

temps réel comprend également le temps d'attente (le temps d'attente pour l'E/S, etc.)

14
répondu susenj 2010-11-05 04:34:14

réel : Le temps réel passé à l'exécution de ce processus du début à la fin, comme si elle a été mesurée par un homme avec un chronomètre

utilisateur : Le temps cumulé passé par tous les Processeurs lors du calcul

sys : le temps cumulé passé par tous les CPU lors de tâches liées au système telles que l'allocation de mémoire.

avis que parfois user + sys pourrait être plus grand que réel, comme plusieurs processeurs peuvent travailler en parallèle.

9
répondu varun 2017-11-24 19:05:56