]> granicus.if.org Git - php/commitdiff
Added ability to disable huge pages in Zend Memeory Manager through the environment...
authorDmitry Stogov <dmitry@zend.com>
Thu, 17 Mar 2016 19:43:42 +0000 (22:43 +0300)
committerAnatol Belski <ab@php.net>
Wed, 23 Mar 2016 11:23:03 +0000 (12:23 +0100)
Zend/zend_alloc.c

index 6f0542e1696ad8b2aed47d17f10de105a50c771d..4cf1178c570089d54aabd250f22e9c9648d765a7 100644 (file)
@@ -200,6 +200,10 @@ typedef struct  _zend_mm_huge_list zend_mm_huge_list;
 # define PTR_FMT "0x%0.8lx"
 #endif
 
+#ifdef MAP_HUGETLB
+int zend_mm_use_huge_pages = 1;
+#endif
+
 /*
  * Memory is retrived from OS by chunks of fixed size 2MB.
  * Inside chunk it's managed by pages of fixed size 4096B.
@@ -462,7 +466,7 @@ static void *zend_mm_mmap(size_t size)
        void *ptr;
 
 #ifdef MAP_HUGETLB
-       if (size == ZEND_MM_CHUNK_SIZE) {
+       if (zend_mm_use_huge_pages && size == ZEND_MM_CHUNK_SIZE) {
                ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON | MAP_HUGETLB, -1, 0);
                if (ptr != MAP_FAILED) {
                        return ptr;
@@ -2647,6 +2651,12 @@ static void alloc_globals_ctor(zend_alloc_globals *alloc_globals)
                alloc_globals->mm_heap->custom_heap.std._realloc = realloc;
                return;
        }
+#endif
+#ifdef MAP_HUGETLB
+       tmp = getenv("USE_ZEND_ALLOC_HUGE_PAGES");
+       if (tmp && !zend_atoi(tmp, 0)) {
+               zend_mm_use_huge_pages = 0;
+       }
 #endif
        ZEND_TSRMLS_CACHE_UPDATE();
        alloc_globals->mm_heap = zend_mm_init();