Comparing changes
Open a pull request
base repository: nodejs/node-v0.x-archive
base: d1fe6857ba40
head repository: nodejs/node-v0.x-archive
compare: b19b60a05c30
- 16 commits
- 294 files changed
- 9 contributors
Commits on Apr 8, 2014
Commits on Apr 10, 2014
-
src: use monotonic time for process.uptime()
`process.uptime()` interface will return the amount of time the current process has been running. To achieve this it was caching the `uv_uptime` value at program start, and then on the call to `process.uptime()` returning the delta between the two values. `uv_uptime` is defined as the number of seconds the operating system has been up since last boot. On sunos this interface uses `kstat`s which can be a significantly expensive operation as it requires exclusive access, but because of the design of `process.uptime()` node *had* to always call this on start. As a result if you had many node processes all starting at the same time you would suffer lock contention as they all tried to read kstats. Instead of using `uv_uptime` to achieve this, the libuv loop already has a concept of current loop time in the form of `uv_now()` which is in fact monotonically increasing, and already stored directly on the loop. By using this value at start every platform performs at least one fewer syscall during initialization. Since the interface to `uv_uptime` is defined as seconds, in the call to `process.uptime()` we now `uv_update_time` get our delta, divide by 1000 to get seconds, and then convert to an `Integer`. In 0.12 we can move back to `Number::New` instead and not lose precision. Caveat: For some platforms `uv_uptime` reports time monotonically increasing regardless of system hibernation, `uv_now` interface is also monotonically increasing but may not reflect time spent in hibernation.
-
Signed-off-by: Fedor Indutny <fedor@indutny.com>
Commits on Apr 14, 2014
-
child_process: fix deadlock when sending handles
Fix possible deadlock, when handles are sent in both direction simultaneously. In such rare cases, both sides may queue their `NODE_HANDLE_ACK` replies and wait for them. fix #7465
Commits on Apr 15, 2014
-
See https://code.google.com/p/chromium/issues/detail?id=25916 Parse URLs with backslashes the same as web browsers, by replacing all backslashes with forward slashes, except those that occur after the first # character.
-
* isaacs, Robert Kowalski, Benjamin Coe: Test Improvements * isaacs doc: Add canonical url * isaacs view: handle unpublished packages properly * Raynos (Jake Verbaten) do not log if silent * Julian Gruber fix no such property error * isaacs npmconf@0.1.14 * Thorsten Lorenz adding save-prefix configuration option * isaacs npm-registry-client@0.4.7 * isaacs cache: treat missing versions as a 404 * isaacs cache: Save shasum, write resolved/etc data to cache * isaacs cache: Always fetch root doc * isaacs cache: don't repack unnecessarily from tmp * Andrey Kislyuk Don't crash if shrinkwrap-dependencies were not passed in pkginfo * Robert Kowalski fix link in faq * Jean Lauliac Add a peerDependencies section in package.json doc * isaacs read-installed@2.0.2
Commits on Apr 24, 2014
-
-
Signed-off-by: Fedor Indutny <fedor@indutny.com>
-
doc: fix missing link in net api
Signed-off-by: Fedor Indutny <fedor@indutny.com>
-
deps: make v8 use CLOCK_REALTIME_COARSE
Date.now() indirectly calls gettimeofday() on Linux and that's a system call that is extremely expensive on virtualized systems when the host operating system has to emulate access to the hardware clock. Case in point: output from `perf record -c 10000 -e cycles:u -g -i` for a benchmark/http_simple bytes/8 benchmark with a light load of 50 concurrent clients: 53.69% node node [.] v8::internal::OS::TimeCurrentMillis() | --- v8::internal::OS::TimeCurrentMillis() | |--99.77%-- v8::internal::Runtime_DateCurrentTime(v8::internal::Arguments, v8::internal::Isolate*) | 0x23587880618e That's right - over half of user time spent inside the V8 function that calls gettimeofday(). Notably, nearly all system time gets attributed to acpi_pm_read(), the kernel function that reads the ACPI power management timer: 32.49% node [kernel.kallsyms] [k] acpi_pm_read | --- acpi_pm_read | |--98.40%-- __getnstimeofday | getnstimeofday | | | |--71.61%-- do_gettimeofday | | sys_gettimeofday | | system_call_fastpath | | 0x7fffbbaf6dbc | | | | | |--98.72%-- v8::internal::OS::TimeCurrentMillis() The cost of the gettimeofday() system call is normally measured in nanoseconds but we were seeing 100 us averages and spikes >= 1000 us. The numbers were so bad, my initial hunch was that the node process was continuously getting rescheduled inside the system call... v8::internal::OS::TimeCurrentMillis()'s most frequent caller is v8::internal::Runtime_DateCurrentTime(), the V8 run-time function that's behind Date.now(). The timeout handling logic in lib/http.js and lib/net.js calls into lib/timers.js and that module will happily call Date.now() hundreds or even thousands of times per second. If you saw exports._unrefActive() show up in --prof output a lot, now you know why. That's why this commit makes V8 switch over to clock_gettime() on Linux. In particular, it checks if CLOCK_REALTIME_COARSE is available and has a resolution <= 1 ms because in that case the clock_gettime() call can be fully serviced from the vDSO. It speeds up the aforementioned benchmark by about 100% on the affected systems and should go a long way toward addressing the latency issues that StrongLoop customers have been reporting. This patch will be upstreamed as a CR against V8 3.26. I'm sending it as a pull request for v0.10 first because that's what our users are running and because the delta between 3.26 and 3.14 is too big to reasonably back-port the patch. I'll open a pull request for the master branch once the CR lands upstream. Signed-off-by: Trevor Norris <trev.norris@gmail.com> Signed-off-by: Fedor Indutny <fedor@indutny.com>
Commits on Apr 25, 2014
-
util: format as Error if instanceof Error
Conflicts: lib/util.js test/simple/test-util-format.js This is a backport to fix #7253 Signed-off-by: Fedor Indutny <fedor@indutny.com>
Commits on Apr 28, 2014
-
deps: fix v8 link error with glibc < 2.17
Commit f9ced08 switches V8 on Linux over from gettimeofday() to clock_getres() and clock_gettime(). As of glibc 2.17, those functions live in libc. For older versions, we need to pull them in from librt. Fixes the following link-time error; Release/obj.target/deps/v8/tools/gyp/libv8_base.a(platform-posix.o): In function `v8::internal::OS::Ticks()': platform-posix.cc:(.text+0x93c): undefined reference to `clock_gettime' platform-posix.cc:(.text+0x989): undefined reference to `clock_getres' Fixes #7514. Signed-off-by: Fedor Indutny <fedor@indutny.com>
Commits on Apr 29, 2014
-
docs: add cautionary note to emitter.removeAllListeners
Signed-off-by: Fedor Indutny <fedor@indutny.com>
Commits on May 1, 2014
-
-
* Check SHA before using files from cache * adduser: allow change of the saved password * Make `npm install` respect `config.unicode` * Fix lifecycle to pass `Infinity` for config env value * Don't return 0 exit code on invalid command * cache: Handle 404s and other HTTP errors as errors * bump tap dep, make tests stderr a bit quieter * Resolve ~ in path configs to env.HOME * Include npm version in default user-agent conf * npm init: Use ISC as default license, use save-prefix for deps * Many test and doc fixes
-
Merge remote-tracking branch 'upstream/v0.10'
Reverted 9520ade Conflicts: deps/cares/src/ares_parse_txt_reply.c deps/uv/.mailmap deps/uv/AUTHORS deps/uv/ChangeLog deps/uv/include/uv.h deps/uv/src/unix/error.c deps/uv/src/unix/process.c deps/uv/src/version.c deps/uv/src/win/pipe.c deps/uv/src/win/signal.c deps/uv/src/win/util.c deps/uv/test/test-spawn.c deps/uv/vcbuild.bat deps/v8/src/platform-posix.cc deps/v8/tools/gyp/v8.gyp lib/util.js src/node.cc test/simple/test-util-format.js test/simple/test-util.js
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff d1fe6857ba40...b19b60a05c30