ファイルの中身を文字列で検索することができるユーティリティ「grep」は、コンピューターを扱う上で、なくてはならないツールといっても過言ではないかもしれません。grepは長い歴史を持つツールで、それ自体少しづつ改良さてきていますが、最近はもっと積極的に高速性を追求したgrep的なツールも開発されてきています。
今回紹介する「grab」もその中の一つ。複数コアを使った検索の並列化や(ただしほとんどの場合遅くなるらしい)、mmapとMAP_POPULATEの使用、PCREのJIT機能などを使った高速化の技法を組合せ、SSD上で100%の劇的なパフォーマンスの向上を成し遂げたということです。
しかしさらに上手が…
Hacker Newsで「grab」の話題が取り上げられた後、高速化grepの先駆者、「The Silver Searcher」(コマンド名ag)の作者が自らベンチマークを行い、grabの評価を行っていました。
ggreer@boron:~/code% du -sh . 8.3G . ggreer@boron:~/code% time ag cpu_set_t ag cpu_set_t 4.45s user 5.25s system 295% cpu 3.285 total ggreer@boron:~/code% time grab -R cpu_set_t . grab -R cpu_set_t . 13.31s user 21.67s system 35% cpu 1:38.28 total
agが約3秒で検索終了するのに対し、grabは1分38秒もかかり、30倍以上agの方が速いという結果がでています。agが使っているファイル除外機能を抑制してもまだ2倍速いという結果がでているので、実用面ではagのほうが上回っているといえそうです。
また、grabの高速化技法の中にはすぐに取り入れることができそうなテクニックがいくつか使われていると分析し、The Silver Searcherのさらなる改良に意欲を見せています。
Hacker Newsでは、grab、The Silver Searcherの他に、ackという改良版grepの話題もでていましたが、The Silver Searcherを上回る高速検索ソフトは存在しない様子。grabの高速化手法を導入してさらに高速化されれば、当面The Silver Searcherの王座は揺るぎないものになるかもしれません。