< prev index next >

share/gc/g1/g1PageBasedVirtualSpace.cpp

Print this page
rev 1 : G1GC+POGC+NVDIMM Patch with latest comments incorporated from all.
rev 2 : Removed fcntl and fixed hotspot else violation
rev 8 : Final version addressing all Thomas S concerns

*** 122,141 **** --- 122,172 ---- guarantee(index <= _committed.size(), "Given boundary page " SIZE_FORMAT " is beyond managed page count " SIZE_FORMAT, index, _committed.size()); return index == _committed.size(); } + // Setsup NVDIMM to Max oldgen Size allowed. + size_t G1PageBasedVirtualSpace::get_nvdimm_size() { + size_t size = reserved_size(); + uint nvdimm_max_percent = 100 - G1MaxNewSizePercent; + size_t nvdimm_size = (size_t)((size * nvdimm_max_percent)/100); + size_t page_sz = os::vm_page_size() -1 ; + nvdimm_size = (nvdimm_size + page_sz) & (~page_sz); + return nvdimm_size; + } + void G1PageBasedVirtualSpace::commit_preferred_pages(size_t start, size_t num_pages) { vmassert(num_pages > 0, "No full pages to commit"); vmassert(start + num_pages <= _committed.size(), "Tried to commit area from page " SIZE_FORMAT " to page " SIZE_FORMAT " " "that is outside of managed space of " SIZE_FORMAT " pages", start, start + num_pages, _committed.size()); char* start_addr = page_start(start); size_t size = num_pages * _page_size; + if (((address)start_addr == (address)os::nvdimm_heapbase())) { + // first remove my dummy mapping. + if (os::unmap_memory(start_addr, size)) { + char* nvdimm_addr = os::attempt_reserve_memory_at(size, start_addr, os::nvdimm_fd()); + if (nvdimm_addr != start_addr) { + vm_exit_during_initialization( + err_msg("Could not map memory at %p for NVDIMM %s Fd %d", nvdimm_addr, AllocateOldGenAt, os::nvdimm_fd())); + } else { + log_info(gc, heap)("NVDIMM Memory successfully mapped at %p, Size %lu", start_addr, size); + os::close(os::nvdimm_fd()); + } + + size_t nvdimm_size = get_nvdimm_size(); + char* dram_base = (char*)start_addr + nvdimm_size; + size_t total_sz = reserved_size(); + os::set_dram_heapbase((address)dram_base); + log_info(gc, heap)("Java DRAM Heap at [%p - %p] & NVDIMM Old Gen at [%p - %p] Total Heap Sz %ld \n", + start_addr+nvdimm_size, (char*)(start_addr + total_sz), start_addr, (char*)(start_addr + nvdimm_size), total_sz); + } + return; + } os::commit_memory_or_exit(start_addr, size, _page_size, _executable, err_msg("Failed to commit area from " PTR_FORMAT " to " PTR_FORMAT " of length " SIZE_FORMAT ".", p2i(start_addr), p2i(start_addr + size), size)); }
< prev index next >