[webkit-changes] [WebKit/WebKit] 968212: Allocate megapages from different page provider th...

David Degazio noreply at github.com
Wed Dec 18 17:25:37 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 968212ccdd07944a158b38d628827e06f2f1fa89
      https://github.com/WebKit/WebKit/commit/968212ccdd07944a158b38d628827e06f2f1fa89
  Author: David Degazio <d_degazio at apple.com>
  Date:   2024-12-18 (Wed, 18 Dec 2024)

  Changed paths:
    M LayoutTests/crypto/crypto-random-values-oom.html
    M LayoutTests/storage/indexeddb/IDBKey-create-array-buffer-view-oom.html
    M Source/bmalloc/CMakeLists.txt
    M Source/bmalloc/bmalloc.xcodeproj/project.pbxproj
    M Source/bmalloc/libpas/src/libpas/jit_heap_config.h
    M Source/bmalloc/libpas/src/libpas/pas_basic_heap_page_caches.h
    M Source/bmalloc/libpas/src/libpas/pas_bootstrap_free_heap.c
    M Source/bmalloc/libpas/src/libpas/pas_compact_heap_reservation.c
    M Source/bmalloc/libpas/src/libpas/pas_create_basic_heap_page_caches_with_reserved_memory.c
    M Source/bmalloc/libpas/src/libpas/pas_enumerable_page_malloc.c
    M Source/bmalloc/libpas/src/libpas/pas_enumerable_page_malloc.h
    M Source/bmalloc/libpas/src/libpas/pas_enumerator_region.c
    M Source/bmalloc/libpas/src/libpas/pas_heap.c
    M Source/bmalloc/libpas/src/libpas/pas_heap.h
    M Source/bmalloc/libpas/src/libpas/pas_heap_config_utils.c
    M Source/bmalloc/libpas/src/libpas/pas_heap_config_utils.h
    M Source/bmalloc/libpas/src/libpas/pas_heap_kind.h
    M Source/bmalloc/libpas/src/libpas/pas_large_heap.c
    M Source/bmalloc/libpas/src/libpas/pas_large_heap.h
    M Source/bmalloc/libpas/src/libpas/pas_large_heap_physical_page_sharing_cache.h
    M Source/bmalloc/libpas/src/libpas/pas_local_allocator.h
    M Source/bmalloc/libpas/src/libpas/pas_local_allocator_inlines.h
    M Source/bmalloc/libpas/src/libpas/pas_megapage_cache.h
    M Source/bmalloc/libpas/src/libpas/pas_page_base_config.h
    A Source/bmalloc/libpas/src/libpas/pas_page_config_size_category.h
    M Source/bmalloc/libpas/src/libpas/pas_page_malloc.c
    M Source/bmalloc/libpas/src/libpas/pas_page_malloc.h
    A Source/bmalloc/libpas/src/libpas/pas_small_medium_bootstrap_free_heap.c
    A Source/bmalloc/libpas/src/libpas/pas_small_medium_bootstrap_free_heap.h
    A Source/bmalloc/libpas/src/libpas/pas_small_medium_bootstrap_heap_page_provider.c
    A Source/bmalloc/libpas/src/libpas/pas_small_medium_bootstrap_heap_page_provider.h
    M Source/bmalloc/libpas/src/libpas/pas_try_allocate_intrinsic.h
    M Source/bmalloc/libpas/src/libpas/pas_utility_heap_config.h

  Log Message:
  -----------
  Allocate megapages from different page provider than large allocations in libpas
https://bugs.webkit.org/show_bug.cgi?id=284338
rdar://138070544

Reviewed by Yusuke Suzuki.

This patch separates out the way megapages are allocated from other
large allocations in libpas. First, we create a distinct bootstrap heap
and page provider for small/medium allocations. Next, we create a new
large free heap whose page provider is this new bootstrap heap. Next,
for each pas_heap, we create a new megapage_large_heap alongside the
existing large heap, a pas_large_heap backed by the new bootstrap heap.
Finally, we change the way megapage caches are constructed, to use this
new large heap as the allocator for megapages instead of self-hosting
using the existing large heap. Altogether, this means megapages, and the
small/medium objects within them, are no longer allocated out of the same
page source as marge/large objects. This patch also adds some new fields
to page configs and local allocators to make it clear whether a page or
allocator belongs to a megapage or not.

This patch also decreases the memory pressure in two OOM layout tests.
These tests are relying too strongly on the absence of an OOM error in
subsequent code, and with this patch perturbing the heap, it seems they
consistently but spuriously crash with an OOM error. Removing some
allocations in these tests reduces the chance we get an OOM after the
critical section of the test is over, preventing spurious failures.

* Source/bmalloc/CMakeLists.txt:
* Source/bmalloc/bmalloc.xcodeproj/project.pbxproj:
* Source/bmalloc/libpas/src/libpas/jit_heap_config.h:
* Source/bmalloc/libpas/src/libpas/pas_basic_heap_page_caches.h:
* Source/bmalloc/libpas/src/libpas/pas_bootstrap_free_heap.c:
(bootstrap_source_allocate_aligned):
* Source/bmalloc/libpas/src/libpas/pas_compact_heap_reservation.c:
(pas_compact_heap_reservation_try_allocate):
* Source/bmalloc/libpas/src/libpas/pas_create_basic_heap_page_caches_with_reserved_memory.c:
(allocate_from_megapages):
(pas_create_basic_heap_page_caches_with_reserved_memory):
* Source/bmalloc/libpas/src/libpas/pas_enumerable_page_malloc.c:
(pas_enumerable_page_malloc_try_allocate_without_deallocating_padding):
* Source/bmalloc/libpas/src/libpas/pas_enumerable_page_malloc.h:
* Source/bmalloc/libpas/src/libpas/pas_enumerator_region.c:
(pas_enumerator_region_allocate):
* Source/bmalloc/libpas/src/libpas/pas_heap.c:
(pas_heap_create):
* Source/bmalloc/libpas/src/libpas/pas_heap.h:
(pas_heap_for_large_heap):
* Source/bmalloc/libpas/src/libpas/pas_heap_config_utils.c:
(pas_heap_config_utils_allocate_aligned):
* Source/bmalloc/libpas/src/libpas/pas_heap_config_utils.h:
* Source/bmalloc/libpas/src/libpas/pas_heap_kind.h:
(pas_heap_kind_get_string):
* Source/bmalloc/libpas/src/libpas/pas_large_heap.c:
(pas_large_heap_construct):
* Source/bmalloc/libpas/src/libpas/pas_large_heap.h:
* Source/bmalloc/libpas/src/libpas/pas_large_heap_physical_page_sharing_cache.h:
* Source/bmalloc/libpas/src/libpas/pas_local_allocator.h:
* Source/bmalloc/libpas/src/libpas/pas_local_allocator_inlines.h:
(pas_local_allocator_set_up_bump):
(pas_local_allocator_make_bump):
(pas_local_allocator_set_up_primordial_bump):
(pas_local_allocator_try_allocate_inline_cases):
* Source/bmalloc/libpas/src/libpas/pas_megapage_cache.h:
* Source/bmalloc/libpas/src/libpas/pas_page_base_config.h:
* Source/bmalloc/libpas/src/libpas/pas_page_config_size.h: Copied from Source/bmalloc/libpas/src/libpas/pas_enumerable_page_malloc.h.
(pas_page_config_size_get_string):
* Source/bmalloc/libpas/src/libpas/pas_page_malloc.c:
(pas_page_malloc_try_map_pages):
(pas_page_malloc_try_allocate_without_deallocating_padding):
* Source/bmalloc/libpas/src/libpas/pas_page_malloc.h:
* Source/bmalloc/libpas/src/libpas/pas_segregated_page_config_kind.h:
(pas_segregated_page_config_kind_is_small):
* Source/bmalloc/libpas/src/libpas/pas_small_medium_bootstrap_free_heap.c: Copied from Source/bmalloc/libpas/src/libpas/pas_bootstrap_free_heap.c.
(bootstrap_source_allocate_aligned):
(initialize_config):
* Source/bmalloc/libpas/src/libpas/pas_small_medium_bootstrap_free_heap.h: Copied from Source/bmalloc/libpas/src/libpas/pas_enumerable_page_malloc.h.
* Source/bmalloc/libpas/src/libpas/pas_small_medium_bootstrap_heap_page_provider.c: Copied from Source/bmalloc/libpas/src/libpas/pas_enumerable_page_malloc.c.
(pas_small_medium_bootstrap_heap_page_provider):
* Source/bmalloc/libpas/src/libpas/pas_small_medium_bootstrap_heap_page_provider.h: Copied from Source/bmalloc/libpas/src/libpas/pas_enumerable_page_malloc.h.
* Source/bmalloc/libpas/src/libpas/pas_try_allocate_intrinsic.h:
* Source/bmalloc/libpas/src/libpas/pas_utility_heap_config.h:

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



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list