findコマンドをベンチマークする方法はありますか(検索と比較)?

findコマンドをベンチマークする方法はありますか(検索と比較)?

読書受け入れられた回答怪しい検索対検索:お互いの使い方、長所、短所これはlocate、このアプリの最大の利点がスピードであることを意味し、私はこのアプリを使用することで得られる利点があるかどうかを確認するためにいくつかのテストを実行したいと思いました。

find最初のステップは、同様のサービスを提供するときにツールの速度を推定することでしたlocate(したがって追加の項目はなく、ファイル名のみを検索します)。

私は驚いた。

time find / 2>/dev/null >/dev/null

(ユーザー権限に応じて)すべてのファイルを繰り返すとします。

real    0m1.231s
user    0m0.353s
sys 0m0.867s

かなり速い結果。

私の質問は、適用されたコマンドが実際に速度をベンチマークする方法かどうかですfind

私が答えたい質問の1つは、ファイルシステム、つまりオペレーティングシステム(Linuxカーネル)に結果に影響を与える可能性のあるバッファの種類がありますか?

私の結果は、キャッシュを削除するとecho 3 > /proc/sys/vm/drop_caches速度が大幅に向上することですfind

$ sudo bash -c "echo 3 > /proc/sys/vm/drop_caches"
$ time (find / 2>/dev/null >/dev/null)
real    0m24.290s
user    0m1.143s
sys 0m8.230s

しかし、私のLinuxシステムでは、その後の使用は約1秒にfind戻ります。mlocate

要約すると、知りたいfindコマンドをベンチマークする方法(検索と比較)

更新/備考

この質問は別の比較によって引き起こされ、測定/ベンチマーク速度について質問していますが、locateライブOS /ファイルシステム(例えば)から収集されたデータはデータベース(例えば)です。私のOSカーネルはキャッシュ動作がかなり良いので、orを介した検索実行時間はまだかなり似ています。findfindfindlocatefindlocate

したがって、問題は、オペレーティングシステム(ファイルシステム)キャッシュを削除することがコールドブートをfind完了するのに必要な「実際の」時間をシミュレートするのに十分であるかどうか、そしてこれらのスピードアップキャッシュが持続すると仮定することがどれほど現実的であるか(似ています)に帰結します。updatedb locateすべての後続findの呼び出しに対してデータベースファイルとして)。

答え1

OpenBSDから、ロケーションデータベースはデフォルトで週に一度再構築されます。/etc/weekly/usr/libexec/locate.updatedbユーザーとしてスクリプトを呼び出しますnobody

これlocate.updatedb/bin/shユーティリティは、ルートファイルシステム(OpenBSD)である程度実行されるスクリプトです。アクセスできるものはすべて場所データベースに保存されます。pdkshfindnobody

find /を介して生成されたファイルデータベースを使用するシステムよりも、これが高速であるとlocate信じるのは難しいです。locatefind /

もちろん、違いは以下が見つかるということです。その他のドキュメントfindそのユーザーよりも高いアクセス権を持つユーザーとして実行しますnobody

Linuxで、少なくとも職場でアクセスできるUbuntuシステムでは、locateマニュアルに従ってデータベースが毎日再生成されるようですlocate(8)。これはupdatedbユーティリティを介して行われます。

ユーティリティ(このシステムのシンボリックリンク/usr/bin/updatedb.mlocate)は、パッケージに属するコンパイルされたバイナリですmlocate

あなたは見ることができます由来mlocateただし、これは基本的にファイルシステムを参照するCプログラムです。 mlocateまた、実行間で変更されていないファイルシステムビットに移動しないでください。

mlocate同様に、データベースを照会することが(とにかく)データベースを実行するよりも遅くなる可能性があるという事実を信じることは困難ですfind /

最終的に、これがlocate私が知っているすべてのツールがデータベースに対して機能する理由です。

関連情報