CRR (XS): 7098085: G1: partially-young GCs not initiated under certain circumstances
Y. S. Ramakrishna
y.s.ramakrishna at oracle.com
Thu Oct 6 23:15:22 UTC 2011
On 10/06/11 11:23, Tony Printezis wrote:
> Hi again,
>
> Disclaimer: John and I IMed behind your backs. :-)
>
> Y. S. Ramakrishna wrote:
>> I think the "notice" / "ignore" here would be slightly different
>> and use of the similar terminology may possibly cause some confusion.
>> AllowSafepoints / DisallowSafepoints would perhaps be closer to what
>> one is
>> doing in this specific case.
>
> Well, if I can be a bit picky too :-), DisallowSafepoints is not totally
> true either given that the thread can allow safepoints to happen but it
> has to do so explicitly with a yield call.
True, as I indicated further below.
>
> How about (and it'd be obvious that I resorted in consulting a thesaurus):
>
> RegulateSafepoints and IgnoreSafepoints
>
> Both are descriptive in what the thread will do.
Sounds good to me.
>
>> If AllowSafepoints / DisallowSafepoints is not favoured, perhaps
>> something like SafepointLocker/Unlocker terminology in analogy to
>> MutexLocker/Unlocker
>> might be acceptable to people here because admission to the set
>> actually does lockout safepoints until the members of the set
>> cooperatively
>> allow the safepoint because of "yield"s etc.
>
> I'll be OK with SafepointLocker / Unlocker even though I think it's less
> descriptive than Regulate / Ignore.
I agree.
>
>> Tony, I agree that MutexLocker/Unlocker exposes the fact that there's
>> a lock,
>> but that's a historical artifact of mutual exlcusion and critical
>> sections
>> having evolved primarily as mutexes in most of computer science and
>> systems history. Thus readers closely associate one with the other.
>> In fact "mutex" is after all "mutual exclusion" (which is a high level
>> concept independent of the mechanism of "locks" used for it).
>
> Indeed, and point taken.
>
>> Having said that, I agree with Tony that there are pros and cons in
>> both cases
>> and may be mentioning safepoints makes it too high level and abstract
>> and in fact we do want the mention of suspendible thread sets, the
>> underlying
>> mechanism.
>>
>> So, having aired some of these thoughts, I'll go with whatever you
>> folks decide sounds best here.
>
> As always, thanks for the feedback!
I think I like the names you have chosen above; thanks!
-- ramki
>
> Tony
>
>> thanks!
>> -- ramki
>>
>> On 10/06/11 09:29, John Cuthbertson wrote:
>>> Hi Everyone,
>>>
>>> I think the template interpreter uses the names notice_safepoints()
>>> and ignore_safepoints() so in the same vein: NoticeSafepoints and
>>> IgnoreSafepoints.
>>>
>>> JohnC
>>>
>>> On 10/06/11 07:27, Tony Printezis wrote:
>>>> Ramki,
>>>>
>>>> Thanks for your thoughts on this. Please see inline.
>>>>
>>>> On 10/6/2011 2:41 AM, Ramki Ramakrishna wrote:
>>>>> Doing some late night loud thinking here ... so please take this
>>>>> with an adequate dose of salt....
>>>>>
>>>>> I am not sure joining or leaving the suspendible thread set
>>>>> says anything about the actual intent of that action. In other words
>>>>> the suspendible thread set is a mechanism or an implementation
>>>>> of what is actually a synchronizing mechanism -- the intent is
>>>>> that the actions in a {join; act; leave} scope are those that
>>>>> want to somehow control the synchronization points of their
>>>>> execution wrt safepoints because safepoints will probably
>>>>> step on their toes or manipulate the same values. It's
>>>>> really a form of mutual exclusion.
>>>>
>>>> Either way has pros and cons. I agree that abstracting away from how
>>>> the exclusion is implemented is helpful for someone who's not
>>>> familiar with the code. However, I'd claim that it's also important
>>>> to show that we're using the STS in this exclusion so that the
>>>> reader fully understands what the assumptions of the exclusion are
>>>> and also because they might need to explicitly yield at some point,
>>>> which is done through the STS.
>>>>
>>>> Let me predict what someone will say next: Ah, but we can also wrap
>>>> the yielding call in those nesting (is that the right word for
>>>> them?) objects too. Which would be nice. But there are cases where
>>>> the call to yield() (or the call to should_yield()) is deep into the
>>>> call hierarchy that's impractical to use the top-level nesting
>>>> objects for that.
>>>>
>>>> Also please note: (For better or worse) MutexLocker x(&my_mutex) is
>>>> very explicit in what it does. It doesn't say "we provide mutual
>>>> exclusion of that critical section using the given mutex". It says
>>>> "we'll keep that mutex locked during this critical section".
>>>> Unfortunately, I cannot think of a similar name for the case we're
>>>> discussing here.
>>>>
>>>>> In the same vein, the reverse namely {leave; act; join} seems
>>>>> to be an explicit mechanism to get out of a synchronizing protocol
>>>>> wrt safepoints (in this case presumably because such synchronization
>>>>> would otherwise cause circular dependencies that might result in
>>>>> a deadlock).
>>>>
>>>> This is indeed correct.
>>>>
>>>>> Thus while the suspendible thread sets is a specific implementation,
>>>>> the high level idea involves synchronization wrt JVM safepoints
>>>>> during which foreground gc's may do stuff to the same structures
>>>>> that the wrapped actions are manipulating.
>>>>>
>>>>> It is for that reason that I had suggested the name
>>>>> "SynchronizeWithSafepoints"
>>>>> although that is not an adequate name either.
>>>>
>>>> I understand what "synchronize with safepoints" tries to convey
>>>> (i.e., "synchronize with the safepoint mechanism so that a safepoint
>>>> does not happen without my consent"). But it's a bit too high-level
>>>> to cover all the assumptions related to that mechanism.
>>>>
>>>>> (Perhaps your
>>>>> suggestion of a name that describes the mechanism/implementation
>>>>> may be better suited because of the inadequacy of my suggestion.)
>>>>> Hopefully someone will think of a better name than either of these.
>>>>
>>>> So, if we want to keep it high level, how about IncludeSafepoints /
>>>> ExcludeSafepoints or WithSafepoints / WithoutSafepoints? But I have
>>>> to say my preference would be InsideSuspendibleThreadSet /
>>>> OutsideSuspendibleThreadSet.
>>>>
>>>> Tony
>>>>
>>>>> -- ramki
>>>>>
>>>>> On 10/5/2011 5:52 PM, Tony Printezis wrote:
>>>>>>
>>>>>>
>>>>>> On 10/5/2011 8:27 PM, Tony Printezis wrote:
>>>>>>>> [1] you will have to invent a suitable other name, perhaps
>>>>>>>> DesynchronizeWithSafepoints
>>>>>>>> for when you do the reverse, i.e. perform an action outside of
>>>>>>>> the _sts, as happens
>>>>>>>> when you are doing those synch barriers amongst the concurrent
>>>>>>>> marking
>>>>>>>> threads in case of overflow and restart.
>>>>>>>
>>>>>>> I can't think of a good name off-hand but I'll think about it for
>>>>>>> a bit... (suggestions are welcome!)
>>>>>>
>>>>>> How about JoinSuspendibleThreadSet / LeaveSuspendibleThreadSet,
>>>>>> example:
>>>>>>
>>>>>> {
>>>>>> JoinSuspendibleThreadSet x;
>>>>>> ...
>>>>>> }
>>>>>>
>>>>>> Both sound very descriptive to me. Alternatively, maybe
>>>>>> InsideSuspendibleThreadSet / OutsideSuspendibleThreadSet?
>>>>>>
>>>>>> I'd love to have something like MutexLocker / MutexUnlocker but I
>>>>>> can't think of an appropriate noun
>>>>>> (SuspendibleThreadSetJoiner?!?!?!? this sounds SO wrong!).
>>>>>>
>>>>>> Tony
>>>
More information about the hotspot-gc-dev
mailing list