RFR: 8186476: Generalize Atomic::add with templates
David Holmes
david.holmes at oracle.com
Mon Aug 28 01:51:44 UTC 2017
On 26/08/2017 1:28 AM, Erik Österlund wrote:
> Hi Coleen,
>
> On 2017-08-25 00:17, coleen.phillimore at oracle.com wrote:
>>
>>
>> On 8/21/17 5:17 PM, Kim Barrett wrote:
>>>> On Aug 21, 2017, at 11:57 AM, Erik Österlund
>>>> <erik.osterlund at oracle.com> wrote:
>>>>> I’m fairly sure the runtime folks would say you should be
>>>>> surprised, and would object to such a change. The layout of symbol
>>>>> is carefully constructed, and I think such a change would increase
>>>>> the size of a symbol by 6 byes (not the obvious two) on a 64 bit
>>>>> platform.
>>>> I find that surprising. By making body jbyte[0] instead, it seems to
>>>> me (after a glance) to be possible to retain the size of the header
>>>> from 8 bytes to 8 bytes after turning refcount to an int. This
>>>> leaves only the difference in payload and its effect on the
>>>> allocator and its alignment, which should seemingly not require 6
>>>> extra bytes. But perhaps I have misunderstood something about the
>>>> layout of Symbol.
>>> No, I misremembered. Yes, that change would cost an average of 2
>>> additional bytes per symbol, assuming symbol name lengths mod 8 are
>>> fairly uniformly distributed, which seems likely.
>>>
>>> That’s still 2 extra bytes per symbol, and I doubt the runtime folks
>>> would like that, since they’ve been going to some trouble to reduce
>>> the size of symbols:
>>> 8009575: Reduce Symbol::_refcount from 4 bytes to 2 bytes
>>> 8087143: Reduce Symbol::_identity_hash to 2 bytes
>>
>> Yes, the runtime folks would not like that after going through the
>> trouble to reduce the size of Symbol. There can be lots of symbols.
>
> Thank you for clarifying that. Perhaps coming from GC, my view on this
> memory optimization is different. But I will respect your view and not
> question this decision.
> In that case, I see no current objections to the solution Kim handed off
> to me. Are we good to go?
I think you are good to go. Though I did have some queries buried in my
earlier response, in particular in relation to the change in
atomic_solaris_sparc.hpp to use a C++ cas-loop I queried:
"Makes me wonder whether this version should not be in platform
independent code ready to be inherited by a platform if needed? "
If that is possible/reasonable it can still be deferred to the next phase.
Thanks,
David
-----
> Thanks,
> /Erik
>
>>
>> Coleen
>>
>>>
>>>>>> 2) Implement it like jbyte cmpxchg. That would entail both calling
>>>>>> a generalized AddShortUsingInt function object from the platform
>>>>>> layer, and preferrably also using an int CAS loop for emulating
>>>>>> the add operation rather than the current emulation using atomic
>>>>>> int add, that relies on two short fields being placed next to each
>>>>>> other, depending on endianness of the machine, using the
>>>>>> ATOMIC_SHORT_PAIR macro for declaring the short pair, that may or
>>>>>> may not in fact enforce the intended alignment at compile time.
>>>>>> 3) Continue emulating jshort Atomic::add with jint Atomi::add, but
>>>>>> turn it into an AddShortUsingInt function object, called from the
>>>>>> platform layer, like the similar CmpxchgByteUsingInt operation.
>>>>>>
>>>>>> So, I am curious if anyone would have loud objections if I was to
>>>>>> remove Atomic::add support for jshort, and changed its single use
>>>>>> (Symbol::_refcount), to use int instead. And if there are such
>>>>>> objections, I wonder if we really want to continue using the
>>>>>> ATOMIC_SHORT_PAIR macro and emulation using jint Atomic::add, or
>>>>>> it is okay to rewrite it to use an cmpxch loop instead and get rid
>>>>>> of the ATOMIC_SHORT_PAIR macro (that I find makes for a very weird
>>>>>> API).
>>>>> I don’t think it’s worth spending a lot of effort generalizing the
>>>>> short case right now. As you noticed, there is *exactly* one use
>>>>> of it, for the symbol refcount. Reconsider if that ever changes.
>>>>>
>>>> Okay, I agree. I will drop that for now. This single use case is
>>>> probably not worth the effort.
>>> Okay.
>>>
>>
>
More information about the hotspot-dev
mailing list