RFR (L): 8058354: SPECjvm2008-Derby -2.7% performance regression on Solaris-X64 starting with 9-b29
Thomas Schatzl
thomas.schatzl at oracle.com
Wed Apr 1 12:31:36 UTC 2015
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