mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-07-24 05:33:06 +00:00
HPA: Make purging/hugifying more principled.
Before this change, purge/hugify decisions had several sharp edges that could lead to pathological behavior if tuning parameters weren't carefully chosen. It's the first of a series; this introduces basic "make every hugepage with dirty pages purgeable" functionality, and the next commit expands that functionality to have a smarter policy for picking hugepages to purge. Previously, the dehugify logic would *never* dehugify a hugepage unless it was dirtier than the dehugification threshold. This can lead to situations in which these pages (which themselves could never be purged) would push us above the maximum allowed dirty pages in the shard. This forces immediate purging of any pages deallocated in non-hugified hugepages, which in turn places nonobvious practical limitations on the relationships between various config settings. Instead, we make our preference not to dehugify to purge a soft one rather than a hard one. We'll avoid purging them, but only so long as we can do so by purging non-hugified pages. If we need to purge them to satisfy our dirty page limits, or to hugify other, more worthy candidates, we'll still do so.
This commit is contained in:
committed by
David Goldblatt
parent
6bddb92ad6
commit
0f6c420f83
@@ -24,8 +24,8 @@ hpdata_init(hpdata_t *hpdata, void *addr, uint64_t age) {
|
||||
hpdata->h_huge = false;
|
||||
hpdata->h_alloc_allowed = true;
|
||||
hpdata->h_in_psset_alloc_container = false;
|
||||
hpdata->h_purge_allowed = false;
|
||||
hpdata->h_in_psset_purge_container = false;
|
||||
hpdata->h_purge_level = hpdata_purge_level_never;
|
||||
hpdata->h_purge_container_level = hpdata_purge_level_never;
|
||||
hpdata->h_hugify_allowed = false;
|
||||
hpdata->h_in_psset_hugify_container = false;
|
||||
hpdata->h_mid_purge = false;
|
||||
|
||||
Reference in New Issue
Block a user