Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 5d192fe3d632fdaec9371af3f54db375cd9afe95
      
https://github.com/WebKit/WebKit/commit/5d192fe3d632fdaec9371af3f54db375cd9afe95
  Author: Yusuke Suzuki <ysuz...@apple.com>
  Date:   2022-10-16 (Sun, 16 Oct 2022)

  Changed paths:
    M Source/bmalloc/CMakeLists.txt
    M Source/bmalloc/bmalloc.xcodeproj/project.pbxproj
    M Source/bmalloc/bmalloc/Environment.cpp
    M Source/bmalloc/libpas/src/libpas/pas_darwin_spi.h
    M Source/bmalloc/libpas/src/libpas/pas_deallocate.c
    M Source/bmalloc/libpas/src/libpas/pas_deallocate.h
    M Source/bmalloc/libpas/src/libpas/pas_local_allocator_inlines.h
    A Source/bmalloc/libpas/src/libpas/pas_malloc_stack_logging.c
    A Source/bmalloc/libpas/src/libpas/pas_malloc_stack_logging.h
    M Source/bmalloc/libpas/src/libpas/pas_thread_local_cache.h
    M Source/bmalloc/libpas/src/libpas/pas_try_allocate_common.h
    M Source/bmalloc/libpas/src/libpas/pas_try_reallocate.h

  Log Message:
  -----------
  [libpas] Support MallocStackLogging
https://bugs.webkit.org/show_bug.cgi?id=246581
rdar://101210195

Reviewed by Darin Adler.

This patch adds MallocStackLogging (MSL) support to libpas. After this change, 
bmalloc will not fallback to system malloc with
MallocStackLogging environment variable (Malloc environment variable etc. 
fallbacks), and enable libpas MSL.
The limitation is that libpas is not supporting on-demand enablement of MSL. If 
we would like to collect data,
MallocStackLogging environment variable needs to be set (or use system malloc 
as before, right now).

libmalloc is invoking malloc_logger hook function on allocations and 
deallocations. The other framework implements MSL's actual
stacktrace capturing and it configures malloc_logger hook function, and this is 
how MSL is implemented in libmalloc. We do the
same thing in libpas: calling malloc_logger hook function on allocations and 
deallocations.

The challenge is that how to avoid adding these code into the hottest fast path 
in libpas: libpas allocation path is super tightly
optimized and any additional load etc. regress performance severely. We took 
similar approach to our system malloc enablement in
libpas: when libpas found MallocStackLogging, it disables thread-local-cache 
completely. This enforces all allocations and deallocations
go to the slow path. Then, we inserted this hook in the slow path so that we 
insert this logging without performance penalty when
MSL is not enabled.

We ensured that MSL works and no performance penalty is observed from A/B tests.

* Source/bmalloc/CMakeLists.txt:
* Source/bmalloc/bmalloc.xcodeproj/project.pbxproj:
* Source/bmalloc/bmalloc/Environment.cpp:
(bmalloc::isMallocEnvironmentVariableImplyingSystemMallocSet):
* Source/bmalloc/libpas/src/libpas/pas_darwin_spi.h:
* Source/bmalloc/libpas/src/libpas/pas_deallocate.c:
(pas_try_deallocate_slow_no_cache):
* Source/bmalloc/libpas/src/libpas/pas_deallocate.h:
(pas_try_deallocate_not_small_exclusive_segregated):
* Source/bmalloc/libpas/src/libpas/pas_local_allocator_inlines.h:
* Source/bmalloc/libpas/src/libpas/pas_malloc_stack_logging.c: Copied from 
Source/bmalloc/libpas/src/libpas/pas_darwin_spi.h.
(compute_msl_status):
(pas_compute_msl_is_enabled):
(pas_msl_malloc_logging_slow):
(pas_msl_free_logging_slow):
* Source/bmalloc/libpas/src/libpas/pas_malloc_stack_logging.h: Added.
(pas_msl_is_enabled):
(pas_msl_malloc_logging):
(pas_msl_free_logging):
* Source/bmalloc/libpas/src/libpas/pas_thread_local_cache.h:
(pas_thread_local_cache_can_set):
* Source/bmalloc/libpas/src/libpas/pas_try_allocate_common.h:
(pas_try_allocate_common_impl_slow):
* Source/bmalloc/libpas/src/libpas/pas_try_reallocate.h:
(pas_try_reallocate_table_bitfit_case):
(pas_try_reallocate):

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


_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to