Skip to content

Commit 1a4d2dd

Browse files
authored
zend alloc USE_ZEND_ALLOC_HUGE_PAGES option support on solaris based systems (#7789)
1 parent aa35499 commit 1a4d2dd

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

Zend/zend_alloc.c

+14-6
Original file line numberDiff line numberDiff line change
@@ -662,18 +662,28 @@ static zend_always_inline int zend_mm_bitset_is_free_range(zend_mm_bitset *bitse
662662
/* Chunks */
663663
/**********/
664664

665+
static zend_always_inline void zend_mm_hugepage(void* ptr, size_t size)
666+
{
667+
#if defined(MADV_HUGEPAGE)
668+
(void)madvise(ptr, size, MADV_HUGEPAGE);
669+
#elif defined(HAVE_MEMCNTL)
670+
struct memcntl_mha m = {.mha_cmd = MHA_MAPSIZE_VA, .mha_pagesize = ZEND_MM_CHUNK_SIZE, .mha_flags = 0};
671+
(void)memcntl(ptr, size, MC_HAT_ADVISE, (char *)&m, 0, 0);
672+
#else
673+
zend_error_noreturn(E_WARNING, "huge_pages: thp unsupported on this platform");
674+
#endif
675+
}
676+
665677
static void *zend_mm_chunk_alloc_int(size_t size, size_t alignment)
666678
{
667679
void *ptr = zend_mm_mmap(size);
668680

669681
if (ptr == NULL) {
670682
return NULL;
671683
} else if (ZEND_MM_ALIGNED_OFFSET(ptr, alignment) == 0) {
672-
#ifdef MADV_HUGEPAGE
673684
if (zend_mm_use_huge_pages) {
674-
madvise(ptr, size, MADV_HUGEPAGE);
685+
zend_mm_hugepage(ptr, size);
675686
}
676-
#endif
677687
return ptr;
678688
} else {
679689
size_t offset;
@@ -702,11 +712,9 @@ static void *zend_mm_chunk_alloc_int(size_t size, size_t alignment)
702712
if (alignment > REAL_PAGE_SIZE) {
703713
zend_mm_munmap((char*)ptr + size, alignment - REAL_PAGE_SIZE);
704714
}
705-
# ifdef MADV_HUGEPAGE
706715
if (zend_mm_use_huge_pages) {
707-
madvise(ptr, size, MADV_HUGEPAGE);
716+
zend_mm_hugepage(ptr, size);
708717
}
709-
# endif
710718
#endif
711719
return ptr;
712720
}

configure.ac

+1
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,7 @@ inet_ntop \
587587
inet_pton \
588588
localtime_r \
589589
lchown \
590+
memcntl \
590591
memmove \
591592
mkstemp \
592593
mmap \

0 commit comments

Comments
 (0)