]> 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)
committerDmitry Stogov <dmitry@zend.com>
Thu, 17 Mar 2016 19:43:42 +0000 (22:43 +0300)
NEWS
Zend/zend_alloc.c

diff --git a/NEWS b/NEWS
index 4ce40fbcd75b3927020a29b3da11c6aae548eea4..e8325957feb2f7a242388fc24c83dc10637a5374 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ PHP                                                                        NEWS
 ?? ??? 2016 PHP 7.0.6
 
 - Core: 
+  . Added ability to disable huge pages in Zend Memeory Manager through
+    the environment variable USE_ZEND_ALLOC_HUGE_PAGES=0. (Dmitry)
   . Fixed bug #71841 (EG(error_zval) is not handled well). (Laruence)
 
 - ODBC:
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();