diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2017-03-20 20:53:43 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2017-03-20 20:53:43 -0400 |
commit | c32385d4c8eb0e54af27712ff3fc82df1bda01e8 (patch) | |
tree | 1b600020913daea141aee44ef7bce8743f3ccaa7 /exec.c | |
parent | 139405503359f97867cbcb3cd580b4efde60a02d (diff) | |
download | bfs-c32385d4c8eb0e54af27712ff3fc82df1bda01e8.tar.xz |
bftw: Fix quadratic reference counting complexity
dircache_entry refcounts used to count every single descendant,
resulting in n refcount updates to create/delete an entry at depth n,
and thus O(n^2) complexity overall for deep directory structures.
Fix it by only counting direct children instead. The cache eviction
policy is changed to prefer shallower entries in all cases, attempting
to save at least some of the benefit of the previous accounting scheme.
Unfortunately, the average number of traversed components for openat()
calls still went up by ~20%, but the performance in practice is roughly
unchanged in my tests.
Diffstat (limited to 'exec.c')
0 files changed, 0 insertions, 0 deletions