RFR: 8067785: Using AlwaysPreTouch does not always touch all pages

Derek White derek.white at oracle.com
Mon Apr 18 19:40:40 UTC 2016


Hi Stefan,

On 4/15/16 10:13 AM, Stefan Karlsson wrote:
> Hi all,
>
> Please review this patch that ensures that VirtualSpace::expand_by 
> pre-touches all committed memory.
>
> http://cr.openjdk.java.net/~stefank/8067785/webrev.01
> https://bugs.openjdk.java.net/browse/JDK-8067785
>
> 1) Previously, we pre-touched the memory between the old and new _high 
> pointers. Since the _high variable isn't page aligned, the pre-touch 
> code didn't touch all committed pages. I've moved the pre-touch code 
> to be done for every os::commit_memory call in VirtuaSpace::expand_by.
>
> 2) expand_by has segregated the VirtualSpace into three segements. 
> [small pages | large pages | small pages] so that we can have 
> VirtualSpaces that are not large page size aligned. Previously, only 
> the middle section called commit_memory with an alignment hint, and 
> the small pages sections called commit_memory without a small pages 
> hint. On all platforms, except Solaris, this boils down to the same 
> code. On Solaris we have this additional code executed:
>     size_t page_size = page_size_for_alignment(alignment_hint);
>     if (page_size > (size_t) vm_page_size()) {
>       (void)Solaris::setup_large_pages(addr, bytes, page_size);
>     }
>
> But since the alignment_hint is set to vm_page_size we won't try to 
> setup_large_pages here either.
>
> 3) The patch also contains a few style changes to make the 
> VirtualSpace::expand_by easier to read (at least for me)
>
> Tested with JPRT and -XX:+ExecuteInternalVMTests with AlwaysPreTouch 
> temporarily forced to true.
>
> Thanks,
> StefanK
Looks Good(tm)!

  - Derek


More information about the hotspot-dev mailing list