RFR (L): 8058354: SPECjvm2008-Derby -2.7% performance regression on Solaris-X64 starting with 9-b29
Jon Masamitsu
jon.masamitsu at oracle.com
Wed Apr 1 19:16:20 UTC 2015
Thomas,
Thanks for the changes. Looks good.
Reviewed.
Jon
On 4/1/2015 5:31 AM, Thomas Schatzl wrote:
> Hi Jon,
>
> thanks for your review. Sorry for the small delay, some problems with
> pushing the change through jprt.
>
> On Thu, 2015-03-26 at 10:26 -0700, Jon Masamitsu wrote:
>> Thomas,
>>
>>
>> http://cr.openjdk.java.net/~tschatzl/8058354/webrev.2_to_3/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp.frames.html
>>
>> Is rs.size() guaranteed to be "page_size" aligned? Or might you
>> need 1 more page in "size_in_pages".
>>
>> 76 vmassert(_committed.size() == 0, "virtual space initialized more than once");
>> 77 BitMap::idx_t size_in_pages = rs.size() / page_size;
>> 78 _committed.resize(size_in_pages, /* in_resource_area */ false);
> rs.size() is always page_size aligned.
>
>> I would find these easier to read if "start" was "start_page".
>>
>> 122 bool G1PageBasedVirtualSpace::is_area_committed(size_t start, size_t size_in_pages) const {
>> 123 size_t end = start + size_in_pages;
>> 124 return _committed.get_next_zero_offset(start, end) >= end;
>> 125 }
>> 126
>> 127 bool G1PageBasedVirtualSpace::is_area_uncommitted(size_t start, size_t size_in_pages) const {
>> 128 size_t end = start + size_in_pages;
>> 129 return _committed.get_next_one_offset(start, end) >= end;
>> 130 }
> I think I fixed all "start" parameter names to "start_page", the same
> with the "end" local variable.
>
>> http://cr.openjdk.java.net/~tschatzl/8058354/webrev.2_to_3/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.hpp.frames.html
>>
>> I would prefer "commit_preferred_pages()" to "commit_full_pages()". The
>> "full" in the name lead me to look for something about "full" page in
>> the code.
>> This is a throw away comment if "full" makes sense to you.
> Done.
>
>> Drop the "full" in the comment.
>>
>> 75 // Commit num_pages full pages of _page_size size starting from start. All argument
>> 76 // checking has been performed.
>> 77 void commit_full_pages(size_t start_page, size_t end_page);
>>
>>
>> In the comments is the sentence with "start address" needed? Since
>> these are page indexes.
> Done.
>
>> I'd suggest adding a comment
>>
>> // Helper function for committing memory.
> Done.
>
>> Because this code is about committing in different ranges (the whole
>> _page_size
>> range and the tail range), when I read "internal" in the name, I thought
>> it had
>> to do with committing "internal" pages. After reading the code and the
>> surrounding
>> code I understood the "internal" implied a helper function.
>>
>> 71 // Commit the given memory range by using _page_size pages as much as possible
>> 72 // and the remainder with small sized pages. The start address must be _page_size
>> 73 // aligned.
>> 74 void commit_internal(size_t start_page, size_t end_page);
>>
>>
>> For
>>
>> 78 // Commit the tail area.
>> 79 void commit_tail();
>>
>> would this be a correct description?
>>
>> // Commit space at the high end of the VirtualSpace
>> // that is smaller than the preferred page size.
>>
>> Please replace with that description if you like it.
> Done.
>
>> tail_size is calculated and used in commit_tail()
>>
>> 158 char* const aligned_end_address = (char*)align_ptr_down(_high_boundary, _page_size);
>> 159 size_t const tail_size = pointer_delta(_high_boundary, aligned_end_address, sizeof(char));
>>
>> A similar calculation is done in committed_size()
>>
>> 104 char* aligned_high_boundary = (char*)align_ptr_up(_high_boundary, _page_size);
>> 105 result -= pointer_delta(aligned_high_boundary, _high_boundary, sizeof(char));
>>
>>
>> Maybe calculate the tail size once and save it for later uses. Or
>> have a method to calculate tail_size.
> Done.
>
>> Parameter "start" to "start_page" seems consistent with
>> other parameter naming.
>>
>>
>> 114 void uncommit(size_t start, size_t size_in_pages);
>>
>>
>> Rest looks good.
> Thanks a lot.
>
> I const-ified a few additional helper functions too.
>
> Webrev:
> http://cr.openjdk.java.net/~tschatzl/8058354/webrev.4/
> Diff:
> http://cr.openjdk.java.net/~tschatzl/8058354/webrev.3_to_4/
>
> Testing:
> jprt
>
> Thanks,
> Thomas
>
>
More information about the hotspot-gc-dev
mailing list