5 votes

sortie de la commande de temps

J'ai un fichier bash script appelé readspeed .

J'essaie de trouver combien de temps il faut pour exécuter un fichier bash script.

Quand je cours time readspeed le résultat est le suivant.

$ time readspeed                       
6
readspeed  174.19s user 286.30s system 99% cpu 7:40.50 total

Je ne suis pas sûr de ce que l'utilisateur, le système, le processeur et le total ont indiqué.

Quelles sont les différences entre user , system et total ?

$ type time
time is a reserved word

$ echo $SHELL
/bin/zsh

4voto

Jose Chavez Points 645

La sortie de echo $SHELL montre que vous exécutez zsh - pas bash . zsh est le shell par défaut dans les versions récentes de MacOS. Le site time est alors réellement exécutée par l'interpréteur de commandes au lieu de lancer une commande séparée time (mais, curieusement, il n'est pas listé comme un programme intégré au shell). La documentation plutôt laconique est disponible en exécutant man zshmisc :

temps [pipeline] Le pipeline est exécuté, et les statistiques de temps sont rapportées sur l'erreur standard sous la forme spécifiée par le paramètre TIMEFMT . Si pipeline est omis, les statistiques concernant le processus du shell et ses enfants.

La signification du paramètre TIMEFMT peut être trouvée en exécutant man zshparam :

   TIMEFMT
          The format of process time reports with the time keyword.  The default is `%J  %U user %S system %P cpu %*E total'. 

Reconnaît les séquences d'échappement suivantes, bien qu'elles ne soient pas toutes disponibles sur tous les systèmes et que certaines ne soient pas toujours disponibles. disponibles sur tous les systèmes, et certaines qui sont disponibles peuvent ne pas être utiles :

          %%     A `%'.
          %U     CPU seconds spent in user mode.
          %S     CPU seconds spent in kernel mode.
          %E     Elapsed time in seconds.
          %P     The CPU percentage, computed as 100*(%U+%S)/%E.
          %W     Number of times the process was swapped.
          %X     The average amount in (shared) text space used in kilobytes.
          %D     The average amount in (unshared) data/stack space used in kilobytes.
          %K     The total space used (%X+%D) in kilobytes.
          %M     The  maximum memory the process had in use at any time in kilobytes.
          %F     The number of major page faults (page needed to be brought from disk).
          %R     The number of minor page faults.
          %I     The number of input operations.
          %O     The number of output operations.
          %r     The number of socket messages received.
          %s     The number of socket messages sent.
          %k     The number of signals received.
          %w     Number of voluntary context switches (waits).
          %c     Number of involuntary context switches.
          %J     The name of this job.

          A  star may be inserted between the percent sign and flags printing time (e.g., `%*E'); this causes the time to be printed

sur hh:mm:ss.ttt' format (hours and minutes are only printed if they are not zero). Alternatively, m' ou u' may be used (e.g., %mE') pour produire une sortie de temps en millisecondes ou microsecondes, respectivement.

Vous pouvez en tirer plusieurs enseignements :

Les mesures de temps effectuées par time couvre à la fois le temps utilisé par zsh lui-même (pour l'interprétation de votre shell script) ainsi que le temps utilisé par toutes les commandes engendrées par le shell script pour effectuer le travail réel.

Les mesures de temps sont divisées en une partie "utilisateur" et une partie "système". Un programme est considéré comme consommant du temps "utilisateur" lorsqu'il s'exécute seul (c'est-à-dire qu'il effectue des calculs, déplace des données dans la mémoire vive, etc.) Il consomme du temps "système" lorsqu'il a demandé au système d'exploitation de faire quelque chose en son nom (par exemple lire des données dans un fichier, envoyer des données sur un réseau, etc).

En plus de ce qui précède, vous verrez que la dernière partie du résultat est le temps total. Il s'agit d'un temps "d'horloge murale". C'est-à-dire que le temps passé en mode "utilisateur" et "système" est déterminé comme le temps pendant lequel le programme consomme du temps processeur, alors que le temps total est le temps passé dans le monde réel - y compris le temps pendant lequel le programme ne fait rien et le système ne fait rien au nom du programme.

Enfin, la partie "99% cpu" indique le rapport entre la consommation de temps combinée de l'utilisateur et du système, et le temps total de l'horloge murale. Pour vous, la mesure "99%" signifie que votre programme a, d'une manière ou d'une autre, utilisé activement le CPU presque tout le temps. Un chiffre faible indique que le système était occupé par d'autres choses et que votre programme avait des périodes d'inactivité.

0 votes

Pour illustrer la différence entre "user" , "system" y "total" , cours : time sleep 10 . Le résultat est similaire à sleep 10 0.00s user 0.00s system 0% cpu 10.008 total montrant que la commande a pris 10 secondes pour s'exécuter, mais n'a consommé aucun temps CPU (ce n'était pas en utilisant 10 secondes de temps CPU juste le temps d'une horloge murale)

1voto

nohillside Points 82672

Desde man bash

If the time reserved word precedes a pipeline, the elapsed as  well  as
user  and  system  time consumed by its execution are reported when the
pipeline terminates.

Vous voyez donc le temps passé dans l'espace utilisateur, le temps passé dans le système/kernel, et le temps global que la commande a pris.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X