• Kenton Varda's avatar
    ThreadDataTable: Change global linked list to per-Isolate hash map. · b49206de
    Kenton Varda authored
    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/1014407Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
    Commit-Queue: Yang Guo <yangguo@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#52753}
    b49206de
isolate.h 68.2 KB