[dtrace] Allocation of TLABs. Allocation of objects directly from nursery.
authorMark Probst <mark.probst@gmail.com>
Fri, 21 Sep 2012 17:26:09 +0000 (19:26 +0200)
committerMark Probst <mark.probst@gmail.com>
Fri, 28 Sep 2012 21:18:17 +0000 (23:18 +0200)
data/mono.d
mono/metadata/sgen-alloc.c
mono/utils/dtrace.h

index a042a4a4fb3489a6aea3ef622390d9ee95e66c9a..e18d4eb12e9ab6364020d8cf4e09974f1ac0810a 100644 (file)
@@ -24,6 +24,9 @@ provider mono {
 
        probe gc__locked ();
        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);
 };
 
 #pragma D attributes Evolving/Evolving/Common provider mono provider
index 86095e5d0427fdb2da4b9b22d8f8835c86c747c6..eec749e7c8bc7770419b9989edb87107929464d8 100644 (file)
@@ -265,6 +265,8 @@ mono_gc_alloc_obj_nolock (MonoVTable *vtable, size_t size)
                                        // no space left
                                        g_assert (0);
                                }
+                               if (p)
+                                       MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL);
 
                                if (nursery_clear_policy == CLEAR_AT_TLAB_CREATION) {
                                        memset (p, 0, size);
@@ -304,6 +306,8 @@ mono_gc_alloc_obj_nolock (MonoVTable *vtable, size_t size)
                                        memset (TLAB_START, 0, alloc_size);
                                }
 
+                               MONO_GC_NURSERY_TLAB_ALLOC (p, alloc_size);
+
                                /* Allocate from the TLAB */
                                p = (void*)TLAB_NEXT;
                                TLAB_NEXT += size;
@@ -347,6 +351,7 @@ 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. */
@@ -379,6 +384,7 @@ 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);                    
@@ -399,6 +405,8 @@ mono_gc_try_alloc_obj_nolock (MonoVTable *vtable, size_t size)
 
                        if (nursery_clear_policy == CLEAR_AT_TLAB_CREATION)
                                memset (new_next, 0, alloc_size);
+
+                       MONO_GC_NURSERY_TLAB_ALLOC (new_next, alloc_size);
                }
        }
 
index e2a543725bf35b60a6d3d6e8e18b92b43bbd0d85..55c7e70adf719584ff9a8d8466ac6336c108af55 100644 (file)
 #define MONO_GC_HEAP_ALLOC(addr,size)
 #define MONO_GC_HEAP_FREE(addr,size)
 
+
+#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_ENABLED()    (0)
+
+
+#define MONO_GC_MAJOR_OBJ_ALLOC_LARGE(addr,size,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_ENABLED()       (0)
+
+#define MONO_GC_MAJOR_OBJ_ALLOC_DEGRADED(addr,size,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_ENABLED()       (0)
+
+
+#define MONO_GC_NURSERY_SWEEPED(addr,len)
+#define MONO_GC_NURSERY_SWEEPED_ENABLED()      (0)
+
+#define MONO_GC_MAJOR_SWEEPED(addr,len)
+#define MONO_GC_MAJOR_SWEEPED_ENABLED()        (0)
+
+
+#define MONO_GC_OBJ_PINNED(addr,size,class_name,generation)
+#define MONO_GC_OBJ_PINNED_ENABLED()   (0)
+
 #endif
 
 #endif