Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 5d192fe3d632fdaec9371af3f54db375cd9afe95
https://github.com/WebKit/WebKit/commit/5d192fe3d632fdaec9371af3f54db375cd9afe95
Author: Yusuke Suzuki <[email protected]>
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
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes