[compiler-rt] r224469 - [sanitizer] add CombinedAllocator::InitIfLinkerInitialized and use it in lsan: speeds up lsan start-up time by ~25%

Kostya Serebryany kcc at google.com
Thu Dec 18 18:45:09 PST 2014


On Thu, Dec 18, 2014 at 10:58 AM, Alexey Samsonov <vonosmas at gmail.com>
wrote:
>
> Do you plan to call InitIfLinkerInitialized() to another sanitizers that
> use linker-initialized allocator (e.g. ASan)?
>
for other sanitizers this is much less of a problem, but it clearly won't
hurt.

>> I find the name misleading. It implies that the function checks whether
we've been linker-initialized. Maybe InitAfterLinkerInitialized? Or simply
InitLinkerInitialized?

Err. Bike shedding. If you feel strongly, please rename to
InitLinkerInitialized



>
> On Wed, Dec 17, 2014 at 3:06 PM, Kostya Serebryany <kcc at google.com> wrote:
>>
>> Author: kcc
>> Date: Wed Dec 17 17:06:36 2014
>> New Revision: 224469
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=224469&view=rev
>> Log:
>> [sanitizer] add CombinedAllocator::InitIfLinkerInitialized and use it in
>> lsan: speeds up lsan start-up time by ~25%
>>
>> Modified:
>>     compiler-rt/trunk/lib/lsan/lsan_allocator.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.h
>>
>> Modified: compiler-rt/trunk/lib/lsan/lsan_allocator.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/lsan/lsan_allocator.cc?rev=224469&r1=224468&r2=224469&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/lsan/lsan_allocator.cc (original)
>> +++ compiler-rt/trunk/lib/lsan/lsan_allocator.cc Wed Dec 17 17:06:36 2014
>> @@ -47,7 +47,7 @@ static Allocator allocator;
>>  static THREADLOCAL AllocatorCache cache;
>>
>>  void InitializeAllocator() {
>> -  allocator.Init(common_flags()->allocator_may_return_null);
>> +
>> allocator.InitIfLinkerInitialized(common_flags()->allocator_may_return_null);
>>  }
>>
>>  void AllocatorThreadFinish() {
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.h?rev=224469&r1=224468&r2=224469&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.h
>> (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.h Wed Dec
>> 17 17:06:36 2014
>> @@ -211,6 +211,7 @@ class AllocatorStats {
>>    void Init() {
>>      internal_memset(this, 0, sizeof(*this));
>>    }
>> +  void InitIfLinkerInitialized() {}
>>
>>    void Add(AllocatorStat i, uptr v) {
>>      v += atomic_load(&stats_[i], memory_order_relaxed);
>> @@ -240,11 +241,14 @@ class AllocatorStats {
>>  // Global stats, used for aggregation and querying.
>>  class AllocatorGlobalStats : public AllocatorStats {
>>   public:
>> -  void Init() {
>> -    internal_memset(this, 0, sizeof(*this));
>> +  void InitIfLinkerInitialized() {
>>      next_ = this;
>>      prev_ = this;
>>    }
>> +  void Init() {
>> +    internal_memset(this, 0, sizeof(*this));
>> +    InitIfLinkerInitialized();
>> +  }
>>
>>    void Register(AllocatorStats *s) {
>>      SpinMutexLock l(&mu_);
>> @@ -1002,12 +1006,16 @@ struct SizeClassAllocatorLocalCache {
>>  template <class MapUnmapCallback = NoOpMapUnmapCallback>
>>  class LargeMmapAllocator {
>>   public:
>> -  void Init(bool may_return_null) {
>> -    internal_memset(this, 0, sizeof(*this));
>> +  void InitIfLinkerInitialized(bool may_return_null) {
>>      page_size_ = GetPageSizeCached();
>>      atomic_store(&may_return_null_, may_return_null,
>> memory_order_relaxed);
>>    }
>>
>> +  void Init(bool may_return_null) {
>> +    internal_memset(this, 0, sizeof(*this));
>> +    InitIfLinkerInitialized(may_return_null);
>> +  }
>> +
>>    void *Allocate(AllocatorStats *stat, uptr size, uptr alignment) {
>>      CHECK(IsPowerOfTwo(alignment));
>>      uptr map_size = RoundUpMapSize(size);
>> @@ -1253,11 +1261,21 @@ template <class PrimaryAllocator, class
>>            class SecondaryAllocator>  // NOLINT
>>  class CombinedAllocator {
>>   public:
>> -  void Init(bool may_return_null) {
>> +  void InitCommon(bool may_return_null) {
>>      primary_.Init();
>> +    atomic_store(&may_return_null_, may_return_null,
>> memory_order_relaxed);
>> +  }
>> +
>> +  void InitIfLinkerInitialized(bool may_return_null) {
>> +    secondary_.InitIfLinkerInitialized(may_return_null);
>> +    stats_.InitIfLinkerInitialized();
>> +    InitCommon(may_return_null);
>> +  }
>> +
>> +  void Init(bool may_return_null) {
>>      secondary_.Init(may_return_null);
>>      stats_.Init();
>> -    atomic_store(&may_return_null_, may_return_null,
>> memory_order_relaxed);
>> +    InitCommon(may_return_null);
>>    }
>>
>>    void *Allocate(AllocatorCache *cache, uptr size, uptr alignment,
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
> --
> Alexey Samsonov
> vonosmas at gmail.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141218/30d11a86/attachment.html>


More information about the llvm-commits mailing list