summaryrefslogtreecommitdiff
path: root/src/gc/gc.cpp
diff options
context:
space:
mode:
authorAndy Hanson <anhans@microsoft.com>2019-05-01 16:36:57 -0700
committerGitHub <noreply@github.com>2019-05-01 16:36:57 -0700
commit5a34da317e3f8cef7895d6d4ad6ed75f3a79d38e (patch)
tree6aa5250c1f7ffeb69290ca1e2b57b81dd3b78b25 /src/gc/gc.cpp
parent4d820df4437139275b7c05330dd98631db708802 (diff)
downloadcoreclr-5a34da317e3f8cef7895d6d4ad6ed75f3a79d38e.tar.gz
coreclr-5a34da317e3f8cef7895d6d4ad6ed75f3a79d38e.tar.bz2
coreclr-5a34da317e3f8cef7895d6d4ad6ed75f3a79d38e.zip
When large pages are enabled, only reserve/commit 1x seg size for LOH (#24320)
When large pages are enabled, we must commit everything we reserve. Previously we reserved 2x the segment size for LOH. This is a problem with large pages where we must commit everything we reserve. Thanks to https://github.com/dotnet/coreclr/pull/24081 this does not cause performance regression with large pages; but without large pages we were seeing regressions when the loh_seg_size was reduced. So this change will only take effect when large pages are enabled.
Diffstat (limited to 'src/gc/gc.cpp')
-rw-r--r--src/gc/gc.cpp8
1 files changed, 3 insertions, 5 deletions
diff --git a/src/gc/gc.cpp b/src/gc/gc.cpp
index 63df5513f6..42e93fefc4 100644
--- a/src/gc/gc.cpp
+++ b/src/gc/gc.cpp
@@ -2819,7 +2819,7 @@ GCSpinLock gc_heap::gc_lock;
size_t gc_heap::eph_gen_starts_size = 0;
heap_segment* gc_heap::segment_standby_list;
-size_t gc_heap::use_large_pages_p = 0;
+bool gc_heap::use_large_pages_p = 0;
size_t gc_heap::last_gc_index = 0;
#ifdef SEG_MAPPING_TABLE
size_t gc_heap::min_segment_size = 0;
@@ -10014,12 +10014,9 @@ HRESULT gc_heap::initialize_gc (size_t segment_size,
block_count = 1;
#endif //MULTIPLE_HEAPS
- use_large_pages_p = false;
-
if (heap_hard_limit)
{
check_commit_cs.Initialize();
- use_large_pages_p = GCConfig::GetGCLargePages();
}
if (!reserve_initial_memory(segment_size,heap_size,block_count,use_large_pages_p))
@@ -34197,7 +34194,8 @@ HRESULT GCHeap::Initialize()
{
seg_size = gc_heap::get_segment_size_hard_limit (&nhp, (nhp_from_config == 0));
gc_heap::soh_segment_size = seg_size;
- large_seg_size = seg_size * 2;
+ gc_heap::use_large_pages_p = GCConfig::GetGCLargePages();
+ large_seg_size = gc_heap::use_large_pages_p ? seg_size : seg_size * 2;
}
else
{