- Alat pencarian string super cepat yang ditulis dalam C untuk aplikasi yang mengutamakan performa
- Memilih algoritme optimal secara dinamis berdasarkan karakteristik pola dan perangkat keras
- Memanfaatkan perangkat keras seperti SSE4.2/AVX2 untuk memberikan throughput maksimum
- Untuk mendukung skala besar, file dibagi menjadi chunk dan diproses secara paralel dengan multithreading
- Menggunakan algoritme pencarian yang paling sesuai tergantung pada polanya
- Boyer-Moore-Horspool: cocok untuk pencocokan pola umum
- Algoritme Knuth-Morris-Pratt (KMP): dioptimalkan untuk pola pendek
- Rabin-Karp: efektif untuk pola panjang
- Akselerasi SIMD: peningkatan performa pada perangkat keras yang mendukung SSE4.2, AVX2
- Menggunakan memory-mapped file I/O untuk meminimalkan system call dan memaksimalkan throughput
- Opsi pencarian yang fleksibel
- Pencarian case-sensitive dan case-insensitive
- Selain mencari di file, bisa langsung mencari dalam string
- Menyediakan mode yang hanya menampilkan jumlah kecocokan
Cara penggunaan
krep [OPTIONS] PATTERN [FILE]
- Mencari “error” di file log:
krep "error" system.log
- Mencari tanpa membedakan huruf besar/kecil dengan 8 thread:
krep -i -t 8 "ERROR" large_logfile.log
- Menampilkan jumlah kecocokan (tanpa menampilkan baris yang cocok):
krep -c "TODO" *.c
- Mencari langsung dalam string, bukan file:
krep -s "Hello" "Hello world"
Opsi command line
- -i : pencarian tanpa membedakan huruf besar/kecil
- -c : hanya menampilkan jumlah kecocokan tanpa menampilkan baris yang cocok
- -t NUM : menggunakan NUM thread (default: 4)
- -s STRING : mencari dalam string, bukan file
- -v : menampilkan informasi versi
- -h : menampilkan bantuan
Benchmark
- Performa
krep sangat unggul dibandingkan alat pencarian string pada umumnya.
- krep membutuhkan 0,78 detik untuk mencari pola umum pada file teks 1GB, yang berarti kecepatan 1.282MB per detik
- grep membutuhkan 2,95 detik untuk tugas yang sama, dengan kecepatan 339MB per detik
- ripgrep membutuhkan 1,48 detik, dengan kecepatan 676MB per detik
- →
krep sekitar 3,8x lebih cepat daripada grep, dan sekitar 1,9x lebih cepat daripada ripgrep (performa dapat berbeda tergantung perangkat keras dan karakteristik file)
Asal nama
- “krep” berasal dari kata dalam bahasa Islandia, “kreppan”
- Artinya “mencengkeram dengan cepat”
- Melambangkan pengenalan pola yang efisien
- Nama perintahnya singkat dan ringkas sehingga mudah diketik
2 komentar
Kalau harus mengorbankan dukungan regex tetapi hanya 2 kali lebih cepat daripada ripgrep, kegunaannya jadi agak terbatas juga.
Saya sepertinya akan tetap memakai ripgrep yang mendukung regex.
Opini Hacker News
Fitur CPU (misalnya AVX2) harus dideteksi saat runtime
ifdefhanya mendeteksi pada build time apakah compiler mendukungnyaPengenalan posting blog tentang proyek krep
madvise(), perlu menambahkan-D_GNU_SOURCEke CFLAGS di MakefilePentingnya test case
Hasil benchmark setelah masalah build diperbaiki
Percobaan benchmark dengan frekuensi kecocokan tinggi
Percobaan benchmark tambahan
Algoritma ripgrep dan penggunaan memory map
Keraguan terhadap hasil benchmark
Pendapat tentang nama krep