For a benchmarking tool for command-line programs, the first results are sharkdp/hyperfine, bloomberg/memray and dotnet/benchmarkdotnet (BenchmarkDotNet is a ). axboe/fio and google/benchmark round out the shortlist. Compare the match explanations and check the project documentation against your requirements.
Performance measurement utilities for evaluating the execution speed and resource usage of terminal-based software applications.
Hyperfine is a command-line benchmarking tool used to measure the execution time of shell commands through multiple runs and statistical analysis. It functions as a comparative benchmarking utility and a shell performance analyzer, allowing for the evaluation of multiple commands against a reference baseline to determine relative speed. The tool distinguishes itself by isolating actual command performance through shell overhead correction and the ability to bypass the shell entirely using system calls. It supports parameterized execution, enabling benchmarks to run across a range of varying i
Hyperfine is a purpose-built command-line benchmarking tool that measures execution time with statistical analysis, supports parameterized commands, warm-up runs, and multiple export formats (JSON, CSV, Markdown), and includes a comparison mode for baselines — matching nearly all requested features except I/O and memory profiling.
Memray is a memory profiler for Python that tracks heap allocations in both Python code and native C or C++ extensions. It captures memory events by hooking into the language runtime and traversing call stacks, providing a comprehensive view of how an application consumes memory. The tool is designed to minimize performance impact on the target application by using thread-local buffering and streaming data to an external process or file. The project distinguishes itself through its ability to monitor complex, multi-threaded systems and child processes in real-time. It provides diagnostic util
Memray is a memory profiler for Python that tracks heap allocations and monitors memory usage in real-time, but it does not measure execution time or compare the performance of arbitrary command-line programs — it's a focused profiling tool rather than a general-purpose benchmarking utility.
BenchmarkDotNet is a library and tool suite for measuring the execution time and memory allocation of .NET code. It utilizes statistical sampling and warm-up iterations to determine the stability and precise execution speed of specific methods. The project provides a JIT disassembly viewer to inspect processor disassembly and analyze how the compiler executes code paths. It includes a memory allocation profiler that tracks managed and native memory traffic to identify efficiency bottlenecks. Additionally, a runtime performance comparator allows the same benchmarks to be executed across differ
BenchmarkDotNet is a .NET-focused benchmarking library for measuring the performance of methods and code snippets, not a tool for benchmarking arbitrary command-line programs from the shell, so it only covers the general benchmarking idea rather than the specific use case you described.
fio is a storage performance benchmarking tool and synthetic I/O workload generator. It functions as a storage device profiler and I/O trace replay engine, enabling the measurement of throughput and latency for storage devices and file systems. The project is distinguished by its ability to act as a distributed storage stress tester, managing multiple remote server backends via a single controller to evaluate network storage. It also includes specialized capabilities for storage deduplication analysis by generating redundant data buffers to test the efficiency of deduplication subsystems. Th
fio is a specialized storage device and filesystem benchmark that measures I/O throughput and latency, not a general tool for benchmarking arbitrary command-line programs by execution time or memory usage.
This project is a performance measurement framework and microbenchmarking library designed for C++ and Python. It provides a toolset for measuring the execution time of small code fragments using high-resolution timers, calculating statistical aggregates, and analyzing asymptotic complexity. The framework distinguishes itself through specialized capabilities for multithreaded performance testing, using synchronized execution to measure parallel throughput. It includes mechanisms to prevent compiler optimizations from removing benchmarked code and supports complex parameterization via Cartesia
This is a microbenchmarking library for C++ and Python code fragments, not a tool for measuring and comparing the performance of command-line programs — you would use it to benchmark functions within your own source code, not external executables invoked from a shell.
This project is a Go shell scripting library and framework designed for writing automation scripts and CLI tools. It provides a concurrent data pipeline system for chaining sources, filters, and sinks to process text and JSON streams. The library distinguishes itself through a comprehensive toolkit for shell-like operations, including a text processing engine for regular expression filtering and frequency analysis, a filesystem utility toolkit for recursive search and path manipulation, and an integrated HTTP client wrapper for building data pipelines that fetch web content. The capability s
This is a Go shell scripting library for building automation pipelines, not a dedicated benchmarking tool—it lacks performance measurement and analysis features needed for comparing execution times or memory usage of CLI programs.
Execa is a promise-based process execution library that serves as a wrapper for the Node.js child process module. It functions as a shell command runner and subprocess management tool, simplifying the execution of external commands and binaries. The library distinguishes itself through automatic argument escaping to prevent shell injection and the use of abort signals for graceful process termination. It also provides an inter-process communication wrapper for exchanging structured JSON data and messages between parent and child processes. Its capabilities cover a broad range of process I/O
Execa is a process execution library for running shell commands, not a benchmarking tool—it lacks any performance measurement, statistical analysis, or comparison features, so it's only a building block for such tasks rather than the tool itself.
| Repository | Stars | Language | License | Last push |
|---|---|---|---|---|
| sharkdp/hyperfine | 28.3K | Rust | Apache-2.0 | |
| bloomberg/memray | 14.9K | Python | apache-2.0 | |
| dotnet/benchmarkdotnet |
| 11.4K |
| C# |
| MIT |
| axboe/fio | 6.3K | C | GPL-2.0 |
| google/benchmark | 10.2K | C++ | Apache-2.0 |
| bitfield/script | 7K | Go | MIT |
| sindresorhus/execa | 7.5K | JavaScript | MIT |