Protect/Unprotect regions (region space) only in debug build
During performance analysis it was observed that the
allocation-intensive workloads get negatively impacted by the region
protect/unprotect. Therefore, we enable this only on debug builds.
Some of the most affected benchmarks on Golem are as follows:
Benchmark | armv8 | armv7 | x64 | x32
------------------------------------------------------------------
BinaryTrees | 8% | 8% | 13% | 12%
MicroAllocThreeFinalThrice | 13% | 8% | 27% | 30%
MicroAllocThreeFinalTwice | 13% | 9% | 32% | 30%
MicroAllocThreeFinal | 13% | 8% | 33% | 30%
MicroAllocTwoFinal | 11% | 9% | 32% | 31%
MicroAllocOneFinal | 11% | 9% | 33% | 31%
MicroAllocBaseline | 12% | 9% | 33% | 34%
KotlinMicroTree | -0.4% | 0.7% | 8% | 9%
KotlinMicroMap | 6% | 3% | 0.7% | 1%
KotlinImgProc-CheckerboardMultiply | 5% | 0.5% | 0% |-0.5%
Splay | 5% | 4% | 2% | 3%
MicroLazyInitSingleThreadedSlow | 8% | -2% | 17% | 7%
MicroLazyInitImmutableSlow | 5% | -2% | 24% | 8%
Test: golem benchmarking
Bug:140130889
Change-Id: I6be646bcc069d59625112c1b9ab91bbbc5f9f627
diff --git a/runtime/gc/space/region_space.cc b/runtime/gc/space/region_space.cc
index 7939f0a..8339822 100644
--- a/runtime/gc/space/region_space.cc
+++ b/runtime/gc/space/region_space.cc
@@ -33,7 +33,7 @@
static constexpr uint kEvacuateLivePercentThreshold = 75U;
// Whether we protect the unused and cleared regions.
-static constexpr bool kProtectClearedRegions = true;
+static constexpr bool kProtectClearedRegions = kIsDebugBuild;
// Wether we poison memory areas occupied by dead objects in unevacuated regions.
static constexpr bool kPoisonDeadObjectsInUnevacuatedRegions = true;