RFR: 8066875: VirtualSpace does not use large pages

Erik Helin erik.helin at oracle.com
Mon Dec 15 14:36:49 UTC 2014


On 2014-12-12, Albert Noll wrote:
> Hi Erik,
> 
> thanks a lot for taking care of this. I have one minor comment (not a
> reviewer):
> 
> 1418 size_t os::largest_page_size_less_than(size_t sz) {
> 1419   if (UseLargePages) {
> 1420     // The page sizes are sorted descendingly.
> 1421     for (size_t i = 0; _page_sizes[i] != 0; ++i) {
> 1422       if (_page_sizes[i] <= sz) {
> 1423         return _page_sizes[i];
> 1424       }
> 1425     }
> 1426   }
> 1427   return vm_page_size();
> 1428 }
> 
> The function name suggests that the function returns a page size that is
> *less* than the value in the argument (sz).
> However, in line 1422 you check for '<=' . I think you should either fix the
> name of the function or the check in line 1422.

Yeah, I wasn't too fond of that name either. I discussed some potential
names with the guys in the office and ended up with:
- os::page_size_for_region_aligned
- os::page_size_for_region_unaligned

os::page_size_for_region_aligned and os::page_size_for_region_unaligned
takes the same number of parameters, a region size and minimum number of
pages. The difference is that page_size_for_region_aligned guarantees
that returned page size divides the given region size, whereas
page_size_for_region_unaligned does not guarantee this.

These names were chosen because a call to page_size_for_region_unaligned
indicates that the surrounding code must handle any alignment on its
own.

Webrevs:
- incremental: http://cr.openjdk.java.net/~ehelin/8066875/webrev.00-01/
- full: http://cr.openjdk.java.net/~ehelin/8066875/webrev.01/

Testing:
- JPRT
- Verified that the code cache now uses large pages even if
  ReservedCodeCacheSize is 241 MB (see bug for more details).
- Added new internal vm tests (also run on SPARC machine with large
  pages)
- Run hotspot jtreg tests on SPARC machine with large pages

Thanks,
Erik

> Best,
> Albert
> 
> 
> On 12/10/2014 10:39 AM, Tobias Hartmann wrote:
> >Hi Erik,
> >
> >looks good (not a reviewer).
> >
> >Thanks,
> >Tobias
> >
> >On 09.12.2014 20:35, Erik Helin wrote:
> >>Hi all,
> >>
> >>the fix for JDK-8049864 [0] made os::page_size_for_region slightly more strict
> >>since the function now demands that the given region_size is size aligned with
> >>respect to the chosen page_size. The reason for doing this was that
> >>os::page_size_for_region was used in two ways:
> >>1. Give me a suitable page size for this amount of memory
> >>2. Give me the largest page size for this amount of memory
> >>The fix for JDK-8049864 fixed os::page_size_for_region for the "suitable page
> >>size" scenario, but is too strict for the "largest page size" scenario. This
> >>caused a regression in VirtualSpace::initialize, which only needs the largest
> >>possible page size, since VirtualSpace::initialize_with_granularity takes care
> >>of any alignment issues.
> >>
> >>This patch adds the function os::largest_page_size_less_than and updates
> >>VirtualSpace::initialize to use this new function instead of
> >>os::page_size_for_region.
> >>
> >>Webrev:
> >>http://cr.openjdk.java.net/~ehelin/8066875/webrev.00/
> >>
> >>Bug:
> >>https://bugs.openjdk.java.net/browse/JDK-8066875
> >>
> >>Testing:
> >>- JPRT
> >>- Verified that the code cache now uses large pages even if
> >>   ReservedCodeCacheSize is 241 MB (see bug for more details).
> >>- Added new internal vm tests (also run on SPARC machine with large
> >>   pages)
> >>
> >>Thanks,
> >>Erik
> >>
> >>[0]: http://hg.openjdk.java.net/jdk9/hs-gc/hotspot/rev/b326a3e8dcab
> 


More information about the hotspot-dev mailing list