bfs 3.0 will do opendir() + readdir() asynchronously and in parallel. ## Preparation - [x] #99 ## Implementaton - [x] #100 ## Optimization - [x] Do readdir()/getdents() from the background thread - [x] Pre-allocate the highest FD to avoid kernel contention resizing the FD table - [x] #102 - [x] #104 - [x] #65 - [x] `openat()` - [ ] `getdents()` (if added to io_uring) - [x] `statx()`? ## Benchmarking Try to quantify improvement and avoid regressions in these scenarios: - [x] Complete traversal of - [x] Small trees (e.g. bfs itself) - [x] Medium trees (e.g. Linux) - [x] Large trees (e.g. Android) - [x] Early termination, as a proxy for interactive use (`bfs -name <something unique> -quit`) - [x] Shallow file - [x] Medium file - [x] Deep file - [x] Search strategies - [x] bfs - [x] dfs - [x] ids - [x] eds - [x] Cold page/buffer cache
bfs 3.0 will do opendir() + readdir() asynchronously and in parallel.
Preparation
Implementaton
Optimization
openat()getdents()(if added to io_uring)statx()?Benchmarking
Try to quantify improvement and avoid regressions in these scenarios:
Complete traversal of
Early termination, as a proxy for interactive use (
bfs -name <something unique> -quit)Search strategies
Cold page/buffer cache