From 936d70b46274f033c3dec6234d130843677ab8f9 Mon Sep 17 00:00:00 2001 From: Mark Probst Date: Sat, 22 Sep 2012 16:32:48 +0200 Subject: [PATCH] [dtrace] Pass namespace and class name to probes where appropriate. --- data/mono.d | 12 ++++++------ mono/metadata/sgen-alloc.c | 19 ++++++++++--------- mono/metadata/sgen-gc.c | 9 ++++++--- mono/metadata/sgen-marksweep.c | 3 ++- mono/utils/dtrace.h | 16 ++++++++++------ 5 files changed, 34 insertions(+), 25 deletions(-) diff --git a/data/mono.d b/data/mono.d index 3542f6367f3..fdc40124192 100644 --- a/data/mono.d +++ b/data/mono.d @@ -26,17 +26,17 @@ provider mono { probe gc__unlocked (); probe gc__nursery__tlab__alloc (void *addr, uintptr_t len); - probe gc__nursery__obj__alloc (void *addr, uintptr_t size, char *class_name); + probe gc__nursery__obj__alloc (void *addr, uintptr_t size, char *ns_name, char *class_name); - probe gc__major__obj__alloc__large (void *addr, uintptr_t size, char *class_name); - probe gc__major__obj__alloc__pinned (void *addr, uintptr_t size, char *class_name); - probe gc__major__obj__alloc__degraded (void *addr, uintptr_t size, char *class_name); - probe gc__major__obj__alloc__mature (void *addr, uintptr_t size, char *class_name); + probe gc__major__obj__alloc__large (void *addr, uintptr_t size, char *ns_name, char *class_name); + probe gc__major__obj__alloc__pinned (void *addr, uintptr_t size, char *ns_name, char *class_name); + probe gc__major__obj__alloc__degraded (void *addr, uintptr_t size, char *ns_name, char *class_name); + probe gc__major__obj__alloc__mature (void *addr, uintptr_t size, char *ns_name, char *class_name); probe gc__nursery__sweeped (void *addr, uintptr_t len); probe gc__major__sweeped (void *addr, uintptr_t len); - probe gc__obj__pinned (void *addr, uintptr_t size, char *class_name, int generation); + probe gc__obj__pinned (void *addr, uintptr_t size, char *ns_name, char *class_name, int generation); }; #pragma D attributes Evolving/Evolving/Common provider mono provider diff --git a/mono/metadata/sgen-alloc.c b/mono/metadata/sgen-alloc.c index 9ba03100c3b..0f70797931c 100644 --- a/mono/metadata/sgen-alloc.c +++ b/mono/metadata/sgen-alloc.c @@ -136,10 +136,10 @@ alloc_degraded (MonoVTable *vtable, size_t size, gboolean for_mature) p = major_collector.alloc_degraded (vtable, size); if (for_mature) { - MONO_GC_MAJOR_OBJ_ALLOC_MATURE (p, size, NULL); + MONO_GC_MAJOR_OBJ_ALLOC_MATURE (p, size, vtable->klass->name_space, vtable->klass->name); } else { binary_protocol_alloc_degraded (p, vtable, size); - MONO_GC_MAJOR_OBJ_ALLOC_DEGRADED (p, size, NULL); + MONO_GC_MAJOR_OBJ_ALLOC_DEGRADED (p, size, vtable->klass->name_space, vtable->klass->name); } return p; @@ -220,7 +220,8 @@ mono_gc_alloc_obj_nolock (MonoVTable *vtable, size_t size) DEBUG (6, fprintf (gc_debug_file, "Allocated object %p, vtable: %p (%s), size: %zd\n", p, vtable, vtable->klass->name, size)); binary_protocol_alloc (p , vtable, size); - MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL); + if (MONO_GC_NURSERY_OBJ_ALLOC_ENABLED ()) + MONO_GC_NURSERY_OBJ_ALLOC (p, size, vtable->klass->name_space, vtable->klass->name); g_assert (*p == NULL); mono_atomic_store_seq (p, vtable); @@ -328,9 +329,9 @@ mono_gc_alloc_obj_nolock (MonoVTable *vtable, size_t size) binary_protocol_alloc (p, vtable, size); if (MONO_GC_MAJOR_OBJ_ALLOC_LARGE_ENABLED () || MONO_GC_NURSERY_OBJ_ALLOC_ENABLED ()) { if (size > SGEN_MAX_SMALL_OBJ_SIZE) - MONO_GC_MAJOR_OBJ_ALLOC_LARGE (p, size, NULL); + MONO_GC_MAJOR_OBJ_ALLOC_LARGE (p, size, vtable->klass->name_space, vtable->klass->name); else - MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL); + MONO_GC_NURSERY_OBJ_ALLOC (p, size, vtable->klass->name_space, vtable->klass->name); } mono_atomic_store_seq (p, vtable); } @@ -356,7 +357,6 @@ mono_gc_try_alloc_obj_nolock (MonoVTable *vtable, size_t size) p = sgen_nursery_alloc (size); if (!p) return NULL; - MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL); sgen_set_nursery_scan_start ((char*)p); /*FIXME we should use weak memory ops here. Should help specially on x86. */ @@ -389,7 +389,6 @@ mono_gc_try_alloc_obj_nolock (MonoVTable *vtable, size_t size) p = sgen_nursery_alloc (size); if (!p) return NULL; - MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL); if (nursery_clear_policy == CLEAR_AT_TLAB_CREATION) memset (p, 0, size); @@ -420,6 +419,8 @@ mono_gc_try_alloc_obj_nolock (MonoVTable *vtable, size_t size) DEBUG (6, fprintf (gc_debug_file, "Allocated object %p, vtable: %p (%s), size: %zd\n", p, vtable, vtable->klass->name, size)); binary_protocol_alloc (p, vtable, size); + if (MONO_GC_NURSERY_OBJ_ALLOC_ENABLED ()) + MONO_GC_NURSERY_OBJ_ALLOC (p, size, vtable->klass->name_space, vtable->klass->name); g_assert (*p == NULL); /* FIXME disable this in non debug builds */ mono_atomic_store_seq (p, vtable); @@ -574,9 +575,9 @@ mono_gc_alloc_pinned_obj (MonoVTable *vtable, size_t size) if (G_LIKELY (p)) { DEBUG (6, fprintf (gc_debug_file, "Allocated pinned object %p, vtable: %p (%s), size: %zd\n", p, vtable, vtable->klass->name, size)); if (size > SGEN_MAX_SMALL_OBJ_SIZE) - MONO_GC_MAJOR_OBJ_ALLOC_LARGE (p, size, NULL); + MONO_GC_MAJOR_OBJ_ALLOC_LARGE (p, size, vtable->klass->name_space, vtable->klass->name); else - MONO_GC_MAJOR_OBJ_ALLOC_PINNED (p, size, NULL); + MONO_GC_MAJOR_OBJ_ALLOC_PINNED (p, size, vtable->klass->name_space, vtable->klass->name); binary_protocol_alloc_pinned (p, vtable, size); mono_atomic_store_seq (p, vtable); } diff --git a/mono/metadata/sgen-gc.c b/mono/metadata/sgen-gc.c index de331419146..0fa833603e5 100644 --- a/mono/metadata/sgen-gc.c +++ b/mono/metadata/sgen-gc.c @@ -1247,7 +1247,8 @@ pin_objects_from_addresses (GCMemSection *section, void **start, void **end, voi binary_protocol_pin (search_start, (gpointer)LOAD_VTABLE (search_start), safe_object_get_size (search_start)); if (MONO_GC_OBJ_PINNED_ENABLED ()) { int gen = sgen_ptr_in_nursery (search_start) ? GENERATION_NURSERY : GENERATION_OLD; - MONO_GC_OBJ_PINNED (search_start, sgen_safe_object_get_size (search_start), NULL, gen); + MonoVTable *vt = (MonoVTable*)LOAD_VTABLE (search_start); + MONO_GC_OBJ_PINNED (search_start, sgen_safe_object_get_size (search_start), vt->klass->name_space, vt->klass->name, gen); } pin_object (search_start); GRAY_OBJECT_ENQUEUE (queue, search_start); @@ -1316,7 +1317,8 @@ sgen_pin_object (void *object, GrayQueue *queue) binary_protocol_pin (object, (gpointer)LOAD_VTABLE (object), safe_object_get_size (object)); if (MONO_GC_OBJ_PINNED_ENABLED ()) { int gen = sgen_ptr_in_nursery (object) ? GENERATION_NURSERY : GENERATION_OLD; - MONO_GC_OBJ_PINNED (object, sgen_safe_object_get_size (object), NULL, gen); + MonoVTable *vt = (MonoVTable*)LOAD_VTABLE (object); + MONO_GC_OBJ_PINNED (object, sgen_safe_object_get_size (object), vt->klass->name_space, vt->klass->name, gen); } } @@ -2698,7 +2700,8 @@ major_do_collection (const char *reason) if (sgen_find_optimized_pin_queue_area (bigobj->data, (char*)bigobj->data + bigobj->size, &dummy)) { binary_protocol_pin (bigobj->data, (gpointer)LOAD_VTABLE (bigobj->data), safe_object_get_size (bigobj->data)); if (MONO_GC_OBJ_PINNED_ENABLED ()) { - MONO_GC_OBJ_PINNED (bigobj->data, sgen_safe_object_get_size ((MonoObject*)bigobj->data), NULL, GENERATION_OLD); + MonoVTable *vt = (MonoVTable*)LOAD_VTABLE (bigobj->data); + MONO_GC_OBJ_PINNED (bigobj->data, sgen_safe_object_get_size ((MonoObject*)bigobj->data), vt->klass->name_space, vt->klass->name, GENERATION_OLD); } pin_object (bigobj->data); /* FIXME: only enqueue if object has references */ diff --git a/mono/metadata/sgen-marksweep.c b/mono/metadata/sgen-marksweep.c index 72cd5c5b4a3..c1da5eb3e4a 100644 --- a/mono/metadata/sgen-marksweep.c +++ b/mono/metadata/sgen-marksweep.c @@ -1371,7 +1371,8 @@ major_copy_or_mark_object (void **ptr, SgenGrayQueue *queue) return; binary_protocol_pin (obj, (gpointer)SGEN_LOAD_VTABLE (obj), sgen_safe_object_get_size ((MonoObject*)obj)); if (MONO_GC_OBJ_PINNED_ENABLED ()) { - MONO_GC_OBJ_PINNED (obj, sgen_safe_object_get_size (obj), NULL, GENERATION_OLD); + MonoVTable *vt = (MonoVTable*)SGEN_LOAD_VTABLE (obj); + MONO_GC_OBJ_PINNED (obj, sgen_safe_object_get_size (obj), vt->klass->name_space, vt->klass->name, GENERATION_OLD); } SGEN_PIN_OBJECT (obj); /* FIXME: only enqueue if object has references */ diff --git a/mono/utils/dtrace.h b/mono/utils/dtrace.h index 55c7e70adf7..7567b735a1f 100644 --- a/mono/utils/dtrace.h +++ b/mono/utils/dtrace.h @@ -65,23 +65,27 @@ #define MONO_GC_NURSERY_TLAB_ALLOC(addr,len) #define MONO_GC_NURSERY_TLAB_ALLOC_ENABLED() (0) -#define MONO_GC_NURSERY_OBJ_ALLOC(addr,size,class_name) +#define MONO_GC_NURSERY_OBJ_ALLOC(addr,size,ns_name,class_name) #define MONO_GC_NURSERY_OBJ_ALLOC_ENABLED() (0) -#define MONO_GC_MAJOR_OBJ_ALLOC_LARGE(addr,size,class_name) +#define MONO_GC_MAJOR_OBJ_ALLOC_LARGE(addr,size,ns_name,class_name) #define MONO_GC_MAJOR_OBJ_ALLOC_LARGE_ENABLED() (0) -#define MONO_GC_MAJOR_OBJ_ALLOC_PINNED(addr,size,class_name) +#define MONO_GC_MAJOR_OBJ_ALLOC_PINNED(addr,size,ns_name,class_name) #define MONO_GC_MAJOR_OBJ_ALLOC_PINNED_ENABLED() (0) -#define MONO_GC_MAJOR_OBJ_ALLOC_DEGRADED(addr,size,class_name) +#define MONO_GC_MAJOR_OBJ_ALLOC_DEGRADED(addr,size,ns_name,class_name) #define MONO_GC_MAJOR_OBJ_ALLOC_DEGRADED_ENABLED() (0) -#define MONO_GC_MAJOR_OBJ_ALLOC_MATURE(addr,size,class_name) +#define MONO_GC_MAJOR_OBJ_ALLOC_MATURE(addr,size,ns_name,class_name) #define MONO_GC_MAJOR_OBJ_ALLOC_MATURE_ENABLED() (0) +#define MONO_GC_OBJ_MOVED(dest,src,dest_gen,src_gen,size,ns_name,class_name) +#define MONO_GC_OBJ_MOVED_ENABLED() (0) + + #define MONO_GC_NURSERY_SWEEPED(addr,len) #define MONO_GC_NURSERY_SWEEPED_ENABLED() (0) @@ -89,7 +93,7 @@ #define MONO_GC_MAJOR_SWEEPED_ENABLED() (0) -#define MONO_GC_OBJ_PINNED(addr,size,class_name,generation) +#define MONO_GC_OBJ_PINNED(addr,size,ns_name,class_name,generation) #define MONO_GC_OBJ_PINNED_ENABLED() (0) #endif -- 2.25.1