psset: Rename "bitmap" to "pageslab_bitmap".
It tracks pageslabs. Soon, we'll have another bitmap (to track dirty pages) that we want to disambiguate. While we're here, fix an out-of-date comment.
This commit is contained in:
parent
154aa5fcc1
commit
6bddb92ad6
@ -57,7 +57,7 @@ struct psset_s {
|
|||||||
*/
|
*/
|
||||||
hpdata_age_heap_t pageslabs[PSSET_NPSIZES];
|
hpdata_age_heap_t pageslabs[PSSET_NPSIZES];
|
||||||
/* Bitmap for which set bits correspond to non-empty heaps. */
|
/* Bitmap for which set bits correspond to non-empty heaps. */
|
||||||
fb_group_t bitmap[FB_NGROUPS(PSSET_NPSIZES)];
|
fb_group_t pageslab_bitmap[FB_NGROUPS(PSSET_NPSIZES)];
|
||||||
/*
|
/*
|
||||||
* The sum of all bin stats in stats. This lets us quickly answer
|
* The sum of all bin stats in stats. This lets us quickly answer
|
||||||
* queries for the number of dirty, active, and retained pages in the
|
* queries for the number of dirty, active, and retained pages in the
|
||||||
|
19
src/psset.c
19
src/psset.c
@ -10,7 +10,7 @@ psset_init(psset_t *psset) {
|
|||||||
for (unsigned i = 0; i < PSSET_NPSIZES; i++) {
|
for (unsigned i = 0; i < PSSET_NPSIZES; i++) {
|
||||||
hpdata_age_heap_new(&psset->pageslabs[i]);
|
hpdata_age_heap_new(&psset->pageslabs[i]);
|
||||||
}
|
}
|
||||||
fb_init(psset->bitmap, PSSET_NPSIZES);
|
fb_init(psset->pageslab_bitmap, PSSET_NPSIZES);
|
||||||
memset(&psset->merged_stats, 0, sizeof(psset->merged_stats));
|
memset(&psset->merged_stats, 0, sizeof(psset->merged_stats));
|
||||||
memset(&psset->stats, 0, sizeof(psset->stats));
|
memset(&psset->stats, 0, sizeof(psset->stats));
|
||||||
hpdata_empty_list_init(&psset->empty);
|
hpdata_empty_list_init(&psset->empty);
|
||||||
@ -40,14 +40,9 @@ psset_stats_accum(psset_stats_t *dst, psset_stats_t *src) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The stats maintenance strategy is simple, but not necessarily obvious.
|
* The stats maintenance strategy is to remove a pageslab's contribution to the
|
||||||
* edata_nfree and the bitmap must remain consistent at all times. If they
|
* stats when we call psset_update_begin, and re-add it (to a potentially new
|
||||||
* change while an edata is within an edata_heap (or full), then the associated
|
* bin) when we call psset_update_end.
|
||||||
* stats bin (or the full bin) must also change. If they change while not in a
|
|
||||||
* bin (say, in between extraction and reinsertion), then the bin stats need not
|
|
||||||
* change. If a pageslab is removed from a bin (or becomes nonfull), it should
|
|
||||||
* no longer contribute to that bin's stats (or the full stats). These help
|
|
||||||
* ensure we don't miss any heap modification operations.
|
|
||||||
*/
|
*/
|
||||||
JEMALLOC_ALWAYS_INLINE void
|
JEMALLOC_ALWAYS_INLINE void
|
||||||
psset_bin_stats_insert_remove(psset_t *psset, psset_bin_stats_t *binstats,
|
psset_bin_stats_insert_remove(psset_t *psset, psset_bin_stats_t *binstats,
|
||||||
@ -98,14 +93,14 @@ static void
|
|||||||
psset_hpdata_heap_remove(psset_t *psset, pszind_t pind, hpdata_t *ps) {
|
psset_hpdata_heap_remove(psset_t *psset, pszind_t pind, hpdata_t *ps) {
|
||||||
hpdata_age_heap_remove(&psset->pageslabs[pind], ps);
|
hpdata_age_heap_remove(&psset->pageslabs[pind], ps);
|
||||||
if (hpdata_age_heap_empty(&psset->pageslabs[pind])) {
|
if (hpdata_age_heap_empty(&psset->pageslabs[pind])) {
|
||||||
fb_unset(psset->bitmap, PSSET_NPSIZES, (size_t)pind);
|
fb_unset(psset->pageslab_bitmap, PSSET_NPSIZES, (size_t)pind);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
psset_hpdata_heap_insert(psset_t *psset, pszind_t pind, hpdata_t *ps) {
|
psset_hpdata_heap_insert(psset_t *psset, pszind_t pind, hpdata_t *ps) {
|
||||||
if (hpdata_age_heap_empty(&psset->pageslabs[pind])) {
|
if (hpdata_age_heap_empty(&psset->pageslabs[pind])) {
|
||||||
fb_set(psset->bitmap, PSSET_NPSIZES, (size_t)pind);
|
fb_set(psset->pageslab_bitmap, PSSET_NPSIZES, (size_t)pind);
|
||||||
}
|
}
|
||||||
hpdata_age_heap_insert(&psset->pageslabs[pind], ps);
|
hpdata_age_heap_insert(&psset->pageslabs[pind], ps);
|
||||||
}
|
}
|
||||||
@ -263,7 +258,7 @@ psset_pick_alloc(psset_t *psset, size_t size) {
|
|||||||
assert(size <= HUGEPAGE);
|
assert(size <= HUGEPAGE);
|
||||||
|
|
||||||
pszind_t min_pind = sz_psz2ind(sz_psz_quantize_ceil(size));
|
pszind_t min_pind = sz_psz2ind(sz_psz_quantize_ceil(size));
|
||||||
pszind_t pind = (pszind_t)fb_ffs(psset->bitmap, PSSET_NPSIZES,
|
pszind_t pind = (pszind_t)fb_ffs(psset->pageslab_bitmap, PSSET_NPSIZES,
|
||||||
(size_t)min_pind);
|
(size_t)min_pind);
|
||||||
if (pind == PSSET_NPSIZES) {
|
if (pind == PSSET_NPSIZES) {
|
||||||
return hpdata_empty_list_first(&psset->empty);
|
return hpdata_empty_list_first(&psset->empty);
|
||||||
|
Loading…
Reference in New Issue
Block a user