OSDN Git Service

[scudo][standalone] Change default Android config
authorKostya Kortchinsky <kostyak@google.com>
Thu, 30 Jan 2020 23:26:46 +0000 (15:26 -0800)
committerKostya Kortchinsky <kostyak@google.com>
Fri, 31 Jan 2020 22:46:35 +0000 (14:46 -0800)
Summary:
This changes a couple of parameters in the default Android config to
address some performance and memory footprint issues (well to be closer
to the default Bionic allocator numbers).

Subscribers: #sanitizers, llvm-commits

Tags: #sanitizers, #llvm

Differential Revision: https://reviews.llvm.org/D73750

compiler-rt/lib/scudo/standalone/allocator_config.h
compiler-rt/lib/scudo/standalone/primary64.h
compiler-rt/lib/scudo/standalone/size_class_map.h

index 890c9f0..3d33850 100644 (file)
@@ -39,15 +39,16 @@ struct DefaultConfig {
 struct AndroidConfig {
   using SizeClassMap = AndroidSizeClassMap;
 #if SCUDO_CAN_USE_PRIMARY64
-  // 128MB regions
-  typedef SizeClassAllocator64<SizeClassMap, 27U,
+  // 256MB regions
+  typedef SizeClassAllocator64<SizeClassMap, 28U,
                                /*MaySupportMemoryTagging=*/true>
       Primary;
 #else
-  // 512KB regions
-  typedef SizeClassAllocator32<SizeClassMap, 19U> Primary;
+  // 256KB regions
+  typedef SizeClassAllocator32<SizeClassMap, 18U> Primary;
 #endif
-  typedef MapAllocator<MapAllocatorCache<>> Secondary;
+  // Cache blocks up to 2MB
+  typedef MapAllocator<MapAllocatorCache<32U, 2UL << 20>> Secondary;
   template <class A>
   using TSDRegistryT = TSDRegistrySharedT<A, 2U>; // Shared, max 2 TSDs.
 };
index 02e8051..9d8dcac 100644 (file)
@@ -207,7 +207,7 @@ private:
   static const uptr PrimarySize = RegionSize * NumClasses;
 
   // Call map for user memory with at least this size.
-  static const uptr MapSizeIncrement = 1UL << 17;
+  static const uptr MapSizeIncrement = 1UL << 18;
   // Fill at most this number of batches from the newly map'd memory.
   static const u32 MaxNumBatches = 8U;
 
index 947526e..f16fed7 100644 (file)
@@ -141,10 +141,10 @@ typedef SizeClassMap<3, 5, 8, 17, 8, 10> DefaultSizeClassMap;
 // TODO(kostyak): further tune class maps for Android & Fuchsia.
 #if SCUDO_WORDSIZE == 64U
 typedef SizeClassMap<4, 4, 8, 14, 4, 10> SvelteSizeClassMap;
-typedef SizeClassMap<3, 5, 8, 17, 14, 14> AndroidSizeClassMap;
+typedef SizeClassMap<2, 5, 9, 16, 14, 14> AndroidSizeClassMap;
 #else
 typedef SizeClassMap<4, 3, 7, 14, 5, 10> SvelteSizeClassMap;
-typedef SizeClassMap<3, 5, 8, 17, 14, 14> AndroidSizeClassMap;
+typedef SizeClassMap<2, 5, 9, 16, 14, 14> AndroidSizeClassMap;
 #endif
 
 } // namespace scudo