GNU/Linux >> Tutoriels Linux >  >> Linux

La commande UNIX `time` est-elle suffisamment précise pour les tests ?

De nos jours, imo, il n'y a aucune raison d'utiliser time à des fins d'étalonnage. Utilisez perf stat Au lieu. Il vous donne beaucoup plus d'informations utiles et peut répéter le processus d'analyse comparative un certain nombre de fois et faire des statistiques sur les résultats, c'est-à-dire calculer la variance et la valeur moyenne. C'est beaucoup plus fiable et aussi simple à utiliser que time :

perf stat -r 10 -d <your app and arguments>

Le -r 10 exécutera votre application 10 fois et effectuera des statistiques dessus. -d génère davantage de données, telles que les échecs de cache.

Alors que time peut être suffisamment fiable pour les applications de longue durée, il n'est certainement pas aussi fiable que perf stat . Utilisez-le à la place.

Avenant : Si vous voulez vraiment continuer à utiliser time , au moins n'utilisez pas la commande bash-builtin, mais la vraie affaire en mode verbeux :

/usr/bin/time -v <some command with arguments>

La sortie est alors par exemple :

    Command being timed: "ls"
    User time (seconds): 0.00
    System time (seconds): 0.00
    Percent of CPU this job got: 0%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 1968
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 93
    Voluntary context switches: 1
    Involuntary context switches: 2
    Swaps: 0
    File system inputs: 8
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

Notez surtout comment cela est capable de mesurer le pic RSS, ce qui est souvent suffisant si vous voulez comparer l'effet d'un patch sur le pic de consommation mémoire. C'est à dire. utilisez cette valeur pour comparer avant/après et s'il y a une diminution significative du pic RSS, alors vous avez fait quelque chose de bien.


time produit des temps assez bons pour les benchmarks qui s'exécutent sur une seconde sinon le temps qu'il a fallu exec() ing un processus peut être volumineux par rapport à son temps d'exécution.

Cependant, lors de l'analyse comparative, vous devez faire attention au changement de contexte. C'est-à-dire qu'un autre processus peut utiliser le CPU, rivalisant ainsi pour le CPU avec votre référence et augmentant son temps d'exécution. Pour éviter les conflits avec d'autres processus, vous devez exécuter un benchmark comme celui-ci :

sudo chrt -f 99 /usr/bin/time --verbose <benchmark>

Ou

sudo chrt -f 99 perf stat -ddd <benchmark>

sudo chrt -f 99 exécute votre benchmark en classe FIFO temps réel avec la priorité 99, ce qui fait de votre processus le processus prioritaire et évite le changement de contexte (vous pouvez changer votre /etc/security/limits.conf afin qu'il ne nécessite pas un processus privilégié pour utiliser les priorités en temps réel).

Cela fait aussi time rapportez toutes les statistiques disponibles, y compris le nombre de changements de contexte subis par votre benchmark, qui devrait normalement être de 0, sinon vous voudrez peut-être réexécuter le benchmark.

perf stat -ddd est encore plus informatif que /usr/bin/time et affiche des informations telles que les instructions par cycle, les sauts de branche et de cache, etc.

Et il est préférable de désactiver la mise à l'échelle et l'amplification de la fréquence du processeur, afin que la fréquence du processeur reste constante pendant le benchmark pour obtenir des résultats cohérents.


Linux
  1. Planifier une tâche avec la commande Linux at

  2. Un guide du terminal Linux pour les débutants

  3. 8 conseils pour la ligne de commande Linux

  4. Rediriger la sortie d'une commande dans 'time Command' ?

  5. Unix Less Command :10 conseils pour une navigation efficace

Suivi du temps avec Timewarrior en ligne de commande

Astuces de formatage pour la commande Linux date

Comment changer la limite de temps pour une session Sudo

Un guide pratique pour la commande chroot sous Linux

Comprendre la commande time sous Linux

Commandes Linux et Unix Tee pratiques pour l'administrateur Linux