RFR: 8130681: Overlapping commits no longer break NMT.
Max Ockner
max.ockner at oracle.com
Thu Sep 17 19:57:32 UTC 2015
Hello all,
Please review this small(?) change to the way committed memory regions
are tracked with NMT.
Bug: https://bugs.openjdk.java.net/browse/JDK-8130681
Webrev: http://cr.openjdk.java.net/~mockner/8130681/
Summary:
Previously it was possible to commit a region which overlapped in other
regions in a way that was not tracked. If a committed region overlapped
with, but was not equal or adjacent to an existing committed region, an
assert would fire. This is what we saw in the kitchensink failure.
Instead of throwing an error, we would rather simply track whatever
memory operations occur. If something illegal happens, we can assume it
will be caught in the system directly in charge of memory transactions.
We can't expect to catch bad memory transactions in NMT, because NMT is
not always on.
In this fix, the assert has been replaced with code that ensures the
target region gets recorded as committed. The region is first
uncommitted, which uncommits any region which is completely contained in
the target region, and truncates any region which partially overlaps the
target region.
Then the region is added to the linked list of committed memory regions.
Testing:
rbt with
platforms: linux-x64,windows-x64
testlists: noncolo.testlist -atk quick
hotspot/test/:hotspot_jprt,
jdk/test/:jdk_lang
args: -XX:NativeMemoryTracking=detail
A new test has been added for the scenario where two disconnected memory
regions are committed and a third region, partially overlapping each of
the other two regions, is committed. The test verifies that the total
amount of committed memory is correct at each step.
Thanks,
Max
More information about the hotspot-runtime-dev
mailing list