
hyperfine es una herramienta de evaluación comparativa de línea de comandos que ejecuta comandos repetidamente, recopila datos de tiempo de múltiples ejecuciones y le brinda resultados estadísticamente confiables con desviación media, mínima, máxima y estándar, lo que la hace mucho más precisa que una medición única.
Ha estado sincronizando comandos durante años, pero lo ha estado engañando, no porque el tiempo esté roto, sino porque una sola ejecución captura un punto de datos que puede aumentar o disminuir según el estado de la caché, la carga de la CPU o la programación del núcleo.
Si elige entre dos scripts, dos herramientas de compresión o dos consultas de bases de datos, necesita el promedio de docenas de ejecuciones, no una medición afortunada.
hyperfine Solucione este problema ejecutando cada comando una cantidad configurable de veces, realizando una carrera de calentamiento y brindándole un resumen estadístico adecuado.
este hyperfine Se prueban las herramientas ubuntu y LokiLinuxpero la herramienta funciona en cualquier distribución moderna de Linux que se pueda instalar desde un administrador de paquetes o un archivo binario de lanzamiento de GitHub.
Instalar hiperfine en Linux
Instalar hyperfine En Linux, utilice las siguientes instrucciones para su distribución de Linux específica.
sudo apt install hyperfine [On Debian, Ubuntu and Mint] sudo dnf install hyperfine [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo apk add hyperfine [On Alpine Linux] sudo pacman -S hyperfine [On Arch Linux] sudo zypper install hyperfine [On OpenSUSE] sudo pkg install hyperfine [On FreeBSD]
En otras distribuciones de Linux, si el paquete no está en el repositorio predeterminado, puede extraerlo Binarios de la última versión de GitHub:
wget tar xzf hyperfine-v1.20.0-x86_64-unknown-linux-musl.tar.gz sudo mv hyperfine-v1.20.0-x86_64-unknown-linux-musl/hyperfine /usr/local/bin/
Verifique la instalación en todas las distribuciones usando el siguiente comando:
hyperfine --version
La forma más simple pone tu comando entre comillas. hyperfine:
hyperfine 'command to benchmark'
Por defecto, hyperfine Ejecute al menos 10 iteraciones cronometradas y 3 ejecuciones de calentamiento antes de calcular los resultados. Las ejecuciones de calentamiento permiten que la memoria caché del sistema de archivos se estabilice para que las excepciones de la memoria caché en frío no contaminen sus números.
Ejemplo 1: comparar un solo comando
Calcule el tiempo que tarda el comando de búsqueda en escanear su directorio de inicio .log documento.
hyperfine 'find ~ -name "*.log"'
producción:
Benchmark 1: find ~ -name "*.log" Time (mean ± σ): 143.2 ms ± 8.4 ms [User: 62.1 ms, Sys: 80.7 ms] Range (min … max): 133.5 ms … 161.3 ms 10 runs
El resultado te da el tiempo promedio. (143,2 ms)desviación estándar (σ = 8.4msque indica la consistencia de la ejecución), así como el rango completo. un alto σ En relación con el promedio, significa que hay factores externos que interfieren con tu carrera, lo cual es una señal útil en sí misma.
Ejemplo 2: Comparar dos instrucciones una al lado de la otra
donde esta esto hyperfine Ganó un lugar, puede combinar el comando grep con ripgrep Busque una cadena en un directorio lleno de archivos de registro.
hyperfine 'grep -r "error" /var/log/' 'rg "error" /var/log/'
producción:
Benchmark 1: grep -r "error" /var/log/ Time (mean ± σ): 1.243 s ± 0.051 s [User: 0.891 s, Sys: 0.351 s] Range (min … max): 1.181 s … 1.334 s 10 runs Benchmark 2: rg "error" /var/log/ Time (mean ± σ): 189.4 ms ± 12.3 ms [User: 312.1 ms, Sys: 98.7 ms] Range (min … max): 173.2 ms … 217.6 ms 10 runs Summary rg "error" /var/log/ ran 6.56 ± 0.58 times faster than grep -r "error" /var/log/
este generalizar La línea en la parte inferior hace el cálculo de la proporción por usted. Eso 6,56 veces Una diferencia es un número que realmente puedes incluir en una discusión de equipo o en una solicitud de extracción.
Ejemplo 3: utilizar –runs para controlar el recuento de ejecuciones
Para comandos lentos como volcados de bases de datos o compresión de archivos grandes, ejecutarlo 10 veces es excesivo, así que use --runs Establezca un recuento más bajo.
hyperfine --runs 5 'tar -czf /tmp/backup.tar.gz /var/www/html'
producción:
Benchmark 1: tar -czf /tmp/backup.tar.gz /var/www/html Time (mean ± σ): 4.312 s ± 0.198 s [User: 3.891 s, Sys: 0.421 s] Range (min … max): 4.073 s … 4.591 s 5 runs
Para comandos muy rápidos que se completan en milisegundos, vaya en la otra dirección y aumente el número de ejecuciones a 50 o 100 para que las estadísticas se estabilicen. Cuando el promedio es de 5 milisegundos, un milisegundo de ruido es significativo.
Ejemplo 4: Utilice –warmup para la operación de calentamiento
Si sus comandos se leen desde el disco y desea comparar el rendimiento de la caché activa (qué tan rápido se ejecuta el sistema operativo después de almacenar los datos en caché), aumente el recuento de calentamiento.
hyperfine --warmup 5 'wc -l /var/log/syslog'
producción:
Benchmark 1: wc -l /var/log/syslog Time (mean ± σ): 4.7 ms ± 0.6 ms [User: 2.1 ms, Sys: 2.5 ms] Range (min … max): 3.8 ms … 5.9 ms 10 runs
Si está evaluando el rendimiento de la caché en frío, se aplica el enfoque opuesto: haga lo siguiente:
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
Borre el caché de archivos del sistema operativo antes de cada prueba comparativa. Esta es una descripción más realista de lo que sucede en un servidor que se inicia recientemente o que no ha tocado el archivo recientemente.
Ejemplo 5: Exportar resultados a JSON
Cuando compara varias herramientas entre scripts o canalizaciones de CI, la salida pura del terminal no es suficiente, por lo tanto, exporte los resultados como JSON. --export-json y alimentarlos río abajo.
hyperfine --export-json results.json 'gzip -k testfile.bin' 'zstd -k testfile.bin'
producción:
Benchmark 1: gzip -k testfile.bin Time (mean ± σ): 621.4 ms ± 18.3 ms [User: 611.2 ms, Sys: 9.9 ms] Range (min … max): 598.3 ms … 651.7 ms 10 runs Benchmark 2: zstd -k testfile.bin Time (mean ± σ): 87.6 ms ± 4.1 ms [User: 77.3 ms, Sys: 10.1 ms] Range (min … max): 81.2 ms … 95.4 ms 10 runs
este results.json El archivo guarda cada tiempo de ejecución individual junto con estadísticas resumidas, lo que significa que puede trazar distribuciones, realizar un seguimiento de las regresiones entre versiones o ingresar datos en un panel. este --export-markdown flag te proporciona una tabla formateada que puedes pegar directamente en un problema o archivo de GitHub.
Las banderas más útiles de Hyperfine
Aquí están las banderas más útiles. hyperfine.
--runsEstablezca el número exacto de iteraciones cronometradas.--warmupEstablece cuántas ejecuciones únicas ocurren antes de que comience el cronometraje.--export-jsonAlmacene los resultados completos como JSON.--export-markdownGuarde los resultados como una tabla Markdown.--prepareEjecutar el comando set antes de cada iteración del punto de referencia es útil para restablecer el estado.--shell noneDeshabilita el contenedor de shell para el punto de referencia binario sin formato, lo que elimina los tiempos de inicio del shell de las mediciones.--ignore-failureLa evaluación comparativa continúa incluso si el comando devuelve un código de salida distinto de cero.
en conclusión
has visto como hyperfine Vaya más allá de los tiempos de ejecución única recopilando estadísticas en múltiples iteraciones, ejecutando un proceso de preparación para normalizar el estado de la caché, comparando comandos en paralelo con resúmenes claros de proporciones y exportando resultados en un formato legible por máquina para la automatización.
Cosas específicas para probar ahora: Seleccione 2 instrucciones Ha ejecutado regularmente, tal vez los dos métodos para comprimir la copia de seguridad o los dos métodos para rastrear los registros, y luego ejecutar:
hyperfine cmd1 cmd2
Datos reales de su sistema. La proporción en generalizar La línea le dirá algo específico sobre lo que puede tomar medidas.
¿Lo has usado? hyperfine ¿Resolver el debate sobre qué herramienta es realmente más rápida? ¿Qué estabas comparando? ¿Te sorprendieron los resultados? Háganos saber en los comentarios a continuación.









