
Ringkasan
-
Hyperfine adalah alat pembandingan yang menjalankan perintah beberapa kali untuk rata -rata yang akurat.
-
Hyperfine ramah pengguna dan memungkinkan hasil diekspor dalam format markdown atau JSON untuk analisis lebih lanjut.
-
Anda dapat menggunakan hyperfine untuk membandingkan efisiensi program, mengoptimalkan kode, dan mengotomatiskan benchmarking.
Jika Anda perlu tahu seberapa cepat berjalan, Hyperfine akan memberi tahu Anda. Alat serbaguna yang ramah pengguna ini tersedia di Linux ini mengambil semua upaya dari benchmarking.
Apa itu Hyperfine?
Hyperfine adalah alat pembandingan sumber terbuka untuk Linux, MacOS, dan Windows. Seperti perintah waktu, yang tersedia di sebagian besar distro dan cangkang, hyperfine akan mengukur jumlah waktu yang diperlukan untuk menjalankan program:
Di permukaan, Hyperfine melakukan pekerjaan yang sama seperti waktu, dengan output yang lebih cantik. Tetapi alat ini memiliki beberapa keunggulan; Hyperfine:
-
Menjalankan perintah beberapa kali, menghasilkan rata -rata yang lebih akurat.
-
Dapat menguji dan membandingkan beberapa perintah sekaligus.
-
Akun caching, outlier, dan efek pemijahan shell pada hasil.
-
Dapat mengekspor hasil dalam format penurunan harga atau JSON untuk analisis lebih lanjut.
Hyperfine sangat berguna saat Anda menulis program Anda sendiri. Anda dapat mencoba optimisasi, mengujinya menggunakan hyperfine, dan memperbarui kode Anda sesuai. Tetapi Anda juga dapat menggunakannya untuk memilih antara berbagai program, seperti Grep vs RipGrep misalnya:
Cara menginstal dan menggunakan hyperfine
Ditulis dalam Rust, Hyperfine adalah perintah yang sangat portabel yang dilengkapi dengan halaman manusia dan fitur baris perintah modern seperti opsi bentuk panjang dan penyelesaian tab.

Terkait
Mengapa Anda harus belajar karat, terutama jika Anda baru dalam pemrograman
Rust adalah salah satu bahasa pemrograman terbaru, dan dapat mengubah cara Anda melihat kode.
Instalasi
Paket hyperfine tersedia untuk banyak distribusi Linux dan OS lainnya.
Di Ubuntu, Anda dapat menginstal hyperfine dari rilis .deb, misalnya
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
Periksa halaman GitHub proyek untuk rilis terbaru tentang arsitektur Anda.
Di Fedora, Anda dapat menggunakan DNF Package Manager untuk menginstal hyperfine dengan perintah sederhana:
dnf install hyperfine
Pada macOS – atau sistem lain yang mendukungnya – Anda dapat menggunakan homebrew:
brew install hyperfine
Untuk sistem lain, periksa instruksi instalasi terperinci proyek.
Penggunaan dasar hyperfine
Hyperfine memunculkan subshell untuk menjalankan perintah yang Anda lewati. Anda tidak perlu terlalu memikirkan hal ini, tetapi itu berarti Anda harus menjalankan hyperfine sebagai berikut:
hyperfine command-in-pathhyperfine /full/path/to/command
Secara khusus, ini berarti bahwa Anda tidak bisa hanya menjalankan hyperfine terhadap program di direktori Anda saat ini dengan meneruskan namanya sebagai argumen:
hyperfine a.out
Jika Anda mencoba ini, Anda akan mendapatkan kesalahan seperti “perintah diakhiri dengan kode keluar non-nol 127,” yang bisa sulit untuk debug.
Sebaliknya, lewati saja jalan ke perintah, misalnya
hyperfine ./a.out
Untuk alasan yang sama, yang terbaik adalah mengutip perintah Anda:
hyperfine "du -skh ~"
Bagaimana pembandingan dengan hyperfine dapat membantu Anda
Benchmarking dapat seakurat Anda memilih untuk membuatnya, apakah Anda memasarkan produk, berdebat untuk perubahan kode, atau hanya tertarik pada seberapa cepat Anda dapat menjalankan Grep di hard drive Anda.
Memeriksa efisiensi kode Anda
Hyperfine sangat bagus dalam membandingkan hasil dari dua versi program dalam kondisi yang sama. Menggunakannya, Anda dapat memperbaiki logika program Anda dan mengoptimalkan kode Anda.
Artikel kami pada perintah Linux Time mencakup dua program C sampel C yang dapat Anda gunakan untuk menunjukkan konsep ini. Yang pertama, loop1.c, mengulangi lebih dari string beberapa kali (500.000), menghitung jumlah tanda hubung:
#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             if (szString[i] == '-')
                count++;
    printf("Counted %d hyphens\n", count);
}
Yang kedua, loop2.c, sangat mirip, tetapi memanggil strlen () secara langsung dalam kondisi loop:
#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 hyphens\n", count);
}
Karena panggilan fungsi sekarang berada di dalam loop luar, strlen () berjalan 500.000 kali, bukan hanya sekali. Perintah waktu dapat memberikan informasi dasar tentang bagaimana kedua versi ini dari program yang sama membandingkan:
Tetapi hyperfine memberikan lebih banyak detail, bahkan dalam mode default yang paling mendasar:
Waktu perintah jangka panjang
Meskipun hyperfine sangat menarik bagi pemrogram dan administrator sistem, Anda dapat menggunakannya dalam keadaan lain. Misalnya, jika Anda pernah menggunakan perintah dan latar belakang yang sudah berjalan lama saat Anda bekerja, Anda mungkin tidak tahu berapa banyak waktu yang dibutuhkan. Mendapatkan kebiasaan menjalankannya melalui hyperfine dapat membantu:
Untuk perintah yang sudah berjalan lama, Anda mungkin ingin membatasi berapa kali hyperfine menjalankannya. Secara default, alat ini menggunakan heuristiknya sendiri untuk menentukan sejumlah berjalan untuk hasil yang akurat. Anda dapat mengesampingkan ini menggunakan opsi – -Runs:
hyperfine --runs 1 'du -skh ~'
Menangani peringatan dan kesalahan
Hyperfine sangat tertarik untuk melaporkan peringatan, mungkin karena bertujuan untuk memberikan statistik yang sangat akurat. Tetapi Anda mungkin tidak selalu terlalu peduli tentang mendapatkan hasil ilmiah yang ketat; Terkadang, hanya mendapatkan pemahaman yang tidak jelas sudah cukup. Hyperfine menyediakan opsi yang memenuhi kasus seperti itu.
Salah satu kasus tersebut adalah perintah yang mengembalikan kode keluar nol nol, yang biasanya menunjukkan bahwa perintah telah gagal. Dalam kasus seperti itu, hyperfine akan melaporkan kesalahan:
Seperti yang dijelaskan pesan kesalahan, Anda dapat mengabaikan kesalahan tersebut menggunakan opsi -i atau mencoba mendiagnosis mereka menggunakan –show -output. Bergantung pada apa yang Anda lakukan, yang pertama mungkin cukup baik.
Misalnya, jika contoh DU sebelumnya melakukan kesalahan, itu masih akan berjalan sampai selesai. Jika Anda menjalankan DU di seluruh disk Anda, itu bisa gagal dengan kesalahan izin pada satu file, membuat menjalankan yang tidak berguna. Perhatikan bahwa berjalan dengan -Aku masih akan menghasilkan peringatan:
PERINGATAN: Mengabaikan kode keluar yang tidak nol.
Anda juga dapat melihat kesalahan yang berkaitan dengan bagaimana hyperfine berjalan saat cache dingin atau program lain berjalan. Opsi -WarmUp akan menjalankan perintah Anda beberapa kali sebelum mulai membandingkan, yang membantu menghangatkan cache dan dapat menghasilkan hasil yang lebih realistis.
Anda juga dapat melakukan yang sebaliknya untuk mengukur kasus terburuk. Opsi –Prepare memungkinkan Anda menjalankan perintah lain selama setiap pembandingan menjalankan; Terserah Anda untuk memberikan perintah yang akan menghapus cache yang dapat memengaruhi hasil Anda.
Bekerja dengan Hasil Hyperfine
Hyperfine menunjukkan hasil waktu dalam format kompak yang bagus dan berwarna-warni yang sempurna untuk pemeriksaan cepat di terminal Anda. Jika Anda ingin menganalisis hasil lebih lanjut, Anda akan menginginkannya dalam format yang lebih baik.
Opsi –Export-json memungkinkan Anda menentukan file untuk menyimpan hasil yang diformat JSON. Mereka akan terlihat seperti ini:
Hasil ini menunjukkan bahwa hyperfine dapat menjalankan perintah Anda lebih dari yang Anda harapkan. Dalam hal ini, ia berjalan lebih dari 400 kali untuk membangun serangkaian hasil yang komprehensif.
Anda bahkan mungkin ingin menjalankan pembandingan semacam ini sebagai tes reguler, baik terhadap perangkat lunak tertentu atau perangkat keras saat ini Anda menjalankannya. Menyiapkan pekerjaan cron untuk mengotomatiskan pembandingan akan membuat ini lebih mudah.