Unionized mtree traversal's tortoise state and btree traversal state
Realistically, because our btree is protected by CoW checksums, the only place we can end up with a cycle is in our mroot chain. This is convenient, as we don't need our btree traversal state when traversing the mroot chain, so we can put both the tortoise state and btree traversal state into a union, theoretically saving some RAM. Unfortunately stack measurements show no change, even though our mtree traversal in on the hot path. I'm not sure why this is. My best guess is that the RAM savings is beneath the compilation noise floor, since we currently only ever create one of these structs.
This commit is contained in:
@@ -3852,7 +3852,7 @@ code = '''
|
||||
uint8_t *seen = malloc((BLOCK_COUNT+7)/8);
|
||||
memset(seen, 0, (BLOCK_COUNT+7)/8);
|
||||
|
||||
lfsr_btree_traversal_t traversal = LFSR_BTREE_TRAVERSAL_INIT;
|
||||
lfsr_btree_traversal_t traversal = LFSR_BTREE_TRAVERSAL;
|
||||
|
||||
for (lfs_block_t i = 0;; i++) {
|
||||
// a bit hacky, but this catches infinite loops
|
||||
@@ -4000,7 +4000,7 @@ code = '''
|
||||
uint8_t *seen = malloc((BLOCK_COUNT+7)/8);
|
||||
memset(seen, 0, (BLOCK_COUNT+7)/8);
|
||||
|
||||
lfsr_btree_traversal_t traversal = LFSR_BTREE_TRAVERSAL_INIT;
|
||||
lfsr_btree_traversal_t traversal = LFSR_BTREE_TRAVERSAL;
|
||||
|
||||
for (lfs_block_t i = 0;; i++) {
|
||||
// a bit hacky, but this catches infinite loops
|
||||
|
||||
@@ -3476,7 +3476,7 @@ code = '''
|
||||
uint8_t *seen = malloc((BLOCK_COUNT+7)/8);
|
||||
memset(seen, 0, (BLOCK_COUNT+7)/8);
|
||||
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL_INIT(
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL(
|
||||
VALIDATE ? LFSR_MTREE_TRAVERSAL_VALIDATE : 0);
|
||||
|
||||
for (lfs_block_t i = 0;; i++) {
|
||||
@@ -3601,7 +3601,7 @@ code = '''
|
||||
uint8_t *seen = malloc((BLOCK_COUNT+7)/8);
|
||||
memset(seen, 0, (BLOCK_COUNT+7)/8);
|
||||
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL_INIT(
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL(
|
||||
VALIDATE ? LFSR_MTREE_TRAVERSAL_VALIDATE : 0);
|
||||
|
||||
for (lfs_block_t i = 0;; i++) {
|
||||
@@ -3737,7 +3737,7 @@ code = '''
|
||||
uint8_t *seen = malloc((BLOCK_COUNT+7)/8);
|
||||
memset(seen, 0, (BLOCK_COUNT+7)/8);
|
||||
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL_INIT(
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL(
|
||||
VALIDATE ? LFSR_MTREE_TRAVERSAL_VALIDATE : 0);
|
||||
|
||||
for (lfs_block_t i = 0;; i++) {
|
||||
@@ -3865,7 +3865,7 @@ code = '''
|
||||
uint8_t *seen = malloc((BLOCK_COUNT+7)/8);
|
||||
memset(seen, 0, (BLOCK_COUNT+7)/8);
|
||||
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL_INIT(
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL(
|
||||
VALIDATE ? LFSR_MTREE_TRAVERSAL_VALIDATE : 0);
|
||||
|
||||
for (lfs_block_t i = 0;; i++) {
|
||||
@@ -4002,7 +4002,7 @@ code = '''
|
||||
uint8_t *seen = malloc((BLOCK_COUNT+7)/8);
|
||||
memset(seen, 0, (BLOCK_COUNT+7)/8);
|
||||
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL_INIT(
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL(
|
||||
VALIDATE ? LFSR_MTREE_TRAVERSAL_VALIDATE : 0);
|
||||
|
||||
for (lfs_block_t i = 0;; i++) {
|
||||
@@ -4166,7 +4166,7 @@ code = '''
|
||||
uint8_t *seen = malloc((BLOCK_COUNT+7)/8);
|
||||
memset(seen, 0, (BLOCK_COUNT+7)/8);
|
||||
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL_INIT(
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL(
|
||||
VALIDATE ? LFSR_MTREE_TRAVERSAL_VALIDATE : 0);
|
||||
|
||||
for (lfs_block_t i = 0;; i++) {
|
||||
@@ -4273,7 +4273,7 @@ code = '''
|
||||
LFSR_ATTR(-1, MROOT, 0, BUF(buffer, d)))) => 0;
|
||||
|
||||
// technically, cycle detection only needs to work when we're validating
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL_INIT(
|
||||
lfsr_mtree_traversal_t traversal = LFSR_MTREE_TRAVERSAL(
|
||||
LFSR_MTREE_TRAVERSAL_VALIDATE);
|
||||
|
||||
for (lfs_block_t i = 0;; i++) {
|
||||
|
||||
Reference in New Issue
Block a user