[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