Skip to content

Commit

Permalink
v8: don't busy loop in cpu profiler thread
Browse files Browse the repository at this point in the history
Reduce the overhead of the CPU profiler by replacing sched_yield() with
nanosleep() in V8's tick event processor thread.  The former only yields
the CPU when there is another process scheduled on the same CPU.

Before this commit, the thread would effectively busy loop and consume
100% CPU time.  By forcing a one nanosecond sleep period rounded up to
the task scheduler's granularity (about 50 us on Linux), CPU usage for
the processor thread now hovers around 10-20% for a busy application.

PR-URL: nodejs/node-v0.x-archive#8789
Ref: strongloop/strong-agent#3
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
  • Loading branch information
bnoordhuis authored and trevnorris committed Jan 13, 2015
1 parent fe20196 commit 6ebd85e
Show file tree
Hide file tree
Showing 7 changed files with 7 additions and 26 deletions.
5 changes: 0 additions & 5 deletions deps/v8/src/platform-freebsd.cc
Original file line number Diff line number Diff line change
Expand Up @@ -539,11 +539,6 @@ void Thread::SetThreadLocal(LocalStorageKey key, void* value) {
}


void Thread::YieldCPU() {
sched_yield();
}


class FreeBSDMutex : public Mutex {
public:
FreeBSDMutex() {
Expand Down
5 changes: 0 additions & 5 deletions deps/v8/src/platform-linux.cc
Original file line number Diff line number Diff line change
Expand Up @@ -812,11 +812,6 @@ void Thread::SetThreadLocal(LocalStorageKey key, void* value) {
}


void Thread::YieldCPU() {
sched_yield();
}


class LinuxMutex : public Mutex {
public:
LinuxMutex() {
Expand Down
5 changes: 0 additions & 5 deletions deps/v8/src/platform-macos.cc
Original file line number Diff line number Diff line change
Expand Up @@ -640,11 +640,6 @@ void Thread::SetThreadLocal(LocalStorageKey key, void* value) {
}


void Thread::YieldCPU() {
sched_yield();
}


class MacOSMutex : public Mutex {
public:
MacOSMutex() {
Expand Down
5 changes: 0 additions & 5 deletions deps/v8/src/platform-openbsd.cc
Original file line number Diff line number Diff line change
Expand Up @@ -593,11 +593,6 @@ void Thread::SetThreadLocal(LocalStorageKey key, void* value) {
}


void Thread::YieldCPU() {
sched_yield();
}


class OpenBSDMutex : public Mutex {
public:
OpenBSDMutex() {
Expand Down
6 changes: 6 additions & 0 deletions deps/v8/src/platform-posix.cc
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,12 @@ void OS::StrNCpy(Vector<char> dest, const char* src, size_t n) {
}


void Thread::YieldCPU() {
const timespec delay = { 0, 1 };
nanosleep(&delay, NULL);
}


// ----------------------------------------------------------------------------
// POSIX socket support.
//
Expand Down
5 changes: 0 additions & 5 deletions deps/v8/src/platform-solaris.cc
Original file line number Diff line number Diff line change
Expand Up @@ -527,11 +527,6 @@ void Thread::SetThreadLocal(LocalStorageKey key, void* value) {
}


void Thread::YieldCPU() {
sched_yield();
}


class SolarisMutex : public Mutex {
public:
SolarisMutex() {
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/tools/gyp/v8.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -715,7 +715,7 @@
['OS=="solaris"', {
'link_settings': {
'libraries': [
'-lsocket -lnsl',
'-lsocket -lnsl -lrt',
]},
'sources': [
'../../src/platform-solaris.cc',
Expand Down

0 comments on commit 6ebd85e

Please sign in to comment.