< prev index next >

src/hotspot/os/linux/os_linux.cpp

Print this page

        

*** 126,135 **** --- 126,136 ---- // for timer info max values which include all bits #define ALL_64_BITS CONST64(0xFFFFFFFFFFFFFFFF) #define LARGEPAGES_BIT (1 << 6) + #define DAX_SHARED_BIT (1 << 8) //////////////////////////////////////////////////////////////////////////////// // global variables julong os::Linux::_physical_memory = 0; address os::Linux::_initial_thread_stack_bottom = NULL;
*** 3261,3274 **** // - (bit 3) file-backed shared memory // - (bit 4) ELF header pages in file-backed private memory areas (it is // effective only if the bit 2 is cleared) // - (bit 5) hugetlb private memory // - (bit 6) hugetlb shared memory // ! static void set_coredump_filter(void) { FILE *f; long cdm; if ((f = fopen("/proc/self/coredump_filter", "r+")) == NULL) { return; } --- 3262,3278 ---- // - (bit 3) file-backed shared memory // - (bit 4) ELF header pages in file-backed private memory areas (it is // effective only if the bit 2 is cleared) // - (bit 5) hugetlb private memory // - (bit 6) hugetlb shared memory + // - (bit 7) dax private memory + // - (bit 8) dax shared memory // ! static void set_coredump_filter(bool largepages, bool dax_shared) { FILE *f; long cdm; + bool filter_changed = false; if ((f = fopen("/proc/self/coredump_filter", "r+")) == NULL) { return; }
*** 3277,3288 **** return; } rewind(f); ! if ((cdm & LARGEPAGES_BIT) == 0) { cdm |= LARGEPAGES_BIT; fprintf(f, "%#lx", cdm); } fclose(f); } --- 3281,3299 ---- return; } rewind(f); ! if (largepages && (cdm & LARGEPAGES_BIT) == 0) { cdm |= LARGEPAGES_BIT; + filter_changed = true; + } + if (dax_shared && (cdm & DAX_SHARED_BIT) == 0) { + cdm |= DAX_SHARED_BIT; + filter_changed = true; + } + if (filter_changed) { fprintf(f, "%#lx", cdm); } fclose(f); }
*** 3417,3427 **** } size_t large_page_size = Linux::setup_large_page_size(); UseLargePages = Linux::setup_large_page_type(large_page_size); ! set_coredump_filter(); } #ifndef SHM_HUGETLB #define SHM_HUGETLB 04000 #endif --- 3428,3438 ---- } size_t large_page_size = Linux::setup_large_page_size(); UseLargePages = Linux::setup_large_page_type(large_page_size); ! set_coredump_filter(true /*largepages*/, false /*dax_shared*/); } #ifndef SHM_HUGETLB #define SHM_HUGETLB 04000 #endif
*** 3788,3797 **** --- 3799,3819 ---- bool os::can_execute_large_page_memory() { return UseTransparentHugePages || UseHugeTLBFS; } + char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr, int file_desc) { + assert(file_desc >= 0, "file_desc is not valid"); + char* result = pd_attempt_reserve_memory_at(bytes, requested_addr); + if (result != NULL) { + if (replace_existing_mapping_with_file_mapping(result, bytes, file_desc) == NULL) { + vm_exit_during_initialization(err_msg("Error in mapping Java heap at the given filesystem directory")); + } + } + return result; + } + // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { const int max_tries = 10;
*** 4915,4924 **** --- 4937,4949 ---- } // initialize thread priority policy prio_init(); + if (!FLAG_IS_DEFAULT(AllocateHeapAt)) { + set_coredump_filter(false /*largepages*/, true /*dax_shared*/); + } return JNI_OK; } // Mark the polling page as unreadable void os::make_polling_page_unreadable(void) {
< prev index next >