Benchmark tout avec ce puissant outil Linux
Sommaire
Résumé
-
Hyperfine est un outil d'analyse comparative qui exécute les commandes plusieurs fois pour des moyennes précises.
-
Hyperfine est conviviale et permet d'exporter les résultats dans les formats Markdown ou JSON pour une analyse plus approfondie.
-
Vous pouvez utiliser Hyperfine pour comparer l'efficacité du programme, optimiser le code et automatiser l'analyse comparative.
Si vous avez besoin de savoir à quelle vitesse il fonctionne, Hyperfine vous le dira. Cet outil polyvalent convivial et polyvalent disponible sur Linux élimine tous les efforts de l'analyse comparative.
Qu'est-ce que Hyperfine?
Hyperfine est un outil d'analyse d'analyse open source pour Linux, MacOS et Windows. Comme la commande temporelle, qui est disponible dans la plupart des distros et des coquilles, Hyperfine mesurera le temps nécessaire pour exécuter un programme:
En surface, Hyperfine fait le même travail que le temps, avec une sortie plus jolie. Mais l'outil présente plusieurs avantages; Hyperfine:
-
Exécute une commande plusieurs fois, produisant des moyennes plus précises.
-
Peut tester et comparer plusieurs commandes à la fois.
-
Les comptes pour la mise en cache, les valeurs aberrantes et l'effet de la coquille de frai sur les résultats.
-
Peut exporter des résultats dans les formats de démarque ou JSON pour une analyse plus approfondie.
Hyperfine est particulièrement utile lorsque vous écrivez vos propres programmes. Vous pouvez essayer les optimisations, les tester à l'aide d'hyperfine et mettre à jour votre code en conséquence. Mais vous pouvez également l'utiliser pour choisir entre différents programmes, comme Grep vs Ripgrep par exemple:
Comment installer et utiliser Hyperfine
Écrit en rouille, Hyperfine est une commande hautement portable fournie avec des pages d'homme et des fonctionnalités de ligne de commande modernes telles que les options de forme longue et l'achèvement des TAB.
En rapport
Pourquoi devriez-vous apprendre la rouille, surtout si vous êtes nouveau dans la programmation
La rouille est l'un des langages de programmation les plus récents, et il peut changer la façon dont vous voyez le code.
Installation
Des forfaits hyperfines sont disponibles pour de nombreuses distributions Linux et autres OS.
Sur Ubuntu, vous pouvez installer Hyperfine à partir d'une version .deb, par exemple
wget https://github.com/sharkdp/hyperfine/releases/download/v1.19.0/hyperfine_1.19.0_amd64.deb
sudo dpkg -i hyperfine_1.19.0_amd64.deb
Consultez la page GitHub du projet pour la dernière version de votre architecture.
Sur Fedora, vous pouvez utiliser le gestionnaire de packages DNF pour installer Hyperfine avec une commande simple:
dnf install hyperfine
Sur macOS – ou un autre système qui le prend en charge – vous pouvez utiliser Homebrew:
brew install hyperfine
Pour d'autres systèmes, consultez les instructions d'installation détaillées du projet.
Utilisation de base de l'hyperfine
Hyperfine engendre une sous-coquille pour exécuter les commandes que vous la transmettez. Vous n'avez pas trop besoin de penser à cela, mais cela signifie que vous devriez exécuter Hyperfine comme suit:
hyperfine command-in-pathhyperfine /full/path/to/command
En particulier, cela signifie que vous ne pouvez pas simplement exécuter Hyperfine contre un programme dans votre répertoire actuel en faisant passer son nom comme argument:
hyperfine a.out
Si vous essayez ceci, vous obtiendrez une erreur comme «Commande terminée avec le code de sortie non nul 127», qui peut être difficile à déboguer.
Au lieu de cela, passez un chemin vers la commande, par exemple
hyperfine ./a.out
Pour des raisons similaires, il est préférable de citer vos commandes:
hyperfine "du -skh ~"
Comment l'analyse comparative avec l'hyperfine peut vous aider
L'analyse comparative peut être aussi précise que vous le souhaitez, que vous commercialisez un produit, que vous plaidez pour un changement de code ou vous vous intéressez à la rapidité avec laquelle vous pouvez exécuter Grep sur votre disque dur.
Vérification de l'efficacité de votre code
L'hyperfine est excellente pour comparer les résultats de deux versions d'un programme dans les mêmes conditions. En utilisant, vous pouvez affiner votre logique de programme et optimiser votre code.
Notre article sur la commande Linux Time comprend deux exemples de programmes C que vous pouvez utiliser pour démontrer ce concept. Le premier, Loop1.C, itère sur une chaîne un nombre fixe de fois (500 000), en comptant le nombre de traits de traits:
#include "stdio.h"
#include "string.h"int main() {
char szString() = "how-to-geek-how-to-geek-how-to-geek-how-to-geek";
int i, j, len = strlen(szString), count = 0;
for (j = 0; j < 500000; j++)
for (i = 0; i < len; i++)
if (szString(i) == '-')
count++;
printf("Counted %d hyphensn", count);
}
Le second, Loop2.c, est très similaire, mais il appelle strlen () directement dans la condition de boucle:
#include "stdio.h"
#include "string.h"int main() {
char szString() = "how-to-geek-how-to-geek-how-to-geek-how-to-geek";
int i, j, count = 0;
for (j = 0; j < 500000; j++)
for (i = 0; i < strlen(szString); i++)
if (szString(i) == '-')
count++;
printf("Counted %d hyphensn", count);
}
Parce que l'appel de fonction est maintenant à l'intérieur de la boucle extérieure, strlen () fonctionne 500 000 fois au lieu d'une seule fois. La commande temporelle peut fournir des informations de base sur la façon dont ces deux versions du même programme se comparent:
Mais Hyperfine donne plus de détails, même dans le mode par défaut le plus basique:
Timing des commandes à long terme
Bien que Hyperfine soit particulièrement intéressante pour les programmeurs et les administrateurs système, vous pouvez l'utiliser dans d'autres circonstances. Par exemple, si jamais vous utilisez une commande de longue durée et que vous le parliez pendant que vous travaillez, vous ne savez probablement pas combien de temps cela prend réellement. Prendre l'habitude de le faire courir via Hyperfine peut aider:
Pour une commande à long terme, vous voudrez probablement limiter le nombre de fois que Hyperfine l'exécute. Par défaut, l'outil utilise sa propre heuristique pour déterminer un bon nombre d'exécutions pour des résultats précis. Vous pouvez remplacer cela à l'aide de l'option – runs:
hyperfine --runs 1 'du -skh ~'
Faire face aux avertissements et aux erreurs
Hyperfine est très désireuse de signaler les avertissements, probablement parce qu'il vise à fournir des statistiques très précises. Mais vous ne vous souciez peut-être pas toujours trop d'obtenir un résultat rigoureusement scientifique; Parfois, il suffit de gagner une vague compréhension. Hyperfine fournit des options qui s'adressent à un tel cas.
Un tel cas est une commande renvoyant un code de sortie non nul, ce qui indique généralement que la commande a échoué. Dans de tels cas, Hyperfine rapportera une erreur:
Comme l'explique le message d'erreur, vous pouvez ignorer ces erreurs à l'aide de l'option -I ou essayer de les diagnostiquer à l'aide de –how-sortie. Selon ce que vous faites, le premier est probablement assez bon.
Par exemple, si l'exemple DU précédent lance une erreur, il s'exécutera toujours jusqu'à la fin. Si vous exécutez DU sur l'ensemble de votre disque, il peut échouer avec une erreur d'autorisation sur un seul fichier, rendant l'exécution inutile. Notez que courir avec -i produirai toujours un avertissement:
AVERTISSEMENT: Ignorer le code de sortie non nul.
Vous pouvez également voir des erreurs relatives à la façon dont Hyperfine fonctionne pendant que le cache est froid ou que d'autres programmes fonctionnent. L'option de – Warmup exécutera votre commande à plusieurs reprises avant de commencer à comparaître, ce qui aide à réchauffer le cache et peut produire des résultats plus réalistes.
Vous pouvez également faire le contraire pour mesurer le pire des cas. L'option de – prépare vous permet d'exécuter une autre commande lors de chaque exécution de benchmarking; C'est à vous de fournir une commande qui effacera tout cache qui peut affecter vos résultats.
Travailler avec les résultats d'Hyperfine
Hyperfine montre que le timing donne un joli format compact à haute résistance aux couleurs qui est parfait pour une vérification rapide dans votre terminal. Si vous souhaitez analyser davantage les résultats, vous en voudrez dans un meilleur format.
L'option –Export-JSON vous permet de spécifier un fichier pour stocker des résultats formés par JSON. Ils ressembleront à ceci:
Ces résultats démontrent que Hyperfine peut exécuter votre commande plusieurs fois que vous ne vous y attendez. Dans ce cas, il a fonctionné plus de 400 fois pour construire un ensemble complet de résultats.
Vous voudrez peut-être même exécuter ce type de comparaison en tant que test régulier, soit contre un logiciel spécifique, soit le matériel actuel sur lequel vous l'exécutez. La mise en place d'un travail CRON pour automatiser la marge de comparaison rendra cela beaucoup plus facile.