RFR(S): 8209162: Page size selection does not always select optimal page size
Thomas Schatzl
thomas.schatzl at oracle.com
Tue Apr 21 12:44:24 UTC 2020
Hi,
On 21.04.20 14:28, Stefan Johansson wrote:
>
>
> On 2020-04-21 13:22, Thomas Schatzl wrote:
>> Hi,
>>
>> On 21.04.20 13:18, Stefan Johansson wrote:
>>> Hi Ivan,
>>>
>>> I'm not very familiar with this code, but one observation. This is a
>>> bit similar to what I looked at recently for G1. There the region
>>> size was different for a given heap size depending on if Xms was set
>>> or not. Here we can run into a situation where the page size differ
>>> depending on Xms, and this also feels a bit strange. Would there be a
>>> problem to simplify this to a single line and always just care about
>>> min:
>>> const size_t page_sz = os::page_size_for_region_aligned(MinHeapSize, 4);
>>>
>>> I'm trying to understand when this would be a problem, but can't
>>> think of anything straight away.
>>>
>>
>> the RFE is a suggestion to maximize page sizes when Xms == Xmx.
>> I.e. if you do that, you do not care about uncommitting memory, so
>> there is no need for being able to uncommit. In this case it is
>> favorable to use maximum page size for throughput.
>
> I agree with that, and only looking at MinHeapSize will achieve that,
> since for a fixed heap it is the same as MaxHeapSize. I'm just trying to
> come up with a case where the min-calculation leads to using a larger
> page size than we want so that we need to do the max/8 calculation.
> Something like:
> -Xmx10m -Xms8m => 4k pages because 10/8 is below 2mb, while 8/4 == 2mb.
> Why is this good? I guess it might be good if -Xmx was 9m, but in such
> case, wouldn't some other alignment step in and prevent us from using
> 2mb pages?
The VM will be limited in the amount of uncommit possible if MaxHeapSize
is "close" to MinHeapSize.
E.g. Xms = 4gb and Xmx = 6gb will only allow 4, 5, or 6 GB of committed
memory when using 1 GB pages. This might be limiting the possible
committed heap sizes too much, giving "VM never uncommits memory" reports.
Then again, this is parallel gc we are talking about which you likely
want to run with -Xms==-Xmx.
The "4" and "8" constants in the code are "random" numbers.
Thanks,
Thomas
More information about the hotspot-gc-dev
mailing list