[dtrace] Probe for nursery fragment creation aka nursery sweep.
authorMark Probst <mark.probst@gmail.com>
Sat, 22 Sep 2012 10:53:41 +0000 (12:53 +0200)
committerMark Probst <mark.probst@gmail.com>
Fri, 28 Sep 2012 21:18:17 +0000 (23:18 +0200)
data/mono.d
mono/metadata/sgen-nursery-allocator.c

index efd3a6cb0552a00102957dd8c9bc6a04af3e2ecb..8479088c7329470844f26855e34a4b46c41ef5e8 100644 (file)
@@ -30,6 +30,8 @@ provider mono {
 
        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__nursery__sweeped (void *addr, uintptr_t len);
 };
 
 #pragma D attributes Evolving/Evolving/Common provider mono provider
index c681a1f5a02c4ea52c59db97396caceb96e94dd6..fef74c4826aadd8450bd0e2a683480964c2fe7f6 100644 (file)
@@ -712,6 +712,7 @@ add_nursery_frag (SgenFragmentAllocator *allocator, size_t frag_size, char* frag
 {
        DEBUG (4, fprintf (gc_debug_file, "Found empty fragment: %p-%p, size: %zd\n", frag_start, frag_end, frag_size));
        binary_protocol_empty (frag_start, frag_size);
+       MONO_GC_NURSERY_SWEEPED (frag_start, frag_end - frag_start);
        /* Not worth dealing with smaller fragments: need to tune */
        if (frag_size >= SGEN_MAX_NURSERY_WASTE) {
                /* memsetting just the first chunk start is bound to provide better cache locality */