Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Check the pattern before anything else, since it doesn't require meta…
…data This should partially address sharkdp#432 by decreasing the number of stat() calls: $ strace -c -f ./fd-before '\.h$' /usr -j1 -S +1k >/dev/null % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 15.71 8.831948 7 1192279 46059 stat $ strace -c -f ./fd-after '\.h$' /usr -j1 -S +1k >/dev/null % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 7.92 1.972474 10 183907 46046 stat Though it's not as few as possible: $ strace -c -f find /usr -iname '*.h' -size +1k >/dev/null % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 19.01 0.946500 5 161649 newfstatat $ strace -c -f bfs /usr -iname '*.h' -size +1k >/dev/null % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 13.73 0.406565 5 69005 statx Performance is much better when metadata is required: $ hyperfine ./fd-{before,after}" '\.h$' /usr -j1 -S +1k" Benchmark sharkdp#1: ./fd-before '\.h$' /usr -j1 -S +1k Time (mean ± σ): 4.623 s ± 0.154 s [User: 1.465 s, System: 3.354 s] Range (min … max): 4.327 s … 4.815 s 10 runs Benchmark sharkdp#2: ./fd-after '\.h$' /usr -j1 -S +1k Time (mean ± σ): 2.650 s ± 0.058 s [User: 1.258 s, System: 1.592 s] Range (min … max): 2.568 s … 2.723 s 10 runs Summary './fd-after '\.h$' /usr -j1 -S +1k' ran 1.74 ± 0.07 times faster than './fd-before '\.h$' /usr -j1 -S +1k' While remaining the same when it's not: $ hyperfine ./fd-{before,after}" '.h$' /usr -j1" Benchmark sharkdp#1: ./fd-before '.h$' /usr -j1 Time (mean ± σ): 2.314 s ± 0.052 s [User: 1.185 s, System: 1.291 s] Range (min … max): 2.260 s … 2.441 s 10 runs Benchmark sharkdp#2: ./fd-after '.h$' /usr -j1 Time (mean ± σ): 2.316 s ± 0.040 s [User: 1.162 s, System: 1.315 s] Range (min … max): 2.263 s … 2.375 s 10 runs Summary './fd-before '.h$' /usr -j1' ran 1.00 ± 0.03 times faster than './fd-after '.h$' /usr -j1'
- Loading branch information