⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 243389 in webkit


Ignore:
Timestamp:
Mar 22, 2019, 10:43:29 AM (7 years ago)
Author:
msaboff@apple.com
Message:

[BMalloc] No need to delay deallocating chunks based on recent use
https://bugs.webkit.org/show_bug.cgi?id=196121

Reviewed by Mark Lam.

The "used since last scavenge" logic is not needed for small chunks since their memory isn't decommitted directly.
We can deallocate small chunks immediately as that adds them to the LargeRange free list. That free list employs the
"used since last scavenge" logic before the scavenger decommits the backing memory.

  • bmalloc/Chunk.h:

(bmalloc::Chunk::usedSinceLastScavenge): Deleted.
(bmalloc::Chunk::clearUsedSinceLastScavenge): Deleted.
(bmalloc::Chunk::setUsedSinceLastScavenge): Deleted.

  • bmalloc/Heap.cpp:

(bmalloc::Heap::scavenge):
(bmalloc::Heap::allocateSmallPage):

Location:
trunk/Source/bmalloc
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/bmalloc/ChangeLog

    r243357 r243389  
     12019-03-21  Michael Saboff  <msaboff@apple.com>
     2
     3        [BMalloc] No need to delay deallocating chunks based on recent use
     4        https://bugs.webkit.org/show_bug.cgi?id=196121
     5
     6        Reviewed by Mark Lam.
     7
     8        The "used since last scavenge" logic is not needed for small chunks since their memory isn't decommitted directly.
     9        We can deallocate small chunks immediately as that adds them to the LargeRange free list.  That free list employs the
     10        "used since last scavenge" logic before the scavenger decommits the backing memory.
     11
     12        * bmalloc/Chunk.h:
     13        (bmalloc::Chunk::usedSinceLastScavenge): Deleted.
     14        (bmalloc::Chunk::clearUsedSinceLastScavenge): Deleted.
     15        (bmalloc::Chunk::setUsedSinceLastScavenge): Deleted.
     16        * bmalloc/Heap.cpp:
     17        (bmalloc::Heap::scavenge):
     18        (bmalloc::Heap::allocateSmallPage):
     19
    1202019-03-21  Brady Eidson  <beidson@apple.com>
    221
  • trunk/Source/bmalloc/bmalloc/Chunk.h

    r243144 r243389  
    4646    unsigned refCount() { return m_refCount; }
    4747
    48     bool usedSinceLastScavenge() { return m_usedSinceLastScavenge; }
    49     void clearUsedSinceLastScavenge() { m_usedSinceLastScavenge = false; }
    50     void setUsedSinceLastScavenge() { m_usedSinceLastScavenge = true; }
    51 
    5248    size_t offset(void*);
    5349
     
    6460private:
    6561    size_t m_refCount { };
    66     bool m_usedSinceLastScavenge: 1;
    6762    List<SmallPage> m_freePages { };
    6863
  • trunk/Source/bmalloc/bmalloc/Heap.cpp

    r243144 r243389  
    203203
    204204    for (auto& list : m_chunkCache) {
    205         for (auto iter = list.begin(); iter != list.end(); ) {
    206             Chunk* chunk = *iter;
    207             if (chunk->usedSinceLastScavenge()) {
    208                 chunk->clearUsedSinceLastScavenge();
    209                 deferredDecommits++;
    210                 ++iter;
    211                 continue;
    212             }
    213             ++iter;
    214             list.remove(chunk);
    215             deallocateSmallChunk(chunk, &list - &m_chunkCache[0]);
    216         }
     205        while (!list.isEmpty())
     206            deallocateSmallChunk(list.pop(), &list - &m_chunkCache[0]);
    217207    }
    218208
     
    317307
    318308        chunk->ref();
    319         chunk->setUsedSinceLastScavenge();
    320309
    321310        SmallPage* page = chunk->freePages().pop();
Note: See TracChangeset for help on using the changeset viewer.