1. 14 Aug, 2020 1 commit
    • Leszek Swirski's avatar
      [offthread] Change OffThreadIsolate to LocalIsolate · f1589bbe
      Leszek Swirski authored
      This patch introduces a new LocalIsolate and LocalFactory, which use
      LocalHeap and replace OffThreadIsolate and OffThreadFactory. This allows
      us to remove those classes, as well as the related OffThreadSpace,
      OffThreadLargeObjectSpace, OffThreadHeap, and OffThreadTransferHandle.
      OffThreadLogger becomes LocalLogger.
      
      LocalHeap behaves more like Heap than OffThreadHeap did, so this allows
      us to additionally remove the concept of "Finish" and "Publish" that the
      OffThreadIsolate had, and allows us to internalize strings directly with
      the newly-concurrent string table (where the implementation can now move
      to FactoryBase).
      
      This patch also removes the off-thread support from the deserializer
      entirely, as well as removing the LocalIsolateWrapper which allowed
      run-time distinction between Isolate and OffThreadIsolate. LocalHeap
      doesn't support the reservation model used by the deserializer, and we
      will likely move the deserializer to use LocalIsolate unconditionally
      once we figure out the details of how to do this.
      
      Bug: chromium:1011762
      
      Change-Id: I1a1a0a72952b19a8a4c167c11a863c153a1252fc
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2315990
      Commit-Queue: Andreas Haas <ahaas@chromium.org>
      Auto-Submit: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarDominik Inführ <dinfuehr@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#69397}
      f1589bbe
  2. 17 Jun, 2020 1 commit
    • Dan Elphick's avatar
      [heap] Use BasicMemoryChunk::FromHeapObject more · 6f267e8a
      Dan Elphick authored
      Since ReadOnlySpace pages will soon not be MemoryChunks, change most
      uses of MemoryChunk::FromHeapObject and FromAddress to use the
      BasicMemoryChunk variants and which use the new MemoryChunk::cast
      function that takes a BasicMemoryChunk and DCHECKs !InReadOnlySpace().
      
      To enable this, it also moves into BasicMemoryChunk several MemoryChunk
      functions that just require a BasicMemoryChunk.
      
      Bug: v8:10454
      Change-Id: I80875b2c2446937ac2c2bc9287d36e71cc050c38
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2243216
      Commit-Queue: Dan Elphick <delphick@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#68390}
      6f267e8a
  3. 05 May, 2020 1 commit
  4. 28 Apr, 2020 1 commit
  5. 14 Apr, 2020 1 commit
    • Leszek Swirski's avatar
      [test] Create one Isolate per unit test (not test suite) · 0c2530ff
      Leszek Swirski authored
      Change the unittests Isolate mixin to create one Isolate per test,
      rather than one per test suite. We usually run these tests independently
      in separate processes anyway, so this shouldn't affect normal test
      execution, but it will avoid Isolate state leaking across tests when
      running the unittests binary directly.
      
      Take this opportunity to also clean up the mixins, changing counter
      initialization and forcing pointer compression into template traits.
      
      Bug: v8:10142
      Change-Id: If92046f9c6f2056252d099faed04d97844ef7319
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2143818Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Auto-Submit: Leszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#67110}
      0c2530ff
  6. 09 Apr, 2020 1 commit
  7. 15 Jan, 2020 1 commit
    • Leszek Swirski's avatar
      [offthread] Add OffThreadFactory · e659917a
      Leszek Swirski authored
      Introduce OffThreadFactory with initial string construction support.
      
      The OffThreadFactory shares with Factory a new CRTP base class, called
      FactoryBase. Methods in FactoryBase return a FactoryHandle<Factory, T>
      alias, which is Handle<T> for normal Factory and a new OffThreadHandle<T>
      for OffThreadFactory. OffThreadHandle<T> behaves like Handle<T>, except
      it stores the object in-line rather than needing external storage.
      
      Any shared factory methods are moved into FactoryBase, which uses CRTP
      to call the sub-class's AllocateRaw method (plus a few more customization
      points which need Isolate access on the main thread).
      
      Methods that used to take an Isolate or Factory, and are needed off the
      main thread, are now expected to be templated on the factory type and
      to use the appropriate handle.
      
      Once an OffThreadFactory has finished being used (e.g. off-thread
      compilation completed) its pages are "Published" into the main-thread
      Heap. To deal with string internalization without creating a bunch of
      ThinStrings, this is done in two stages:
      
        1. 'FinishOffThread': The off-thread pages are walked to
           collect all slots pointing to "internalized" strings. After this is
           called it is invalid to allocate any more objects with the factory.
        2. 'Publish': On the main thread, we transform these slots into
           <Handle to holder, offset> pairs, then for each saved slot
           re-internalize its string and update the slot to point to the
           internalized string.
      
      Bug: chromium:1011762
      Change-Id: I008a694da3c357de34362bd86fe7e1f46b535d5e
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1992434
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#65787}
      e659917a
  8. 04 Nov, 2019 1 commit
  9. 23 Oct, 2019 1 commit
    • Leszek Swirski's avatar
      [heap] Introduce OffThreadSpace · fa13871a
      Leszek Swirski authored
      Add a new PagedSpace called OffThreadSpace. This space will be used for
      off-thread allocation -- it never marks or sweeps, and always expands
      into fresh pages. Once allocation completes, this space's pages can be
      merged into the old space.
      
      The space is similar to the CompactionSpace, and merging for both is
      identical, so we intrduce a new LocalSpace base class that both extend.
      They differ in interaction with the sweeper and in how new pages are
      acquired.
      
      This patch adds the new space and uses it in a few unittests. Future
      work will use it in the main source code.
      
      Bug: chromium:1011762
      Change-Id: Ia008cc95c6e1ef1d1e7ae305fa80fbfc1ff4be2d
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1873690
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarDominik Inführ <dinfuehr@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#64509}
      fa13871a
  10. 22 Oct, 2019 1 commit
    • Dominik Inführ's avatar
      [heap] Slots are either in sweeping or old-to-new RS after Full GC · e79d34ee
      Dominik Inführ authored
      This CL ensures that recorded slots are either in the sweeping or the
      old-to-new remembered set after mark-compact depending on whether the
      page was already swept or not.
      
      All pages that are swept during the evacuation phase also have their
      remembered sets merged. is_local() is renamed to
      is_compaction_space() and non-virtual. The PagedSpace now not only
      knows whether it is a compaction space or not but also for which
      collection through the compaction_space_kind_ field. This allows
      RefillFreeList to merge the remembered sets immediately also for the
      mark-compact collection.
      
      Change-Id: I7457f8393d73f3e8d6b6ebedc46ebc36af509729
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1868613Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#64458}
      e79d34ee
  11. 22 Aug, 2019 2 commits
  12. 20 Aug, 2019 1 commit
  13. 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
  14. 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
  15. 06 Aug, 2019 1 commit
  16. 16 Jul, 2019 2 commits
  17. 23 May, 2019 1 commit
  18. 22 May, 2019 1 commit
  19. 29 Mar, 2019 1 commit
  20. 29 Jan, 2019 1 commit
  21. 10 Jan, 2019 1 commit
  22. 08 Jan, 2019 1 commit
  23. 20 Dec, 2018 1 commit
  24. 28 Sep, 2018 1 commit
  25. 14 Sep, 2018 1 commit
  26. 15 Aug, 2018 1 commit
  27. 26 Jul, 2018 2 commits
  28. 07 Jun, 2018 1 commit
  29. 03 May, 2017 1 commit
    • mlippautz's avatar
      [heap] MinorMC: Evacuation for young generation · bf74d43d
      mlippautz authored
      In the spirit of the full MC, we evacuate and update pointers in parallel for
      the young generation.
      
      The collectors are connected during incremental marking when mark bits are
      transferred from the young generation bitmap to the old generation bitmap.
      
      The evacuation phase cannot (yet) move pages and relies completely on copying
      objects.
      
      BUG=chromium:651354
      
      Review-Url: https://codereview.chromium.org/2796233003
      Cr-Commit-Position: refs/heads/master@{#45074}
      bf74d43d
  30. 05 Apr, 2017 1 commit
  31. 04 Apr, 2017 2 commits