Skip to content

Commit a08d300

Browse files
authored
[mono][sgen] Update memory load information after world is resumed (#76400)
Following recent cgroup support (#74237), mono_determine_physical_ram_size is no longer safe to call during GC.
1 parent bce23ab commit a08d300

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

src/mono/mono/sgen/sgen-memory-governor.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,6 @@ update_gc_info (mword used_slots_size)
144144

145145
sgen_gc_info.heap_size_bytes = major_size + sgen_los_memory_usage_total;
146146
sgen_gc_info.fragmented_bytes = sgen_gc_info.heap_size_bytes - sgen_los_memory_usage - major_size_in_use;
147-
guint64 physical_ram_size = mono_determine_physical_ram_size ();
148-
sgen_gc_info.memory_load_bytes = physical_ram_size ? sgen_gc_info.total_available_memory_bytes - (guint64)(((double)sgen_gc_info.total_available_memory_bytes*mono_determine_physical_ram_available_size ())/physical_ram_size) : 0;
149147
sgen_gc_info.total_committed_bytes = major_size_in_use + sgen_los_memory_usage;
150148
sgen_gc_info.total_promoted_bytes = sgen_total_promoted_size - total_promoted_size_start;
151149
sgen_gc_info.total_major_size_bytes = major_size;
@@ -154,6 +152,14 @@ update_gc_info (mword used_slots_size)
154152
sgen_gc_info.total_los_size_in_use_bytes = sgen_los_memory_usage;
155153
}
156154

155+
static void
156+
update_gc_info_memory_load (void)
157+
{
158+
// We update this separately because it is not safe to do it during GC stw
159+
guint64 physical_ram_size = mono_determine_physical_ram_size ();
160+
sgen_gc_info.memory_load_bytes = physical_ram_size ? sgen_gc_info.total_available_memory_bytes - (guint64)(((double)sgen_gc_info.total_available_memory_bytes*mono_determine_physical_ram_available_size ())/physical_ram_size) : 0;
161+
}
162+
157163
gboolean
158164
sgen_need_major_collection (mword space_needed, gboolean *forced)
159165
{
@@ -387,6 +393,8 @@ sgen_memgov_collection_end (int generation, gint64 stw_time)
387393
sgen_pointer_queue_clear (&log_entries);
388394
mono_os_mutex_unlock (&log_entries_mutex);
389395
}
396+
397+
update_gc_info_memory_load ();
390398
}
391399

392400
/*

0 commit comments

Comments
 (0)