[webkit-reviews] review granted: [Bug 226237] [bmalloc] Make adaptive scavenging more precise : [Attachment 429734] Updated patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu May 27 11:53:20 PDT 2021

Geoffrey Garen <ggaren at apple.com> has granted Michael Saboff
<msaboff at apple.com>'s request for review:
Bug 226237: [bmalloc] Make adaptive scavenging more precise

Attachment 429734: Updated patch


--- Comment #8 from Geoffrey Garen <ggaren at apple.com> ---
Comment on attachment 429734
  --> https://bugs.webkit.org/attachment.cgi?id=429734
Updated patch

View in context: https://bugs.webkit.org/attachment.cgi?id=429734&action=review


> Source/bmalloc/ChangeLog:20
> +	   There is the possible future optimization where we also keep track
of the
> +	   first address of physically mapped memory in a LargeRange.  Since
> +	   allocates memory from lower addresses first, it is thought that the
> +	   in this patch is sufficient to reduce not only the number of madvise
> +	   but the time it takes to make those calls.

Might be worth mentioning that you tested this thought, and what the results

> Source/bmalloc/bmalloc/Heap.cpp:-239
> -	   auto metadataSize = Chunk::metadataSize(pageSize);
> -	   vmDeallocatePhysicalPagesSloppy(chunk->address(sizeof(Chunk)),
metadataSize - sizeof(Chunk));
> -
> -	   auto decommitSize = chunkSize - metadataSize - accountedInFreeable;
> -	   if (decommitSize > 0)
> -	       vmDeallocatePhysicalPagesSloppy(chunk->address(chunkSize -
decommitSize), decommitSize);

I thought about this for a while and did not come up with a better idea than
removing these VM deallocations. But I think this change means we need to A/B
test Membuster and PLUM before we land.

> Source/bmalloc/bmalloc/Heap.cpp:231
> +	       if (calculatingStartPhysicalSize) {

I think this would be clearer if we had a local variable 'SmallPage*
firstPageWithoutPhysicalPages = nullptr'.

Then here we can have:

if (!firstPageWithoutPhysicalPages)
    firstPageWithoutPhysicalPages = page;

And below we can have:

size_t startPhysicalSize = firstPageWithoutPhysicalPages ?
firstPageWithoutPhysicalPages->begin()->begin() - chunk->bytes() : size;

That way, it's more explicit what the loop is searching for, and there's never
a time when startPhysicalSize holds an invalid value.

> Source/bmalloc/bmalloc/LargeRange.h:90
> +    // This is the last address of physical memory in this range.

last => past the end

More information about the webkit-reviews mailing list