RFR(S): 8072434: 8064457: introduces performance regressions in 9-b47
Coleen Phillimore
coleen.phillimore at oracle.com
Thu Feb 5 22:16:38 UTC 2015
Your test #1 doesn't work on all machines either. I don't think we can
add tests that assume memory allocation locations, so we shouldn't add
your new test. It's been verified manually.
Coleen
On 2/5/15, 10:00 AM, Lindenmaier, Goetz wrote:
>
> Hi Coleen,
>
> You are right, I missed to move that condition into the new code.
>
> I designed a test for zerobased startup with 30G I would like to add to
>
> the webrev as you proposed. I had to use WhiteBox, which took a while
>
> to get right ...
>
> I thought of these two test cases.
>
> 1.) Setting 30G plain, and
>
> 2.) setting the flags used in the benchmark. -Xmx30g -Xms30g
> -Xmn26g-XX:+AggressiveOpts -XX:+UseNUMA
>
> 2.) causes two problems. First it's slow as the debug build
> initializes the heap which walks all
>
> the memory. Second it fails on machines that don't have 30G
> main memory. So I have to
>
> skip it.
>
> 1.)I'm not sure whether that will work with all OSes, the OS might not
> return all
>
> of the theoretical available address space below 32G, even if
> zerobased works
>
> for medium size heaps.
>
> I will run 1.) with my tests tonight for a broader coverage, it worked
> on linuxx86_64 and
>
> linuxppc64 fine, and breaks with the VM without the fix.
>
> Also, all our other tests worked fine with the patch from yesterday.
>
> Best regards,
>
> Goetz.
>
> *From:*Coleen Phillimore [mailto:coleen.phillimore at oracle.com]
> *Sent:* Thursday, February 05, 2015 12:14 AM
> *To:* Lindenmaier, Goetz; hotspot-dev Source Developers
> *Subject:* Re: RFR(S): 8072434: 8064457: introduces performance
> regressions in 9-b47
>
>
> Hi Goetz,
>
> I was trying to figure out how we used to decide whether to put the
> compressed class space above the heap in preferred_heap_base(). The
> code was:
>
> const size_t total_size = heap_size +
> heap_base_min_address_aligned; // 30G + 2G
>
> ...
> // space so it can be decoded with no base.
> if (UseCompressedClassPointers && !UseSharedSpaces &&
> OopEncodingHeapMax <= 32*G) {
>
> uint64_t class_space =
> align_size_up(CompressedClassSpaceSize, alignment); // 1G
> assert(is_size_aligned((size_t)OopEncodingHeapMax-class_space,
> alignment), "difference must be aligned too");
> uint64_t new_top = OopEncodingHeapMax-class_space; //
> 32G - 1G
>
> if (total_size <= new_top) { // 32G <= 31G false,
> don't use the new_top.
> heap_top = new_top;
> }
> }
>
> // Align base to the adjusted top of the heap
> base = heap_top - heap_size;
>
>
> This is also one instance where 32*G is much easier to understand in
> the code than the symbolic name OopEncodingHeapMax.
>
> Anyway, your code fix looks correct. You want it to be
> KlassEncodingMetaspaceMax logically (I thought it should be
> OopEncodingHeapMax) since allocating the class space above the heap
> and getting zero based compressed oops, the class decoding algorithm
> can only shift by 3 not 5. The clause above it excludes the
> ObjAlignmentInBytes = shifting 5 case anyway.
>
> Thank you for fixing this!
>
> Coleen
>
> On 2/4/15, 10:55 AM, Lindenmaier, Goetz wrote:
>
> Hi,
>
> There is a performance regression after my change 8064457.
>
> 30G heaps do not displace the CompressedClassSpace from the lower
> memory
>
> region and instead are allocated in upper regions.
>
> This webrev should fix the Problem.
>
> http://cr.openjdk.java.net/~goetz/webrevs/8072434-css/webrev.01/
> <http://cr.openjdk.java.net/%7Egoetz/webrevs/8072434-css/webrev.01/>
>
> I verified that it works now and ran runtime/CompressedOops jtreg
> tests on linuxx86_64.
>
> I'll get a comprehensive test run by tomorrow.
>
> Best regards,
>
> Goetz.
>
More information about the hotspot-dev
mailing list