# HG changeset patch # User jmasa # Date 1463691590 25200 # Thu May 19 13:59:50 2016 -0700 # Node ID 15b538bac28ee240135b3b62833cf2ce400ccfa7 # Parent c31d418fc552c126515aab184025840544f7d8fe [mq]: 8157240 diff --git a/src/share/vm/gc/parallel/gcTaskManager.cpp b/src/share/vm/gc/parallel/gcTaskManager.cpp --- a/src/share/vm/gc/parallel/gcTaskManager.cpp +++ b/src/share/vm/gc/parallel/gcTaskManager.cpp @@ -386,6 +386,8 @@ void GCTaskManager::add_workers(bool initializing) { os::ThreadType worker_type = os::pgc_thread; + uint previous_created_workers = _created_workers; + _created_workers = WorkerManager::add_workers(this, _active_workers, (uint) _workers, @@ -393,6 +395,16 @@ worker_type, initializing); _active_workers = MIN2(_created_workers, _active_workers); + + WorkerManager::log_worker_creation(this, previous_created_workers, _active_workers, _created_workers, initializing); +} + +char *GCTaskManager::worker_name(uint which) { + if (thread(which) != NULL) { + return thread(which)->name(); + } else { + return NULL; + } } void GCTaskManager::initialize() { diff --git a/src/share/vm/gc/parallel/gcTaskManager.hpp b/src/share/vm/gc/parallel/gcTaskManager.hpp --- a/src/share/vm/gc/parallel/gcTaskManager.hpp +++ b/src/share/vm/gc/parallel/gcTaskManager.hpp @@ -556,6 +556,8 @@ GCTaskThread* install_worker(uint worker_id); // Add GC workers as needed. void add_workers(bool initializing); + // Return the thread name of a worker + char *worker_name(uint which); }; // diff --git a/src/share/vm/gc/shared/workerManager.hpp b/src/share/vm/gc/shared/workerManager.hpp --- a/src/share/vm/gc/shared/workerManager.hpp +++ b/src/share/vm/gc/shared/workerManager.hpp @@ -67,11 +67,23 @@ os::start_thread(new_worker); } - log_trace(gc, task)("AdaptiveSizePolicy::add_workers() : " - "active_workers: %u created_workers: %u", - active_workers, created_workers); - return created_workers; } + + // Log (at trace level) a change in the number of created workers. + template + static void log_worker_creation(WorkerType* holder, + uint previous_created_workers, + uint active_workers, + uint created_workers, + bool initializing) { + if (previous_created_workers < created_workers) { + const char* initializing_msg = initializing ? "Adding initial" : ""; + log_trace(gc, task)("AdaptiveSizePolicy::add_workers() : %s " + "active_workers: %u created_workers: %u for %s to #%u", + initializing_msg, active_workers, created_workers, + holder->worker_name(previous_created_workers), created_workers - 1); + } + } }; #endif // SHARE_VM_GC_SHARED_WORKERMANAGER_HPP diff --git a/src/share/vm/gc/shared/workgroup.cpp b/src/share/vm/gc/shared/workgroup.cpp --- a/src/share/vm/gc/shared/workgroup.cpp +++ b/src/share/vm/gc/shared/workgroup.cpp @@ -66,6 +66,7 @@ } else { worker_type = os::pgc_thread; } + uint previous_created_workers = _created_workers; _created_workers = WorkerManager::add_workers(this, active_workers, @@ -74,6 +75,16 @@ worker_type, initializing); _active_workers = MIN2(_created_workers, _active_workers); + + WorkerManager::log_worker_creation(this, previous_created_workers, _active_workers, _created_workers, initializing); +} + +char* AbstractWorkGang::worker_name(uint which) { + if (worker(which) != NULL) { + return worker(which)->name(); + } else { + return NULL; + } } AbstractGangWorker* AbstractWorkGang::worker(uint i) const { diff --git a/src/share/vm/gc/shared/workgroup.hpp b/src/share/vm/gc/shared/workgroup.hpp --- a/src/share/vm/gc/shared/workgroup.hpp +++ b/src/share/vm/gc/shared/workgroup.hpp @@ -173,6 +173,9 @@ // Add GC workers as needed to reach the specified number of workers. void add_workers(uint active_workers, bool initializing); + // Return the name of the thread in the work gang + char* worker_name(uint which); + // Return the Ith worker. AbstractGangWorker* worker(uint i) const;