8147910: Cache initial active_processor_count
Introduce and initialize active_processor_count variable in VM. Reviewed-by: dholmes, jprovino
This commit is contained in:
parent
da3339948e
commit
7c45404684
@ -71,6 +71,7 @@ volatile int32_t* os::_mem_serialize_page = NULL;
|
|||||||
uintptr_t os::_serialize_page_mask = 0;
|
uintptr_t os::_serialize_page_mask = 0;
|
||||||
long os::_rand_seed = 1;
|
long os::_rand_seed = 1;
|
||||||
int os::_processor_count = 0;
|
int os::_processor_count = 0;
|
||||||
|
int os::_initial_active_processor_count = 0;
|
||||||
size_t os::_page_sizes[os::page_sizes_max];
|
size_t os::_page_sizes[os::page_sizes_max];
|
||||||
|
|
||||||
#ifndef PRODUCT
|
#ifndef PRODUCT
|
||||||
@ -315,6 +316,7 @@ static void signal_thread_entry(JavaThread* thread, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void os::init_before_ergo() {
|
void os::init_before_ergo() {
|
||||||
|
initialize_initial_active_processor_count();
|
||||||
// We need to initialize large page support here because ergonomics takes some
|
// We need to initialize large page support here because ergonomics takes some
|
||||||
// decisions depending on large page support and the calculated large page size.
|
// decisions depending on large page support and the calculated large page size.
|
||||||
large_page_init();
|
large_page_init();
|
||||||
@ -829,7 +831,11 @@ void os::print_cpu_info(outputStream* st, char* buf, size_t buflen) {
|
|||||||
st->print("CPU:");
|
st->print("CPU:");
|
||||||
st->print("total %d", os::processor_count());
|
st->print("total %d", os::processor_count());
|
||||||
// It's not safe to query number of active processors after crash
|
// It's not safe to query number of active processors after crash
|
||||||
// st->print("(active %d)", os::active_processor_count());
|
// st->print("(active %d)", os::active_processor_count()); but we can
|
||||||
|
// print the initial number of active processors.
|
||||||
|
// We access the raw value here because the assert in the accessor will
|
||||||
|
// fail if the crash occurs before initialization of this value.
|
||||||
|
st->print(" (initial active %d)", _initial_active_processor_count);
|
||||||
st->print(" %s", VM_Version::features_string());
|
st->print(" %s", VM_Version::features_string());
|
||||||
st->cr();
|
st->cr();
|
||||||
pd_print_cpu_info(st, buf, buflen);
|
pd_print_cpu_info(st, buf, buflen);
|
||||||
@ -1597,6 +1603,12 @@ bool os::is_server_class_machine() {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void os::initialize_initial_active_processor_count() {
|
||||||
|
assert(_initial_active_processor_count == 0, "Initial active processor count already set.");
|
||||||
|
_initial_active_processor_count = active_processor_count();
|
||||||
|
log_debug(os)("Initial active processor count set to %d" , _initial_active_processor_count);
|
||||||
|
}
|
||||||
|
|
||||||
void os::SuspendedThreadTask::run() {
|
void os::SuspendedThreadTask::run() {
|
||||||
assert(Threads_lock->owned_by_self() || (_thread == VMThread::vm_thread()), "must have threads lock to call this");
|
assert(Threads_lock->owned_by_self() || (_thread == VMThread::vm_thread()), "must have threads lock to call this");
|
||||||
internal_do_task();
|
internal_do_task();
|
||||||
|
@ -140,6 +140,7 @@ class os: AllStatic {
|
|||||||
static void get_summary_cpu_info(char* buf, size_t buflen);
|
static void get_summary_cpu_info(char* buf, size_t buflen);
|
||||||
static void get_summary_os_info(char* buf, size_t buflen);
|
static void get_summary_os_info(char* buf, size_t buflen);
|
||||||
|
|
||||||
|
static void initialize_initial_active_processor_count();
|
||||||
public:
|
public:
|
||||||
static void init(void); // Called before command line parsing
|
static void init(void); // Called before command line parsing
|
||||||
static void init_before_ergo(void); // Called after command line parsing
|
static void init_before_ergo(void); // Called after command line parsing
|
||||||
@ -227,6 +228,13 @@ class os: AllStatic {
|
|||||||
// Note that on some OSes this can change dynamically.
|
// Note that on some OSes this can change dynamically.
|
||||||
static int active_processor_count();
|
static int active_processor_count();
|
||||||
|
|
||||||
|
// At startup the number of active CPUs this process is allowed to run on.
|
||||||
|
// This value does not change dynamically. May be different from active_processor_count().
|
||||||
|
static int initial_active_processor_count() {
|
||||||
|
assert(_initial_active_processor_count > 0, "Initial active processor count not set yet.");
|
||||||
|
return _initial_active_processor_count;
|
||||||
|
}
|
||||||
|
|
||||||
// Bind processes to processors.
|
// Bind processes to processors.
|
||||||
// This is a two step procedure:
|
// This is a two step procedure:
|
||||||
// first you generate a distribution of processes to processors,
|
// first you generate a distribution of processes to processors,
|
||||||
@ -948,8 +956,9 @@ class os: AllStatic {
|
|||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static long _rand_seed; // seed for random number generator
|
static long _rand_seed; // seed for random number generator
|
||||||
static int _processor_count; // number of processors
|
static int _processor_count; // number of processors
|
||||||
|
static int _initial_active_processor_count; // number of active processors during initialization.
|
||||||
|
|
||||||
static char* format_boot_path(const char* format_string,
|
static char* format_boot_path(const char* format_string,
|
||||||
const char* home,
|
const char* home,
|
||||||
|
Loading…
Reference in New Issue
Block a user