add environment option to reserve huge pages upfront

This commit is contained in:
daan 2019-08-19 14:14:50 -07:00
parent 741f37e1f0
commit 0e639addb0
4 changed files with 10 additions and 1 deletions

View file

@ -228,6 +228,7 @@ typedef enum mi_option_e {
mi_option_eager_commit,
mi_option_eager_region_commit,
mi_option_large_os_pages, // implies eager commit
mi_option_reserve_huge_os_pages,
mi_option_page_reset,
mi_option_cache_reset,
mi_option_reset_decommits,

View file

@ -422,6 +422,12 @@ static void mi_process_load(void) {
const char* msg = NULL;
mi_allocator_init(&msg);
if (msg != NULL) _mi_verbose_message(msg);
if (mi_option_is_enabled(mi_option_reserve_huge_os_pages)) {
size_t pages = mi_option_get(mi_option_reserve_huge_os_pages);
double max_secs = (double)pages / 10.0; // 0.1s per page
mi_reserve_huge_os_pages(pages, max_secs);
}
}
// Initialize the process; called by thread_init or the process loader

View file

@ -58,6 +58,7 @@ static mi_option_desc_t options[_mi_option_last] =
{ 1, UNINIT, "eager_region_commit" },
#endif
{ 0, UNINIT, "large_os_pages" }, // use large OS pages, use only with eager commit to prevent fragmentation of VMA's
{ 0, UNINIT, "reserve_huge_os_pages" },
{ 0, UNINIT, "page_reset" },
{ 0, UNINIT, "cache_reset" },
{ 0, UNINIT, "reset_decommits" }, // note: cannot enable this if secure is on

View file

@ -108,7 +108,7 @@ void _mi_os_init(void) {
}
// Try to see if large OS pages are supported
unsigned long err = 0;
bool ok = mi_option_is_enabled(mi_option_large_os_pages);
bool ok = mi_option_is_enabled(mi_option_large_os_pages) || mi_option_is_enabled(mi_option_reserve_huge_os_pages);
if (ok) {
// To use large pages on Windows, we first need access permission
// Set "Lock pages in memory" permission in the group policy editor
@ -788,6 +788,7 @@ int mi_reserve_huge_os_pages( size_t pages, double max_secs ) mi_attr_noexcept
if (estimate > 1.5*max_secs) return (-1); // seems like we are going to timeout
}
}
_mi_verbose_message("reserved %zu huge pages\n", pages);
return 0;
}
#endif