< 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 >