RFR: 8196405: [REDO] NMT: add_committed_regions doesn't merge succeeding regions

Stefan Karlsson stefan.karlsson at oracle.com
Thu Feb 15 14:05:36 UTC 2018


Hi all,

Please review this patch to fix the merging of committed regions in 
NMT's VirtualMemoryTracker.

http://cr.openjdk.java.net/~stefank/8196405/webrev.01/
https://bugs.openjdk.java.net/browse/JDK-8196405

The previous attempt to fix this didn't deal with overlapping committed 
regions correctly. This patch solves that case by first removing 
regions, and parts of regions, that intersect with the newly committed 
region. After that, the new region can be added and/or merged with any 
adjacent regions.

There used to be a special-case for code paths that both reserve and 
commit memory at the same time. ReservedMemoryRegion had an 
all_committed boolean to track that state, and subsequent commits in the 
reserved region were ignored. There were a number of bugs cause by this 
special-handeling, when regions were committed or uncommitted inside an 
all_committed region. This patch removes the all_committed property and 
instead queries the _committed_regions list where necessary.

The patch removes special case handling for mtThreadStacks. The 
intention is that the add_committed_region and remove_uncomitted_region 
functions should be correct, so that we don't need that kind of 
special-case handling.

The overlap_region function uses 'sz - 1', which would be broken if sz 
ever was 0. I added asserts to check for this.

I've added a small jtreg test for the initial problem that this bug 
report was intending to fix. But I realized that the WhiteBox API didn't 
support setting up and testing different call stacks for the memory 
reservations and commits, so I introduced a C++ gtest. This test is both 
faster to execute, easier to debug, and more flexible, so I hope this is 
appreciated. :)

I've tested this with the added unit tests, short run with Kitchensink, 
and mach5 hs-tier1,hs-tier2. Anything else that I should be running?

While working on this I found two other bugs:

  https://bugs.openjdk.java.net/browse/JDK-8198225
  os::attempt_reserve_memory_at records memory as committed

  https://bugs.openjdk.java.net/browse/JDK-8198226
  os::attempt_reserve_memory_at records reserved memory twice on windows

Thanks,
StefanK


More information about the hotspot-runtime-dev mailing list