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), orvcbuild 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/