RFR(S): 8072434: 8064457: introduces performance regressions in 9-b47
Vladimir Kozlov
vladimir.kozlov at oracle.com
Thu Feb 5 23:16:52 UTC 2015
Reviewed. Good.
Thanks,
Vladimir
On 2/5/15 3:12 PM, Coleen Phillimore wrote:
>
> Webrev 01 is good. You need another reviewer and I'll sponsor it.
>
> http://cr.openjdk.java.net/~goetz/webrevs/8072434-css/webrev.01/
>
> thanks,
> Coleen
>
> On 2/5/15, 5:22 PM, Coleen Phillimore wrote:
>>
>> On 2/5/15, 5:16 PM, Coleen Phillimore wrote:
>>>
>>> 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.
>>
>> Forgot to mention it didn't pass on windows x64 maybe because of ASLR.
>> Coleen
>>
>>>
>>> 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