- 性能が重要なアプリケーション向けにCで書かれた超高速文字列検索ツール
- パターンの特性とハードウェアに応じて最適なアルゴリズムを動的に選択
- SSE4.2/AVX2のようなハードウェアを活用し、最大スループットを提供
- 大容量対応のためファイルをチャンクに分割し、マルチスレッド並列処理を実行
- パターンに応じて最適な検索アルゴリズムを使用
- Boyer-Moore-Horspool: 一般的なパターンマッチングに適する
- Knuth-Morris-Pratt (KMP) アルゴリズム: 短いパターンに最適化
- Rabin-Karp: 長いパターンに効果的
- SIMDアクセラレーション: SSE4.2、AVX2対応ハードウェアで性能向上
- メモリマップトファイルI/Oを使用してシステムコールを最小化し、スループットを最大化
- 柔軟な検索オプション
- 大文字小文字を区別する検索と区別しない検索
- ファイル検索のほか、文字列を直接検索可能
- 一致回数のみを出力するモードを提供
使用方法
krep [OPTIONS] PATTERN [FILE]
- ログファイルで“error”を検索:
krep "error" system.log
- 大文字小文字を区別せず、8個のスレッドを使って検索:
krep -i -t 8 "ERROR" large_logfile.log
- 一致回数を出力(マッチした行は出力しない):
krep -c "TODO" *.c
- ファイルではなく文字列から直接検索:
krep -s "Hello" "Hello world"
コマンドラインオプション
- -i : 大文字小文字を区別せず検索
- -c : マッチした行を出力せず、一致回数のみを出力
- -t NUM : NUM 個のスレッドを使用(デフォルト: 4)
- -s STRING : ファイルではなく文字列から検索
- -v : バージョン情報を出力
- -h : ヘルプを出力
ベンチマーク
krepの性能は、一般的な文字列検索ツールと比べて非常に優れている。
- krepは1GBのテキストファイルで一般的なパターンを検索するのに0.78秒かかり、これは毎秒1,282MBの速度を意味する
- grepは同じ作業に2.95秒かかり、毎秒339MBの速度を記録した
- ripgrepは1.48秒かかり、毎秒676MBの速度を示した
- →
krepはgrepより約3.8倍高速で、ripgrepより約1.9倍高速 (ハードウェアおよびファイル特性により性能は変わる場合がある)
名前の由来
- 「krep」 はアイスランド語の**「kreppan」**に由来する
- 「素早くつかみ取る」という意味を持つ
- 効率的なパターン認識を象徴している
- 短く簡潔なコマンド名で、タイピングしやすい
2件のコメント
正規表現対応を捨てたうえで ripgrep より2倍しか速くないのなら、活用度はやや低いですね。
私は普通に、正規表現が使える ripgrep を引き続き使うと思います。
Hacker Newsの意見
CPU機能(例: AVX2)はランタイムで検出されるべき
krepプロジェクトに関するブログ記事の紹介
madvise()関連のエラーが発生し、MakefileのCFLAGSに-D_GNU_SOURCEを追加する必要があるテストケースの重要性
ビルド問題解決後のベンチマーク結果
マッチ頻度が高いベンチマークの試行
追加のベンチマーク試行
ripgrepのアルゴリズムとメモリマップの使用
ベンチマーク結果への疑問
krepという名前に関する意見