Reviewers: Yang, danno,
Message:
The compiler thread does useful work only 0.5% of the time, which I think is
alarmingly low.
Description:
Track how much time the compiler thread spends doing useful work.
BUG=
TEST=
Please review this at http://codereview.chromium.org/10804027/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/optimizing-compiler-thread.h
M src/optimizing-compiler-thread.cc
Index: src/optimizing-compiler-thread.cc
diff --git a/src/optimizing-compiler-thread.cc
b/src/optimizing-compiler-thread.cc
index
ec302badab116162f0865159e534cc995364a9ef..bd5581353d82543682acae0a60ad686c2e14f59a
100644
--- a/src/optimizing-compiler-thread.cc
+++ b/src/optimizing-compiler-thread.cc
@@ -43,13 +43,22 @@ void OptimizingCompilerThread::Run() {
#endif
Isolate::SetIsolateThreadLocals(isolate_, NULL);
+ int64_t epoch = 0;
+ if (FLAG_trace_parallel_recompilation) epoch = OS::Ticks();
+
while (true) {
input_queue_semaphore_->Wait();
if (Acquire_Load(&stop_thread_)) {
stop_semaphore_->Signal();
+ if (FLAG_trace_parallel_recompilation) {
+ time_spent_total_ = OS::Ticks() - epoch;
+ }
return;
}
+ int64_t compiling_start = 0;
+ if (FLAG_trace_parallel_recompilation) compiling_start = OS::Ticks();
+
Heap::RelocationLock relocation_lock(isolate_->heap());
OptimizingCompiler* optimizing_compiler = NULL;
input_queue_.Dequeue(&optimizing_compiler);
@@ -64,6 +73,10 @@ void OptimizingCompilerThread::Run() {
output_queue_.Enqueue(optimizing_compiler);
isolate_->stack_guard()->RequestCodeReadyEvent();
+
+ if (FLAG_parallel_recompilation) {
+ time_spent_compiling_ += OS::Ticks() - compiling_start;
+ }
}
}
@@ -72,6 +85,13 @@ void OptimizingCompilerThread::Stop() {
Release_Store(&stop_thread_, static_cast<AtomicWord>(true));
input_queue_semaphore_->Signal();
stop_semaphore_->Wait();
+
+ if (FLAG_trace_parallel_recompilation) {
+ double compile_time = static_cast<double>(time_spent_compiling_);
+ double total_time = static_cast<double>(time_spent_total_);
+ double percentage = (compile_time * 100) / total_time;
+ PrintF(" ** Compiler thread did %.2f%% useful work\n", percentage);
+ }
}
Index: src/optimizing-compiler-thread.h
diff --git a/src/optimizing-compiler-thread.h
b/src/optimizing-compiler-thread.h
index
4ea746ad4f051d860a2ecba0e8042f65577bab50..d5627266d09898d5bf514512b36cb42261b5152d
100644
--- a/src/optimizing-compiler-thread.h
+++ b/src/optimizing-compiler-thread.h
@@ -45,7 +45,9 @@ class OptimizingCompilerThread : public Thread {
Thread("OptimizingCompilerThread"),
isolate_(isolate),
stop_semaphore_(OS::CreateSemaphore(0)),
- input_queue_semaphore_(OS::CreateSemaphore(0)) {
+ input_queue_semaphore_(OS::CreateSemaphore(0)),
+ time_spent_compiling_(0),
+ time_spent_total_(0) {
NoBarrier_Store(&stop_thread_, static_cast<AtomicWord>(false));
NoBarrier_Store(&queue_length_, static_cast<AtomicWord>(0));
}
@@ -86,6 +88,8 @@ class OptimizingCompilerThread : public Thread {
UnboundQueue<OptimizingCompiler*> output_queue_;
volatile AtomicWord stop_thread_;
volatile Atomic32 queue_length_;
+ int64_t time_spent_compiling_;
+ int64_t time_spent_total_;
#ifdef DEBUG
int thread_id_;
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev