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);
|
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
|
static size_t
|
||||||
arena_compute_npurgatory(arena_t *arena, bool all)
|
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,
|
arena_chunk_dirty_iter(&arena->chunks_dirty, NULL,
|
||||||
chunks_dirty_iter_cb, (void *)&ndirty);
|
chunks_dirty_iter_cb, (void *)&ndirty);
|
||||||
assert(ndirty == arena->ndirty);
|
assert(ndirty == arena->ndirty);
|
||||||
|
|
||||||
|
ndirty = arena_dirty_count(arena);
|
||||||
|
assert(ndirty == arena->ndirty);
|
||||||
}
|
}
|
||||||
assert(arena->ndirty > arena->npurgatory || all);
|
assert(arena->ndirty > arena->npurgatory || all);
|
||||||
assert((arena->nactive >> opt_lg_dirty_mult) < (arena->ndirty -
|
assert((arena->nactive >> opt_lg_dirty_mult) < (arena->ndirty -
|
||||||
|
Loading…
Reference in New Issue
Block a user