From: Mark Probst Date: Fri, 21 Sep 2012 14:44:16 +0000 (+0200) Subject: [dtrace] Probes for taking/releasing the GC lock. X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=977c5600c5d86302917414682f7b0e6675ed03bc;hp=ed5b41fd8daa1ed623790f3817da5e8be20120e0;p=mono.git [dtrace] Probes for taking/releasing the GC lock. --- diff --git a/data/mono.d b/data/mono.d index 14591aa4838..a042a4a4fb3 100644 --- a/data/mono.d +++ b/data/mono.d @@ -21,6 +21,9 @@ provider mono { probe gc__heap__alloc (void *addr, uintptr_t len); probe gc__heap__free (void *addr, uintptr_t len); + + probe gc__locked (); + probe gc__unlocked (); }; #pragma D attributes Evolving/Evolving/Common provider mono provider diff --git a/mono/metadata/sgen-gc.c b/mono/metadata/sgen-gc.c index 3621386c5d1..66e90ebc683 100644 --- a/mono/metadata/sgen-gc.c +++ b/mono/metadata/sgen-gc.c @@ -3888,6 +3888,7 @@ sgen_thread_unregister (SgenThreadInfo *p) if (!sgen_park_current_thread_if_doing_handshake (p)) g_usleep (50); } + MONO_PROBE_GC_LOCKED (); #endif binary_protocol_thread_unregister ((gpointer)mono_thread_info_get_tid (p)); diff --git a/mono/metadata/sgen-gc.h b/mono/metadata/sgen-gc.h index 502ebdc4df1..76b1ed0d973 100644 --- a/mono/metadata/sgen-gc.h +++ b/mono/metadata/sgen-gc.h @@ -40,6 +40,7 @@ typedef struct _SgenThreadInfo SgenThreadInfo; #include #include #include +#include #include #include #include @@ -202,9 +203,15 @@ typedef struct _SgenPinnedChunk SgenPinnedChunk; /* if changing LOCK_INIT to something that isn't idempotent, look at its use in mono_gc_base_init in sgen-gc.c */ #define LOCK_INIT(name) mono_mutex_init (&(name), NULL) -#define LOCK_GC mono_mutex_lock (&gc_mutex) +#define LOCK_GC do { \ + mono_mutex_lock (&gc_mutex); \ + MONO_PROBE_GC_LOCKED (); \ + } while (0) #define TRYLOCK_GC (mono_mutex_trylock (&gc_mutex) == 0) -#define UNLOCK_GC mono_mutex_unlock (&gc_mutex) +#define UNLOCK_GC do { \ + mono_mutex_unlock (&gc_mutex); \ + MONO_PROBE_GC_UNLOCKED (); \ + } while (0) #define LOCK_INTERRUPTION mono_mutex_lock (&interruption_mutex) #define UNLOCK_INTERRUPTION mono_mutex_unlock (&interruption_mutex) diff --git a/mono/utils/dtrace.h b/mono/utils/dtrace.h index 69fe38b390f..17a0ebbc7de 100644 --- a/mono/utils/dtrace.h +++ b/mono/utils/dtrace.h @@ -46,6 +46,10 @@ #define MONO_PROBE_GC_END_ENABLED() MONO_GC_END_ENABLED () +#define MONO_PROBE_GC_LOCKED() MONO_GC_LOCKED () +#define MONO_PROBE_GC_UNLOCKED() MONO_GC_UNLOCKED () + + #define MONO_PROBE_GC_HEAP_ALLOC(addr,size) MONO_GC_HEAP_ALLOC ((addr), (size)) #define MONO_PROBE_GC_HEAP_FREE(addr,size) MONO_GC_HEAP_FREE ((addr), (size)) @@ -73,6 +77,13 @@ #define MONO_PROBE_GC_END_ENABLED() (0) +#define MONO_PROBE_GC_LOCKED() +#define MONO_PROBE_GC_LOCKED_ENABLED() (0) + +#define MONO_PROBE_GC_UNLOCKED() +#define MONO_PROBE_GC_UNLOCKED_ENABLED() (0) + + #define MONO_PROBE_GC_HEAP_ALLOC(addr,size) #define MONO_PROBE_GC_HEAP_FREE(addr,size)