RFR(M): 8220311: Implementation: NUMA-Aware Memory Allocation for G1, Survivor (2/3)
Stefan Johansson
stefan.johansson at oracle.com
Wed Oct 30 07:27:20 UTC 2019
Looks good,
Stefan
> 29 okt. 2019 kl. 21:44 skrev sangheon.kim at oracle.com:
>
> Hi Stefan,
>
> Thanks for reviewing this.
>
> On 10/29/19 1:13 PM, Stefan Johansson wrote:
>> Hi Sangheon,
>>
>>> 25 okt. 2019 kl. 16:02 skrev sangheon.kim at oracle.com:
>>>
>>> Hi Stefan,
>>>
>>> On 10/23/19 1:47 AM, Stefan Johansson wrote:
>>>> Hi Sangheon,
>>>>
>>>> On 2019-10-22 18:47, sangheon.kim at oracle.com wrote:
>>>>> Hi Kim,
>>>>>
>>>>> On 10/22/19 12:19 AM, Kim Barrett wrote:
>>>>>>> On Oct 22, 2019, at 1:52 AM, sangheon.kim at oracle.com wrote:
>>>>>>> What do you think about below comment?
>>>>>>>
>>>>>>> // Tries to allocate word_sz in the PLAB of the next "generation" after trying to
>>>>>>> // allocate into dest. Previous_plab_refill_failed indicates whether previous
>>>>>>> // PLAB refill for the original (source) object was failed.
>>>>>> Drop “was”. Otherwise looks good.
>>>>> Done.
>>>>>
>>>>> Webrev:
>>>>> http://cr.openjdk.java.net/~sangheki/8220311/webrev.3
>>>>> http://cr.openjdk.java.net/~sangheki/8220311/webrev.3.inc
>>>> Looks good in general, just one minor thing, no need for a new webrev though:
>>>> src/hotspot/share/gc/g1/g1Allocator.cpp
>>>> ---
>>>> 144 for (uint nodex_index = 0; nodex_index < _num_alloc_regions; nodex_index++) {
>>>>
>>>> The name nodex_index has one too many x:es =) I would prefer node_index.
>>> Ouch!
>>> Fixed..
>>>
>>> In addition, Stefan, Thomas and I had some discussion about making PLAB-NUMA aware (only for survivor).
>>> Stefan provided a patch with it and it is simple enough to include under this CR.
>>>
>>> Webrev:
>>> http://cr.openjdk.java.net/~sangheki/8220311/webrev.4
>>> http://cr.openjdk.java.net/~sangheki/8220311/webrev.4.inc
>> Looks good in general, just one comment.
>>
>> src/hotspot/share/gc/g1/g1Allocator.inline.hpp
>> ---
>> 78 assert(_alloc_buffers[dest.type()] != NULL,
>> 79 "Allocation buffer is NULL: %s", dest.get_type_str());
>>
>> 80 G1HeapRegionAttr::region_type_t type = dest.type();
>> 81 return alloc_buffer(type, node_index);
>>
>> As I mentioned to you offline, I think it is a bit unfortunate that we can’t index our way to the correct PLAB in G1PLABAllocator::alloc_buffer(…) without the if-statement, but I agree that having multiple array slots pointing to the same PLAB isn’t a optimal either. So I think this is approach is good for now, but I have a very minor comment on the code snippet above. I would prefer if line 80 was skipped and the call on 81 just did return alloc_buffer(dest.type(), node_index).
> Done.
> It is leftover from testing code.
>
> You and Thomas didn't ask for webrev, but here's the next one for the record. :)
>
> Webrev:
> http://cr.openjdk.java.net/~sangheki/8220311/webrev.5
> http://cr.openjdk.java.net/~sangheki/8220311/webrev.5.inc
>
> Testing: local build
>
> Thanks,
> Sangheon
>
>
>> —
>>
>> I don’t need a new webrev for this.
>>
>> Thanks,
>> Stefan
>>
>>
>>> Testing: hs-tier 1 ~ 3, with/without UseNUMA
>>>
>>> Thanks,
>>> Sangheon
>>>
>>>
>>>> ---
>>>>
>>>> Thanks,
>>>> Stefan
>>>>
>>>>> Thanks,
>>>>> Sangheon
>>>>>
>>>>>
>>>>>>> // Returns a non-NULL pointer if successful, and updates dest if required.
>>>>>>> // Also determines whether we should continue to try to allocate into the various
>>>>>>> // generations or just end trying to allocate.
>>>>>>> HeapWord* allocate_in_next_plab(G1HeapRegionAttr* dest,
>>>>>>> ...
>>>>>>>
>>>>>>> Let me post the webrev when we decide. :)
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Sangheon
>>>>>>>
>>>>>>>
>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>
>>>>>>>> Looks good, other than that one comment issue.
More information about the hotspot-gc-dev
mailing list