Index: working_vm/vm/port/src/vmem/win/port_vmem.c =================================================================== --- working_vm/vm/port/src/vmem/win/port_vmem.c (revision 631623) +++ working_vm/vm/port/src/vmem/win/port_vmem.c (working copy) @@ -147,10 +147,21 @@ || pageSize > ps[0]) { /* Using large pages on Win64 seems to require MEM_COMMIT and PAGE_READWRITE.*/ + fprintf(stderr, " port_vmem_reserve: MEM_COMMIT | MEM_LARGE_PAGES\n"); action = MEM_COMMIT | MEM_LARGE_PAGES; - protection = PAGE_READWRITE; - large = 1; + protection = PAGE_EXECUTE_READWRITE; + large = 1; + + // round up to page size + amount = ((int)(amount / ps[1]) + 1)*ps[1]; + + } else { + fprintf(stderr, " port_vmem_reserve: MEM_RESERVE\n"); } + + + + start = VirtualAlloc(*address, amount, action, protection); if (!start) { return apr_get_os_error(); Index: working_vm/vm/vmcore/src/init/vm_properties.cpp =================================================================== --- working_vm/vm/vmcore/src/init/vm_properties.cpp (revision 631623) +++ working_vm/vm/vmcore/src/init/vm_properties.cpp (working copy) @@ -303,6 +303,8 @@ properties.set_new("vm.bootclasspath.appendclasspath", "false"); properties.set_new("thread.soft_unreservation", "false"); + properties.set_new("vm.use_large_pages", "false"); + #ifdef REFS_USE_RUNTIME_SWITCH properties.set_new("vm.compress_references", "true"); #endif Index: working_vm/vm/vmcore/src/init/vm_init.cpp =================================================================== --- working_vm/vm/vmcore/src/init/vm_init.cpp (revision 631623) +++ working_vm/vm/vmcore/src/init/vm_init.cpp (working copy) @@ -752,6 +752,11 @@ parse_vm_arguments(vm_env); + vm_env->use_large_pages = get_boolean_property("vm.use_large_pages", FALSE, VM_PROPERTIES); + if (vm_env->use_large_pages) { + fprintf(stderr, "VM is using Large Pages\n"); + } + vm_env->verify = get_boolean_property("vm.use_verifier", TRUE, VM_PROPERTIES); #ifdef REFS_USE_RUNTIME_SWITCH vm_env->compress_references = get_boolean_property("vm.compress_references", TRUE, VM_PROPERTIES); Index: working_vm/vm/vmcore/src/util/mem_alloc.cpp =================================================================== --- working_vm/vm/vmcore/src/util/mem_alloc.cpp (revision 631623) +++ working_vm/vm/vmcore/src/util/mem_alloc.cpp (working copy) @@ -124,9 +124,13 @@ if (_is_code) { mem_protection |= PORT_VMEM_MODE_EXECUTE; } - size_t ps = (!_is_code && _use_large_pages) ? +// size_t ps = (!_is_code && _use_large_pages) ? +// PORT_VMEM_PAGESIZE_LARGE : PORT_VMEM_PAGESIZE_DEFAULT; + + size_t ps = (_use_large_pages) ? PORT_VMEM_PAGESIZE_LARGE : PORT_VMEM_PAGESIZE_DEFAULT; - + + apr_status_t status = port_vmem_reserve(&pDesc->_descriptor, &pool_storage, size, mem_protection, ps, aux_pool); if (status != APR_SUCCESS) {