RFR (XS): 8161993: G1 crashes if active_processor_count changes during startup

Thomas Schatzl thomas.schatzl at oracle.com
Fri Jul 22 11:35:56 UTC 2016


Hi David,

On Fri, 2016-07-22 at 12:36 +1000, David Holmes wrote:
> Hi Thomas,
> 
> On 21/07/2016 11:05 PM, Thomas Schatzl wrote:
> > 
> > Hi David,
> > 
> >   thanks for your review.
> Thanks for picking up 8147910 for me. One of those little tasks I 
> couldn't quite justify doing at the moment :)

Np. Just want to get that unnecessary g1 crash fixed :)

[...]
> 
> > > out. All that would involve is committing the os.hpp and os.cpp
> > > and any change to error reporting under 8147910, and the rest
> > > under 8161993. A single review thread and combined push is still
> > > fine.
> > Okay, can do the split of this CR into two.
> > 
> > I briefly looked through the hs_err log file, but could not find
> > any particular section where this information would fit well. Any
> > suggestions?
> In os.cpp I would modify os::print_cpu_info as follows:
> 
> void os::print_cpu_info(outputStream* st, char* buf, size_t buflen) {
>    // cpu
>    st->print("CPU:");
>    st->print("total %d", os::processor_count());
>    // It's not safe to query number of active processors after crash
>    // st->print("(active %d)", os::active_processor_count());
> + // but we can report the initial number of active processors
> + st->print(" (initial active %d)",
> os::initial_active_processor_count());
>    st->print(" %s", VM_Version::features_string());
>    st->cr();
>    pd_print_cpu_info(st, buf, buflen);
> }
> 
> (I prefer the term "available" to "active" but the later is ingrained
> in the VM :(  ).

Yeah, but let's do this renaming another time.

Thanks for the suggestion.

[...]
> > > The call could be put in the os::init_before_ergo() (or
> > VMVersion::init_before_ergo()) call.
> > 
> > I would prefer to avoid code duplication.
> Agreed. init_before_ergo() seems most reasonable of the two - as this
> is  os related. The important thing is that it happens after 
> processor_count() is initialized (which happens earlier within
> os::init)  and before anyone tries to query it (which I think the GC
> will do as part of the ergonomic setup). So an assertion in 
> initial_active_processor_count() to ensure it is not zero would be
> good. And for good measure an assertion that it is zero in 
> set_initial_active_processor_count().
> 
> > > 
> > > Also if we log the initial_active_count we should log the
> > > _processor_count too.
> > I can log both in log messages and the error log - although
> > processor
> > count information is already in the log.
> With the new proposal I would just add the logging to 
> set_initial_active_processor_count().

New webrev:
http://cr.openjdk.java.net/~tschatzl/8161993/webrev.1/ (full, it's 5
lines now, so I did not bother creating a diff webrev)

Testing:
Some more manual checking, jprt

I will post an RFR for JDK-8147910 soon.

Thanks,
  Thomas



More information about the hotspot-gc-dev mailing list