RFR(M/L): 7115356: assert(!m->was_never_executed()) failed
Vladimir Kozlov
vladimir.kozlov at oracle.com
Thu Sep 18 02:45:36 UTC 2014
The clean up is nice.
As David I want to see the cause description. I tried to find a cause
together with Rickard without much success.
The assert we hit is next after 2 set_carry() calls:
mcs->invocation_counter()->set_carry();
mcs->backedge_counter()->set_carry();
assert(!m->was_never_executed(), "don't reset to 0 -- could be
mistaken for never-executed");
where
bool was_never_executed() { return !was_executed_more_than(0); }
The only code which can return 'false' from was_executed_more_than(0) is
next:
return invocation_count() > 0;
Failures happens without tiered compilation an on Windows only (?).
In such case invocation_count() returns:
return (mcs == NULL) ? 0 : mcs->invocation_counter()->count();
You would assume that mcs != NULL because we just accessed it before the
assert.
The one explanation is race during MethodCounters creation which Igor is
fixing (8058564). Which can produce 0 count.
Vladimir
On 9/17/14 7:05 AM, Nils Eliasson wrote:
> Hi,
>
> Please review this change. It started out as a bug fix and grew with
> some refactoring of invocationCounter.cpp/hpp and its uses.
>
> The original problem was that an assert in compilationPolicy failed
> because a value that was just set could not be observed. Some code paths
> read the composite counters a part at a time and may observe and write
> inconsistent values when several threads are using them. While removing
> a few unnecessary read and writes of the 'state' field, I noticed the
> state and Action was actually never used. I removed it all and came up
> with much simpler code.
>
> Major refactorizations:
> 1) Rewritten invocationCounter methods to read entire counter,
> manipulate and then write entire counter.
> 2) Removed the state, and action - it was never used anywhere.
> 3) Moved invocation counter logic from simpleThresholdPolicy into
> invocationCounter.
>
> bug: https://bugs.openjdk.java.net/browse/JDK-7115356
> webrev: http://cr.openjdk.java.net/~neliasso/7115356/webrev.06
>
> This code might affect the logCompilation and replay tools since it
> changes the output. I will test and fix that before submitting. I will
> also do some performance testing to make sure I haven't messed up the
> counters in any way.
>
> Thanks,
> Nils Eliasson
More information about the hotspot-compiler-dev
mailing list