|
34 | 34 | #include "zend_vm.h"
|
35 | 35 | #include "zend_inheritance.h"
|
36 | 36 | #include "zend_exceptions.h"
|
37 |
| -#include "zend_mmap.h" |
38 | 37 | #include "zend_observer.h"
|
39 | 38 | #include "main/php_main.h"
|
40 | 39 | #include "main/SAPI.h"
|
@@ -2949,174 +2948,6 @@ static void accel_globals_ctor(zend_accel_globals *accel_globals)
|
2949 | 2948 | memset(accel_globals, 0, sizeof(zend_accel_globals));
|
2950 | 2949 | }
|
2951 | 2950 |
|
2952 |
| -#ifdef HAVE_HUGE_CODE_PAGES |
2953 |
| -# ifndef _WIN32 |
2954 |
| -# include <sys/mman.h> |
2955 |
| -# ifndef MAP_ANON |
2956 |
| -# ifdef MAP_ANONYMOUS |
2957 |
| -# define MAP_ANON MAP_ANONYMOUS |
2958 |
| -# endif |
2959 |
| -# endif |
2960 |
| -# ifndef MAP_FAILED |
2961 |
| -# define MAP_FAILED ((void*)-1) |
2962 |
| -# endif |
2963 |
| -# ifdef MAP_ALIGNED_SUPER |
2964 |
| -# include <sys/types.h> |
2965 |
| -# include <sys/sysctl.h> |
2966 |
| -# include <sys/user.h> |
2967 |
| -# define MAP_HUGETLB MAP_ALIGNED_SUPER |
2968 |
| -# endif |
2969 |
| -# endif |
2970 |
| - |
2971 |
| -# if defined(MAP_HUGETLB) || defined(MADV_HUGEPAGE) |
2972 |
| -static zend_result accel_remap_huge_pages(void *start, size_t size, size_t real_size, const char *name, size_t offset) |
2973 |
| -{ |
2974 |
| - void *ret = MAP_FAILED; |
2975 |
| - void *mem; |
2976 |
| - |
2977 |
| - mem = mmap(NULL, size, |
2978 |
| - PROT_READ | PROT_WRITE, |
2979 |
| - MAP_PRIVATE | MAP_ANONYMOUS, |
2980 |
| - -1, 0); |
2981 |
| - if (mem == MAP_FAILED) { |
2982 |
| - zend_error(E_WARNING, |
2983 |
| - ACCELERATOR_PRODUCT_NAME " huge_code_pages: mmap failed: %s (%d)", |
2984 |
| - strerror(errno), errno); |
2985 |
| - return FAILURE; |
2986 |
| - } |
2987 |
| - memcpy(mem, start, real_size); |
2988 |
| - |
2989 |
| -# ifdef MAP_HUGETLB |
2990 |
| - ret = mmap(start, size, |
2991 |
| - PROT_READ | PROT_WRITE | PROT_EXEC, |
2992 |
| - MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED | MAP_HUGETLB, |
2993 |
| - -1, 0); |
2994 |
| -# endif |
2995 |
| - if (ret == MAP_FAILED) { |
2996 |
| - ret = mmap(start, size, |
2997 |
| - PROT_READ | PROT_WRITE | PROT_EXEC, |
2998 |
| - MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, |
2999 |
| - -1, 0); |
3000 |
| - /* this should never happen? */ |
3001 |
| - ZEND_ASSERT(ret != MAP_FAILED); |
3002 |
| -# ifdef MADV_HUGEPAGE |
3003 |
| - if (-1 == madvise(start, size, MADV_HUGEPAGE)) { |
3004 |
| - memcpy(start, mem, real_size); |
3005 |
| - mprotect(start, size, PROT_READ | PROT_EXEC); |
3006 |
| - munmap(mem, size); |
3007 |
| - zend_error(E_WARNING, |
3008 |
| - ACCELERATOR_PRODUCT_NAME " huge_code_pages: madvise(HUGEPAGE) failed: %s (%d)", |
3009 |
| - strerror(errno), errno); |
3010 |
| - return FAILURE; |
3011 |
| - } |
3012 |
| -# else |
3013 |
| - memcpy(start, mem, real_size); |
3014 |
| - mprotect(start, size, PROT_READ | PROT_EXEC); |
3015 |
| - munmap(mem, size); |
3016 |
| - zend_error(E_WARNING, |
3017 |
| - ACCELERATOR_PRODUCT_NAME " huge_code_pages: mmap(HUGETLB) failed: %s (%d)", |
3018 |
| - strerror(errno), errno); |
3019 |
| - return FAILURE; |
3020 |
| -# endif |
3021 |
| - } |
3022 |
| - |
3023 |
| - // Given the MAP_FIXED flag the address can never diverge |
3024 |
| - ZEND_ASSERT(ret == start); |
3025 |
| - zend_mmap_set_name(start, size, "zend_huge_code_pages"); |
3026 |
| - memcpy(start, mem, real_size); |
3027 |
| - mprotect(start, size, PROT_READ | PROT_EXEC); |
3028 |
| - |
3029 |
| - munmap(mem, size); |
3030 |
| - |
3031 |
| - return SUCCESS; |
3032 |
| -} |
3033 |
| - |
3034 |
| -static void accel_move_code_to_huge_pages(void) |
3035 |
| -{ |
3036 |
| -#if defined(__linux__) |
3037 |
| - FILE *f; |
3038 |
| - long unsigned int huge_page_size = 2 * 1024 * 1024; |
3039 |
| - |
3040 |
| - f = fopen("/proc/self/maps", "r"); |
3041 |
| - if (f) { |
3042 |
| - long unsigned int start, end, offset, inode; |
3043 |
| - char perm[5], dev[10], name[MAXPATHLEN]; |
3044 |
| - int ret; |
3045 |
| - |
3046 |
| - while (1) { |
3047 |
| - ret = fscanf(f, "%lx-%lx %4s %lx %9s %ld %s\n", &start, &end, perm, &offset, dev, &inode, name); |
3048 |
| - if (ret == 7) { |
3049 |
| - if (perm[0] == 'r' && perm[1] == '-' && perm[2] == 'x' && name[0] == '/') { |
3050 |
| - long unsigned int seg_start = ZEND_MM_ALIGNED_SIZE_EX(start, huge_page_size); |
3051 |
| - long unsigned int seg_end = (end & ~(huge_page_size-1L)); |
3052 |
| - long unsigned int real_end; |
3053 |
| - |
3054 |
| - ret = fscanf(f, "%lx-", &start); |
3055 |
| - if (ret == 1 && start == seg_end + huge_page_size) { |
3056 |
| - real_end = end; |
3057 |
| - seg_end = start; |
3058 |
| - } else { |
3059 |
| - real_end = seg_end; |
3060 |
| - } |
3061 |
| - |
3062 |
| - if (seg_end > seg_start) { |
3063 |
| - zend_accel_error(ACCEL_LOG_DEBUG, "remap to huge page %lx-%lx %s \n", seg_start, seg_end, name); |
3064 |
| - accel_remap_huge_pages((void*)seg_start, seg_end - seg_start, real_end - seg_start, name, offset + seg_start - start); |
3065 |
| - } |
3066 |
| - break; |
3067 |
| - } |
3068 |
| - } else { |
3069 |
| - break; |
3070 |
| - } |
3071 |
| - } |
3072 |
| - fclose(f); |
3073 |
| - } |
3074 |
| -#elif defined(__FreeBSD__) |
3075 |
| - size_t s = 0; |
3076 |
| - int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_VMMAP, getpid()}; |
3077 |
| - long unsigned int huge_page_size = 2 * 1024 * 1024; |
3078 |
| - if (sysctl(mib, 4, NULL, &s, NULL, 0) == 0) { |
3079 |
| - s = s * 4 / 3; |
3080 |
| - void *addr = mmap(NULL, s, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); |
3081 |
| - if (addr != MAP_FAILED) { |
3082 |
| - if (sysctl(mib, 4, addr, &s, NULL, 0) == 0) { |
3083 |
| - uintptr_t start = (uintptr_t)addr; |
3084 |
| - uintptr_t end = start + s; |
3085 |
| - while (start < end) { |
3086 |
| - struct kinfo_vmentry *entry = (struct kinfo_vmentry *)start; |
3087 |
| - size_t sz = entry->kve_structsize; |
3088 |
| - if (sz == 0) { |
3089 |
| - break; |
3090 |
| - } |
3091 |
| - int permflags = entry->kve_protection; |
3092 |
| - if ((permflags & KVME_PROT_READ) && !(permflags & KVME_PROT_WRITE) && |
3093 |
| - (permflags & KVME_PROT_EXEC) && entry->kve_path[0] != '\0') { |
3094 |
| - long unsigned int seg_start = ZEND_MM_ALIGNED_SIZE_EX(start, huge_page_size); |
3095 |
| - long unsigned int seg_end = (end & ~(huge_page_size-1L)); |
3096 |
| - if (seg_end > seg_start) { |
3097 |
| - zend_accel_error(ACCEL_LOG_DEBUG, "remap to huge page %lx-%lx %s \n", seg_start, seg_end, entry->kve_path); |
3098 |
| - accel_remap_huge_pages((void*)seg_start, seg_end - seg_start, seg_end - seg_start, entry->kve_path, entry->kve_offset + seg_start - start); |
3099 |
| - // First relevant segment found is our binary |
3100 |
| - break; |
3101 |
| - } |
3102 |
| - } |
3103 |
| - start += sz; |
3104 |
| - } |
3105 |
| - } |
3106 |
| - munmap(addr, s); |
3107 |
| - } |
3108 |
| - } |
3109 |
| -#endif |
3110 |
| -} |
3111 |
| -# else |
3112 |
| -static void accel_move_code_to_huge_pages(void) |
3113 |
| -{ |
3114 |
| - zend_error(E_WARNING, ACCELERATOR_PRODUCT_NAME ": opcache.huge_code_pages has no affect as huge page is not supported"); |
3115 |
| - return; |
3116 |
| -} |
3117 |
| -# endif /* defined(MAP_HUGETLB) || defined(MADV_HUGEPAGE) */ |
3118 |
| -#endif /* HAVE_HUGE_CODE_PAGES */ |
3119 |
| - |
3120 | 2951 | static int accel_startup(zend_extension *extension)
|
3121 | 2952 | {
|
3122 | 2953 | #ifdef ZTS
|
@@ -3148,16 +2979,6 @@ static int accel_startup(zend_extension *extension)
|
3148 | 2979 | }
|
3149 | 2980 | #endif
|
3150 | 2981 |
|
3151 |
| -#ifdef HAVE_HUGE_CODE_PAGES |
3152 |
| - if (ZCG(accel_directives).huge_code_pages && |
3153 |
| - (strcmp(sapi_module.name, "cli") == 0 || |
3154 |
| - strcmp(sapi_module.name, "cli-server") == 0 || |
3155 |
| - strcmp(sapi_module.name, "cgi-fcgi") == 0 || |
3156 |
| - strcmp(sapi_module.name, "fpm-fcgi") == 0)) { |
3157 |
| - accel_move_code_to_huge_pages(); |
3158 |
| - } |
3159 |
| -#endif |
3160 |
| - |
3161 | 2982 | /* no supported SAPI found - disable acceleration and stop initialization */
|
3162 | 2983 | if (accel_find_sapi() == FAILURE) {
|
3163 | 2984 | accel_startup_ok = false;
|
|
0 commit comments