Add dirty page counting for debug
This commit is contained in:
parent
04d60a132b
commit
a244e5078e
25
src/arena.c
25
src/arena.c
@ -930,6 +930,28 @@ chunks_dirty_iter_cb(arena_chunk_tree_t *tree, arena_chunk_t *chunk, void *arg)
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
static size_t
|
||||
arena_dirty_count(arena_t *arena)
|
||||
{
|
||||
size_t ndirty = 0;
|
||||
arena_chunk_map_t *mapelm;
|
||||
arena_chunk_t *chunk;
|
||||
size_t pageind, npages;
|
||||
|
||||
ql_foreach(mapelm, &arena->runs_dirty, dr_link) {
|
||||
chunk = (arena_chunk_t *)CHUNK_ADDR2BASE(mapelm);
|
||||
pageind = arena_mapelm_to_pageind(mapelm);
|
||||
assert(arena_mapbits_allocated_get(chunk, pageind) == 0);
|
||||
assert(arena_mapbits_large_get(chunk, pageind) == 0);
|
||||
assert(arena_mapbits_dirty_get(chunk, pageind) != 0);
|
||||
npages = arena_mapbits_unallocated_size_get(chunk, pageind) >>
|
||||
LG_PAGE;
|
||||
ndirty += npages;
|
||||
}
|
||||
|
||||
return (ndirty);
|
||||
}
|
||||
|
||||
static size_t
|
||||
arena_compute_npurgatory(arena_t *arena, bool all)
|
||||
{
|
||||
@ -1134,6 +1156,9 @@ arena_purge(arena_t *arena, bool all)
|
||||
arena_chunk_dirty_iter(&arena->chunks_dirty, NULL,
|
||||
chunks_dirty_iter_cb, (void *)&ndirty);
|
||||
assert(ndirty == arena->ndirty);
|
||||
|
||||
ndirty = arena_dirty_count(arena);
|
||||
assert(ndirty == arena->ndirty);
|
||||
}
|
||||
assert(arena->ndirty > arena->npurgatory || all);
|
||||
assert((arena->nactive >> opt_lg_dirty_mult) < (arena->ndirty -
|
||||
|
Loading…
Reference in New Issue
Block a user