From 04fa614dd2c7b5fa65e251042eb48ab0add80a72 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Fri, 3 Jul 2020 10:49:14 +0100 Subject: [PATCH] zend_alloc little performance boost on illumos for large pages. When USE_ZEND_ALLOC_HUGE_PAGES environment is set, align to ZEND_MM_CHUNK_SIZE enabling implictly large page support. Since it s "cherry on cake", not big deal if it does not occur tough, but succeed with tests. --- Zend/zend_alloc.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c index 753a8b830d4e3..115fb175c4395 100644 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@ -668,10 +668,18 @@ static void *zend_mm_chunk_alloc_int(size_t size, size_t alignment) if (ptr == NULL) { return NULL; } else if (ZEND_MM_ALIGNED_OFFSET(ptr, alignment) == 0) { -#ifdef MADV_HUGEPAGE +#if defined(MADV_HUGEPAGE) if (zend_mm_use_huge_pages) { madvise(ptr, size, MADV_HUGEPAGE); } +#elif defined(__sun) + if (zend_mm_use_huge_pages) { + struct memcntl_mha m; + m.mha_cmd = MHA_MAPSIZE_VA; + m.mha_pagesize = ZEND_MM_CHUNK_SIZE; + m.mha_flags = 0; + (void)memcntl(ptr, size, MC_HAT_ADVISE, (caddr_t)&m, 0, 0); + } #endif return ptr; } else { @@ -701,10 +709,18 @@ static void *zend_mm_chunk_alloc_int(size_t size, size_t alignment) if (alignment > REAL_PAGE_SIZE) { zend_mm_munmap((char*)ptr + size, alignment - REAL_PAGE_SIZE); } -# ifdef MADV_HUGEPAGE +# if defined(MADV_HUGEPAGE) if (zend_mm_use_huge_pages) { madvise(ptr, size, MADV_HUGEPAGE); } +# elif defined(__sun) + if (zend_mm_use_huge_pages) { + struct memcntl_mha m; + m.mha_cmd = MHA_MAPSIZE_VA; + m.mha_pagesize = ZEND_MM_CHUNK_SIZE; + m.mha_flags = 0; + (void)memcntl(ptr, size, MC_HAT_ADVISE, (caddr_t)&m, 0, 0); + } # endif #endif return ptr;