Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 8e655f85359dd1ef174c38b09e5b5cab458c74b3
      
https://github.com/WebKit/WebKit/commit/8e655f85359dd1ef174c38b09e5b5cab458c74b3
  Author: Basuke Suzuki <basuke.suz...@sony.com>
  Date:   2024-05-17 (Fri, 17 May 2024)

  Changed paths:
    M Source/bmalloc/PlatformPlayStation.cmake
    M Source/bmalloc/libpas/src/libpas/pas_compact_heap_reservation.c

  Log Message:
  -----------
  [PlayStation] Add libpas implementation which don't map huge vss region.
https://bugs.webkit.org/show_bug.cgi?id=274234

Reviewed by Yusuke Suzuki.

libpas allocate memory region called `compact heap reservation` in its very 
early stage of
its life cycle. The area is used by libpas's management object to achieve 
several heaps
managed by libpas system. The point is that they never been deallocated and 
even more, they
never been decommitted. So only action to the memory region is allocation. This 
means that
we don't need to patch every mmap usage with vss library but only this usage. 
Much simpler.

This reservation heap is designed for mmpa's behavior called *demand paging*, 
that the
kernel never assign physical memory to the page until actual write is happened. 
So the heap
is as is from the beginning to the end without any further memory calls such as 
madvise or
munmap. But when some are is allowed to be used for some object, the first 
write to that
page will be used to assign physical memory to that region.

This is smart but not good for our platform. We need precise reserve / commit 
management.
So in this PR, we add some code in 
`pas_compact_heap_reservation_try_allocate()` to switch
current implementation and ours and manage commit when region is actually 
allocated.

Compact heap reservation is used from lower address to higher address by order 
or request.
They don't care page boundary when the region is used. Just the requested 
alignment is
cared. For instance, say the request is coming like following order:

- 84 bytes with 1 byte alignment
- 64 bytes with 16 bytes alignment
- 1M bytes with 1M bytes alignment

then allocation and unused padding is like this:

| request 1   | padding | request 2      | padding   | request 3      | ...
| 84 bytes    | 12      | 64 bytes       | 1,048,416 | 1M bytes       |
| 1 byte alin | bytes   | 16 bytes align | bytes     | 1M bytes align |

See the second padding is pretty huge and sounds very inefficient. But it is 
okay because
actual region is never touched and no page is consumed for the padding region. 
And 128MB
of addresses are enough big for the libpas usage.

FYI: The purpose of this reservation is to represent 64 bit address with 
compact size
(3 bytes in actual configuration). The client of compact heap reservation uses 
the fact
that the assigned address fits in the range of reservation start and end so it 
can be
represented as the index from the start.

Testing is done on Speedometer 3.0 using MiniBrowser

* Source/bmalloc/PlatformPlayStation.cmake:
* Source/bmalloc/libpas/src/libpas/pas_compact_heap_reservation.c:
(pas_compact_heap_reservation_try_allocate):

Canonical link: https://commits.webkit.org/278937@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to