Skip to content

deps: V8: cherry-pick b49206d fom upstream

Ref: https://github.com/nodejs/node/issues/20083

Original commit message:

ThreadDataTable: Change global linked list to per-Isolate hash map.

For use cases with a large number of threads or a large number of isolates (or both), ThreadDataTable can be a major performance bottleneck due to O(n) lookup time of the linked list. Switching to a hash map reduces this to O(1).

Example 1: Sandstorm.io, a Node.js app that utilizes "fibers", was observed spending the majority of CPU time iterating over the ThreadDataTable. See: https://sandstorm.io/news/2016-09-30-fiber-bomb-debugging-story

Example 2: Cloudflare's Workers engine, a high-multi-tenancy web server framework built on V8 (but not Node), creates large numbers of threads and isolates per-process. It saw a 34x improvement in throughput when we applied this patch.

Cloudflare has been using a patch in production since the Workers launch which replaces the linked list with a hash map -- but still global.

This commit builds on that but goes further and creates a separate hash map and mutex for each isolate, with the table being a member of the Isolate class. This avoids any globals and should reduce lock contention.

Bug: v8:5338 Change-Id: If0d11509afb2e043b888c376e36d3463db931b47 Reviewed-on: https://chromium-review.googlesource.com/1014407 Reviewed-by: Yang Guo yangguo@chromium.org Commit-Queue: Yang Guo yangguo@chromium.org Cr-Commit-Position: refs/heads/master@{#52753}

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • commit message follows commit guidelines

CI: https://ci.nodejs.org/job/node-test-pull-request/14871/ V8-CI: https://ci.nodejs.org/view/All/job/node-test-commit-v8-linux/1368/

Merge request reports

Loading