fix huge OS page count when a timeout happens (issue #711)
This commit is contained in:
parent
1ded6e2dec
commit
70fefec837
10
src/os.c
10
src/os.c
@ -526,14 +526,15 @@ void* _mi_os_alloc_huge_os_pages(size_t pages, int numa_node, mi_msecs_t max_mse
|
|||||||
// We allocate one page at the time to be able to abort if it takes too long
|
// We allocate one page at the time to be able to abort if it takes too long
|
||||||
// or to at least allocate as many as available on the system.
|
// or to at least allocate as many as available on the system.
|
||||||
mi_msecs_t start_t = _mi_clock_start();
|
mi_msecs_t start_t = _mi_clock_start();
|
||||||
size_t page;
|
size_t page = 0;
|
||||||
for (page = 0; page < pages; page++) {
|
while (page < pages) {
|
||||||
// allocate a page
|
// allocate a page
|
||||||
void* addr = start + (page * MI_HUGE_OS_PAGE_SIZE);
|
void* addr = start + (page * MI_HUGE_OS_PAGE_SIZE);
|
||||||
void* p = NULL;
|
void* p = NULL;
|
||||||
int err = _mi_prim_alloc_huge_os_pages(addr, MI_HUGE_OS_PAGE_SIZE, numa_node, &p);
|
int err = _mi_prim_alloc_huge_os_pages(addr, MI_HUGE_OS_PAGE_SIZE, numa_node, &p);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
_mi_warning_message("unable to allocate huge OS page (error: %d (0x%d), address: %p, size: %zx bytes)", err, err, addr, MI_HUGE_OS_PAGE_SIZE);
|
_mi_warning_message("unable to allocate huge OS page (error: %d (0x%d), address: %p, size: %zx bytes)\n", err, err, addr, MI_HUGE_OS_PAGE_SIZE);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Did we succeed at a contiguous address?
|
// Did we succeed at a contiguous address?
|
||||||
@ -547,6 +548,7 @@ void* _mi_os_alloc_huge_os_pages(size_t pages, int numa_node, mi_msecs_t max_mse
|
|||||||
}
|
}
|
||||||
|
|
||||||
// success, record it
|
// success, record it
|
||||||
|
page++; // increase before timeout check (see issue #711)
|
||||||
_mi_stat_increase(&_mi_stats_main.committed, MI_HUGE_OS_PAGE_SIZE);
|
_mi_stat_increase(&_mi_stats_main.committed, MI_HUGE_OS_PAGE_SIZE);
|
||||||
_mi_stat_increase(&_mi_stats_main.reserved, MI_HUGE_OS_PAGE_SIZE);
|
_mi_stat_increase(&_mi_stats_main.reserved, MI_HUGE_OS_PAGE_SIZE);
|
||||||
|
|
||||||
@ -560,7 +562,7 @@ void* _mi_os_alloc_huge_os_pages(size_t pages, int numa_node, mi_msecs_t max_mse
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (elapsed > max_msecs) {
|
if (elapsed > max_msecs) {
|
||||||
_mi_warning_message("huge page allocation timed out\n");
|
_mi_warning_message("huge OS page allocation timed out (after allocating %zu page(s))\n", page);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user