diff options
author | Mark Probst <mark.probst@gmail.com> | 2012-09-22 17:48:58 +0400 |
---|---|---|
committer | Mark Probst <mark.probst@gmail.com> | 2012-09-29 01:18:18 +0400 |
commit | 072a3cd5439bb5313f9e46a181a33c1649cfb90f (patch) | |
tree | ad7d261730f966dfa42bfdde3074610a2308cf93 | |
parent | 20bdda233df9fea3775fac09ddfd4f04648c9885 (diff) |
[dtrace] Probes for large and pinned allocation.
-rw-r--r-- | data/mono.d | 2 | ||||
-rw-r--r-- | mono/metadata/sgen-alloc.c | 15 |
2 files changed, 13 insertions, 4 deletions
diff --git a/data/mono.d b/data/mono.d index be871db851c..3542f6367f3 100644 --- a/data/mono.d +++ b/data/mono.d @@ -28,6 +28,8 @@ provider mono { 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__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); diff --git a/mono/metadata/sgen-alloc.c b/mono/metadata/sgen-alloc.c index 4871f23e3b8..9ba03100c3b 100644 --- a/mono/metadata/sgen-alloc.c +++ b/mono/metadata/sgen-alloc.c @@ -220,6 +220,7 @@ 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); g_assert (*p == NULL); mono_atomic_store_seq (p, vtable); @@ -270,8 +271,6 @@ 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); @@ -308,8 +307,6 @@ 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; @@ -329,6 +326,12 @@ mono_gc_alloc_obj_nolock (MonoVTable *vtable, size_t size) if (G_LIKELY (p)) { 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_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); + else + MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL); + } mono_atomic_store_seq (p, vtable); } @@ -570,6 +573,10 @@ 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); + else + MONO_GC_MAJOR_OBJ_ALLOC_PINNED (p, size, NULL); binary_protocol_alloc_pinned (p, vtable, size); mono_atomic_store_seq (p, vtable); } |