[webkit-changes] [WebKit/WebKit] 5d192f: [libpas] Support MallocStackLogging

Yusuke Suzuki noreply at github.com
Sun Oct 16 02:11:49 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 5d192fe3d632fdaec9371af3f54db375cd9afe95
      https://github.com/WebKit/WebKit/commit/5d192fe3d632fdaec9371af3f54db375cd9afe95
  Author: Yusuke Suzuki <ysuzuki at 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




More information about the webkit-changes mailing list