Skip to content

Commit

Permalink
Reduced ctz traverse runtime by 2x
Browse files Browse the repository at this point in the history
Unfortunately for us, the ctz skip-list does not offer very much benefit
for full traversals. Since the information about which blocks are in
use are spread throughout the file, we can't use the fast-lanes
embedded in the skip-list without missing blocks.

However, it turns out we can at least use the 2nd level of the skip-list
without missing any blocks. From an asymptotic analysis, a constant speed
up isn't interesting, but from a pragmatic perspective, a 2x speedup is
not bad.
  • Loading branch information
geky committed Jan 12, 2018
1 parent db88727 commit 1fb6a19
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions lfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1195,12 +1195,22 @@ static int lfs_ctz_traverse(lfs_t *lfs,
return 0;
}

err = lfs_cache_read(lfs, rcache, pcache, head, 0, &head, 4);
lfs_block_t heads[2];
int count = 2 - (index & 1);
err = lfs_cache_read(lfs, rcache, pcache, head, 0, &heads, count*4);
if (err) {
return err;
}

index -= 1;
for (int i = 0; i < count-1; i++) {
err = cb(data, heads[i]);
if (err) {
return err;
}
}

head = heads[count-1];
index -= count;
}
}

Expand Down

0 comments on commit 1fb6a19

Please sign in to comment.