Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Probst <mark.probst@gmail.com>2012-11-07 20:06:43 +0400
committerMark Probst <mark.probst@gmail.com>2012-12-09 18:02:47 +0400
commitbd5b216df955ac8f6ad7b465cbcb53fd4ef78e1c (patch)
tree14ac2b05836ba78775d2de81d8af04457fe5d467
parent76087cedea5ab405ac34179c6933af8ede48f2d3 (diff)
[sgen] DTrace probes for sweep begin/end and concurrent start/finish begin/end.
-rw-r--r--data/mono.d9
-rw-r--r--mono/metadata/sgen-gc.c15
-rw-r--r--mono/metadata/sgen-protocol.h3
3 files changed, 26 insertions, 1 deletions
diff --git a/data/mono.d b/data/mono.d
index 34daae60de3..76721151289 100644
--- a/data/mono.d
+++ b/data/mono.d
@@ -19,6 +19,15 @@ provider mono {
probe gc__begin (int generation);
probe gc__end (int generation);
+ probe gc__concurrent__start__begin (int generation);
+ probe gc__concurrent__start__end (int generation);
+ probe gc__concurrent__update__finish__begin (int generation);
+ probe gc__concurrent__update__end (int generation);
+ probe gc__concurrent__finish__end (int generation);
+
+ probe gc__sweep__begin (int generation);
+ probe gc__sweep__end (int generation);
+
probe gc__world__stop__begin ();
probe gc__world__stop__end ();
probe gc__world__restart__begin ();
diff --git a/mono/metadata/sgen-gc.c b/mono/metadata/sgen-gc.c
index 181311e9ba5..266b2e79ecc 100644
--- a/mono/metadata/sgen-gc.c
+++ b/mono/metadata/sgen-gc.c
@@ -2956,6 +2956,8 @@ major_finish_collection (const char *reason, int old_next_pin_slot, gboolean sca
reset_heap_boundaries ();
sgen_update_heap_boundaries ((mword)sgen_get_nursery_start (), (mword)sgen_get_nursery_end ());
+ MONO_GC_SWEEP_BEGIN (GENERATION_OLD);
+
/* sweep the big objects list */
prevbo = NULL;
for (bigobj = los_object_list; bigobj;) {
@@ -2989,6 +2991,8 @@ major_finish_collection (const char *reason, int old_next_pin_slot, gboolean sca
major_collector.sweep ();
+ MONO_GC_SWEEP_END (GENERATION_OLD);
+
TV_GETTIME (btv);
time_major_sweep += TV_ELAPSED (atv, btv);
@@ -3064,6 +3068,8 @@ static gboolean major_do_collection (const char *reason);
static void
major_start_concurrent_collection (const char *reason)
{
+ MONO_GC_CONCURRENT_START_BEGIN (GENERATION_OLD);
+
// FIXME: store reason and pass it when finishing
major_start_collection (NULL);
@@ -3072,16 +3078,22 @@ major_start_concurrent_collection (const char *reason)
sgen_workers_wait_for_jobs ();
+ MONO_GC_CONCURRENT_START_END (GENERATION_OLD);
+
current_collection_generation = -1;
}
static gboolean
major_update_or_finish_concurrent_collection (void)
{
+ MONO_GC_CONCURRENT_UPDATE_FINISH_BEGIN (GENERATION_OLD);
+
major_collector.update_cardtable_mod_union ();
sgen_los_update_cardtable_mod_union ();
if (!sgen_workers_all_done ()) {
+ MONO_GC_CONCURRENT_UPDATE_END (GENERATION_OLD);
+
g_print ("workers not done\n");
return FALSE;
}
@@ -3090,6 +3102,9 @@ major_update_or_finish_concurrent_collection (void)
current_collection_generation = GENERATION_OLD;
major_finish_collection ("finishing", -1, TRUE);
+
+ MONO_GC_CONCURRENT_FINISH_END (GENERATION_OLD);
+
current_collection_generation = -1;
if (whole_heap_check_before_collection)
diff --git a/mono/metadata/sgen-protocol.h b/mono/metadata/sgen-protocol.h
index 2f2420d2ad1..96355505da2 100644
--- a/mono/metadata/sgen-protocol.h
+++ b/mono/metadata/sgen-protocol.h
@@ -162,7 +162,8 @@ void binary_protocol_missing_remset (gpointer obj, gpointer obj_vtable, int offs
#define binary_protocol_is_enabled() FALSE
#define binary_protocol_flush_buffers(force)
-#define binary_protocol_collection(index, generation)
+#define binary_protocol_collection_begin(index, generation)
+#define binary_protocol_collection_end(index, generation)
#define binary_protocol_alloc(obj, vtable, size)
#define binary_protocol_alloc_pinned(obj, vtable, size)
#define binary_protocol_alloc_degraded(obj, vtable, size)