1. 17 Dec, 2019 2 commits
  2. 11 Dec, 2019 1 commit
    • Ulan Degenbaev's avatar
      [heap] Refactor marking worklists · 6b5bc5e9
      Ulan Degenbaev authored
      This unifies marking worklists handling by the main thread marker and
      by the concurrent markers. A new class called MarkingWorklistsHolder
      owns all marking worklists: the default worklist, the on-hold worklist,
      and the embedder worklist. Each thread creates a local view of the
      marking worklists by creating an instance of MarkingWorklists.
      
      Additionally, marking visitors now work on MarkingWorklists instead of
      accessing each worklist individually.
      
      Besides cleaning the code up, this CL provides a bottleneck for
      implementing per-context worklists.
      
      Bug: chromium:973627
      Change-Id: I52ad65c94bc0695287ba7bf4d8a814a9035e2888
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1941947Reviewed-by: 's avatarHannes Payer <hpayer@chromium.org>
      Reviewed-by: 's avatarDominik Inführ <dinfuehr@chromium.org>
      Commit-Queue: Ulan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#65421}
      6b5bc5e9
  3. 18 Nov, 2019 1 commit
  4. 15 Nov, 2019 1 commit
  5. 14 Nov, 2019 1 commit
  6. 29 Oct, 2019 1 commit
    • Pierre Langlois's avatar
      [test] Make full space simulation work with --no-inline-new. · 74565bf3
      Pierre Langlois authored
      When inlined allocations are disabled, the space->limit() does not point to the
      end of the current page. Instead, it points to the current allocation pointer so
      is the same as space->top().
      
      See how the limit is computed, if heap()->inline_allocation_disabled(), then the
      limit will be the same as the requested allocation area:
      
      ```
      Address SpaceWithLinearArea::ComputeLimit(Address start, Address end,
                                                size_t min_size) {
        DCHECK_GE(end - start, min_size);
      
        if (heap()->inline_allocation_disabled()) {
          // Fit the requested area exactly.
          return start + min_size;
        } else if (SupportsInlineAllocation() && AllocationObserversActive()) {
          // ...
        } else {
          // The entire node can be used as the linear allocation area.
          return end;
        }
      }
      ```
      
      If we want to simulate filling up a whole page in the new space, we can instead
      look at the ToSpace's page_high() which will be the end of the current page in
      which we're allocating.
      
      Bug: v8:9906
      Change-Id: I81113d151bc083cd22d17ea1a4fbae7fef9dff6d
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1886914Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Commit-Queue: Pierre Langlois <pierre.langlois@arm.com>
      Cr-Commit-Position: refs/heads/master@{#64612}
      74565bf3
  7. 28 Oct, 2019 1 commit
    • Seth Brenith's avatar
      [torque] Use generated instance types, part 1 · 91e6421c
      Seth Brenith authored
      This change begins making use of the fact that Torque now knows about
      the relationship between classes and instance types, to replace a few
      repetitive lists:
      
      - Instance type checkers (single and range), defined in
        src/objects/instance-type.h
      - Verification dispatch in src/diagnostics/objects-debug.cc
      - Printer dispatch in src/diagnostics/objects-printer.cc
      - Postmortem object type detection in
        tools/debug_helper/get-object-properties.cc
      
      Torque is updated to generate four macro lists for the instance types,
      representing all of the classes separated in two dimensions: classes
      that correspond to a single instance type versus those that have a
      range, and classes that are fully defined in Torque (with fields and
      methods inside '{}') versus those that are only declared. The latter
      distinction is useful because fully-defined classes are guaranteed to
      correspond to real C++ classes, whereas only-declared classes are not.
      
      A few other changes were required to make the lists above work:
      
      - Renamed IsFiller to IsFreeSpaceOrFiller to better reflect what it does
        and avoid conflicts with the new macro-generated IsFiller method. This
        is the part I'm most worried about: I think the new name is an
        improvement for clarity and consistency, but I could imagine someone
        typing IsFiller out of habit and introducing a bug. If we'd prefer to
        keep the name IsFiller, my other idea is to rename FreeSpace to
        VariableSizeFiller and Filler to FixedSizeFiller.
      - Made Tuple3 extend from Struct, not Tuple2, because IsTuple2 is
        expected to check for only TUPLE2_TYPE and not include TUPLE3_TYPE.
      - Normalized the dispatched behavior for BigIntBase and HeapNumber.
      - Added a few new object printers.
      
      Bug: v8:7793
      Change-Id: I5462bb105f8a314baa59bd6ab6ab6215df6f313c
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1860314
      Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
      Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Reviewed-by: 's avatarDan Elphick <delphick@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#64597}
      91e6421c
  8. 23 Oct, 2019 1 commit
  9. 17 Oct, 2019 1 commit
    • Dominik Inführ's avatar
      [heap] Add flag to promote young objects in MC · 13ddba2a
      Dominik Inführ authored
      Add FLAG_always_promote_young_mc that always promotes young objects
      during a Full GC when enabled. This flag guarantees that the young gen
      and the sweeping remembered set are empty after a full GC.
      
      This CL also makes use of the fact that the sweeping remembered set is
      empty and only invalidates an object when there were old-to-new slots
      recorded on its page.
      
      Bug: chromium:1014943
      Change-Id: Idfb13dfbe76bad5ec8b485a60bebc30531aec649
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1863201
      Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#64348}
      13ddba2a
  10. 11 Oct, 2019 1 commit
  11. 07 Oct, 2019 2 commits
  12. 04 Oct, 2019 1 commit
  13. 25 Sep, 2019 1 commit
  14. 18 Sep, 2019 1 commit
  15. 17 Sep, 2019 1 commit
  16. 16 Sep, 2019 1 commit
  17. 11 Sep, 2019 1 commit
  18. 22 Aug, 2019 1 commit
  19. 20 Aug, 2019 2 commits
  20. 19 Aug, 2019 2 commits
    • Dominik Inführ's avatar
      Revert "Use list of invalidated objects for old-to-new refs" · 9a9ba762
      Dominik Inführ authored
      This reverts commit 60843b42.
      
      Reason for revert: TSAN detected issue between Scavenge workers.
      One task could invoke RefillFreeList(), while the other task iterates the remembered set of a swept page.
      
      Original change's description:
      > Use list of invalidated objects for old-to-new refs
      > 
      > Instead of inserting "deletion" entries into the store buffer, keep a
      > list of invalidated objects to filter out invalid old-to-new slots.
      > 
      > The first CL https://crrev.com/c/1704109 got reverted because both the
      > sweeper and the main task were modifying the invalidated slots data
      > structure concurrently. This CL changes this, such that the sweeper
      > only modifies the invalidated slots during the final atomic pause when
      > the main thread is not running. The sweeper does not need to clean this
      > data structure after the pause, since the "update pointers" phase
      > already removed all invalidated slots.
      > 
      > The second CL https://crrev.com/c/1733081 got reverted because the
      > sweeper might find more free space than the full GC before it. If an
      > object shrinks after the pause but before the sweep, the invalidated
      > object might span free memory and potentially new allocated objects.
      > Therefore shrink invalidated objects when processing swept pages on
      > the main thread. Also clean recorded slots in the gap.
      > 
      > TBR=petermarshall@chromium.org
      > 
      > Bug: v8:9454
      > Change-Id: I80d1fa3bbc24e97f7c97a373aaad66f105456f12
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1751795
      > Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
      > Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#63239}
      
      TBR=ulan@chromium.org,hpayer@chromium.org,dinfuehr@chromium.org
      
      Change-Id: I9c6a371ebe36a1873acbe0d6c6a75dd2f5a55f4e
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:9454
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1760817Reviewed-by: 's avatarDominik Inführ <dinfuehr@chromium.org>
      Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#63253}
      9a9ba762
    • Dominik Inführ's avatar
      Use list of invalidated objects for old-to-new refs · 60843b42
      Dominik Inführ authored
      Instead of inserting "deletion" entries into the store buffer, keep a
      list of invalidated objects to filter out invalid old-to-new slots.
      
      The first CL https://crrev.com/c/1704109 got reverted because both the
      sweeper and the main task were modifying the invalidated slots data
      structure concurrently. This CL changes this, such that the sweeper
      only modifies the invalidated slots during the final atomic pause when
      the main thread is not running. The sweeper does not need to clean this
      data structure after the pause, since the "update pointers" phase
      already removed all invalidated slots.
      
      The second CL https://crrev.com/c/1733081 got reverted because the
      sweeper might find more free space than the full GC before it. If an
      object shrinks after the pause but before the sweep, the invalidated
      object might span free memory and potentially new allocated objects.
      Therefore shrink invalidated objects when processing swept pages on
      the main thread. Also clean recorded slots in the gap.
      
      TBR=petermarshall@chromium.org
      
      Bug: v8:9454
      Change-Id: I80d1fa3bbc24e97f7c97a373aaad66f105456f12
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1751795
      Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#63239}
      60843b42
  21. 08 Aug, 2019 1 commit
    • Dominik Inführ's avatar
      Revert "Use list of invalidated objects for old-to-new refs" · c9f9d1b0
      Dominik Inführ authored
      This reverts commit e2f98ec2.
      
      Reason for revert: Caused performance regression in ArrayLiteralInitialSpreadSmallHoley.
      
      Original change's description:
      > Use list of invalidated objects for old-to-new refs
      >
      > Instead of inserting "deletion" entries into the store buffer, keep
      > a list of invalidated objects to filter out invalid old-to-new slots.
      >
      > The first CL https://crrev.com/c/1704109 got reverted because both the sweeper and the main task were modifying the invalidated slots data structure concurrently. This CL changes this, such that the sweeper only modifies the invalidated slots during the final atomic pause when the main thread is not running. The sweeper does not need to clean this data structure after the pause, since the "update pointers" phase already removed all invalidated slots.
      >
      > Bug: v8:9454
      > Change-Id: Iffb5bf96de2c89eee1ee1231a3414a0f2a155cbc
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1733081
      > Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
      > Reviewed-by: Peter Marshall <petermarshall@chromium.org>
      > Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#63087}
      
      TBR=ulan@chromium.org,petermarshall@chromium.org,dinfuehr@chromium.org
      
      # Not skipping CQ checks because original CL landed > 1 day ago.
      
      Bug: v8:9454
      Change-Id: I328b9f72df45fc9570d4a4d1b5389eac010638c7
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1743970
      Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
      Reviewed-by: 's avatarDominik Inführ <dinfuehr@chromium.org>
      Reviewed-by: 's avatarPeter Marshall <petermarshall@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#63131}
      c9f9d1b0
  22. 06 Aug, 2019 1 commit
  23. 16 Jul, 2019 2 commits
  24. 12 Jul, 2019 1 commit
  25. 08 Jul, 2019 1 commit
  26. 27 Jun, 2019 1 commit
  27. 26 Jun, 2019 1 commit
  28. 25 Jun, 2019 1 commit
  29. 19 Jun, 2019 2 commits
  30. 18 Jun, 2019 1 commit
  31. 17 Jun, 2019 1 commit
  32. 11 Jun, 2019 2 commits
  33. 06 Jun, 2019 1 commit