
Summary: This change simplifies the XRay Allocator implementation to self-manage an mmap'ed memory segment instead of using the internal allocator implementation in sanitizer_common. We've found through benchmarks and profiling these benchmarks in D48879 that using the internal allocator in sanitizer_common introduces a bottleneck on allocating memory through a central spinlock. This change allows thread-local allocators to eliminate contention on the centralized allocator. To get the most benefit from this approach, we also use a managed allocator for the chunk elements used by the segmented array implementation. This gives us the chance to amortize the cost of allocating memory when creating these internal segmented array data structures. We also took the opportunity to remove the preallocation argument from the allocator API, simplifying the usage of the allocator throughout the profiling implementation. In this change we also tweak some of the flag values to reduce the amount of maximum memory we use/need for each thread, when requesting memory through mmap. Depends on D48956. Reviewers: kpw, eizan Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D49217 llvm-svn: 337342
30 lines
1.2 KiB
C++
30 lines
1.2 KiB
C++
//===-- xray_profiling_flags.inc --------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// XRay profiling runtime flags.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef XRAY_FLAG
|
|
#error "Define XRAY_FLAG prior to including this file!"
|
|
#endif
|
|
|
|
XRAY_FLAG(uptr, per_thread_allocator_max, 2 << 20,
|
|
"Maximum size of any single per-thread allocator.")
|
|
XRAY_FLAG(uptr, global_allocator_max, 2 << 24,
|
|
"Maximum size of the global allocator for profile storage.")
|
|
XRAY_FLAG(uptr, stack_allocator_max, 2 << 20,
|
|
"Maximum size of the traversal stack allocator.")
|
|
XRAY_FLAG(int, grace_period_ms, 1,
|
|
"Profile collection will wait this much time in milliseconds before "
|
|
"resetting the global state. This gives a chance to threads to "
|
|
"notice that the profiler has been finalized and clean up.")
|
|
XRAY_FLAG(bool, no_flush, false,
|
|
"Set to true if we want the profiling implementation to not write "
|
|
"out files.")
|