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