[pypy-commit] pypy stmgc-static-barrier: import stmgc/7b20231c8672

arigo noreply at buildbot.pypy.org
Thu Aug 22 20:01:01 CEST 2013


Author: Armin Rigo <arigo at tunes.org>
Branch: stmgc-static-barrier
Changeset: r66292:30e2390132a9
Date: 2013-08-22 20:00 +0200
http://bitbucket.org/pypy/pypy/changeset/30e2390132a9/

Log:	import stmgc/7b20231c8672

diff --git a/rpython/translator/stm/src_stm/fprintcolor.c b/rpython/translator/stm/src_stm/fprintcolor.c
--- a/rpython/translator/stm/src_stm/fprintcolor.c
+++ b/rpython/translator/stm/src_stm/fprintcolor.c
@@ -58,3 +58,25 @@
 }
 
 #endif
+
+
+#ifdef STM_BARRIER_COUNT
+long stm_barriercount[STM_BARRIER_NUMBERS];
+
+void stm_print_barrier_count(void)
+{
+    static char names[] = STM_BARRIER_NAMES;
+    char *p = names;
+    char *q;
+    int i;
+    dprintf(("** Summary of the barrier calls **\n"));
+    for (i = 0; i < STM_BARRIER_NUMBERS; i += 2) {
+        q = strchr(p, '\n');
+        *q = '\0';
+        dprintf(("%12ld  %s\n", stm_barriercount[i], p));
+        *q = '\n';
+        dprintf(("%12ld  \\ fast path\n", stm_barriercount[i + 1]));
+        p = q + 1;
+    }
+}
+#endif
diff --git a/rpython/translator/stm/src_stm/fprintcolor.h b/rpython/translator/stm/src_stm/fprintcolor.h
--- a/rpython/translator/stm/src_stm/fprintcolor.h
+++ b/rpython/translator/stm/src_stm/fprintcolor.h
@@ -21,3 +21,8 @@
 #define dprintfcolor()  0
 
 #endif
+
+
+#ifdef STM_BARRIER_COUNT
+void stm_print_barrier_count(void);
+#endif
diff --git a/rpython/translator/stm/src_stm/revision b/rpython/translator/stm/src_stm/revision
--- a/rpython/translator/stm/src_stm/revision
+++ b/rpython/translator/stm/src_stm/revision
@@ -1,1 +1,1 @@
-49c3e0a47ab4
+7b20231c8672
diff --git a/rpython/translator/stm/src_stm/stmgc.h b/rpython/translator/stm/src_stm/stmgc.h
--- a/rpython/translator/stm/src_stm/stmgc.h
+++ b/rpython/translator/stm/src_stm/stmgc.h
@@ -197,38 +197,52 @@
 
 #define UNLIKELY(test)  __builtin_expect(test, 0)
 
+#ifdef STM_BARRIER_COUNT
+# define STM_BARRIER_NUMBERS  12
+# define STM_BARRIER_NAMES "stm_read_barrier\n"         \
+                           "stm_write_barrier\n"        \
+                           "stm_repeat_read_barrier\n"  \
+                           "stm_immut_read_barrier\n"   \
+                           "stm_repeat_write_barrier\n" \
+                           "stm_write_barrier_noptr\n"
+# define STM_COUNT(id, x)  (stm_barriercount[id]++, x)
+extern long stm_barriercount[STM_BARRIER_NUMBERS];
+#else
+# define STM_COUNT(id, x)  (x)
+#endif
+
 #define stm_read_barrier(obj)                                   \
     (UNLIKELY(((obj)->h_revision != stm_private_rev_num) &&     \
               (FXCACHE_AT(obj) != (obj))) ?                     \
-        stm_DirectReadBarrier(obj)                              \
-     :  (obj))
+        STM_COUNT(0, stm_DirectReadBarrier(obj))                \
+     :  STM_COUNT(1, obj))
 
 #define stm_write_barrier(obj)                                  \
     (UNLIKELY(((obj)->h_revision != stm_private_rev_num) ||     \
               (((obj)->h_tid & GCFLAG_WRITE_BARRIER) != 0)) ?   \
-        stm_WriteBarrier(obj)                                   \
-     :  (obj))
+        STM_COUNT(2, stm_WriteBarrier(obj))                     \
+     :  STM_COUNT(3, obj))
 
 #define stm_repeat_read_barrier(obj)                            \
     (UNLIKELY(((obj)->h_tid & (GCFLAG_PUBLIC_TO_PRIVATE |       \
                                GCFLAG_MOVED)) != 0) ?           \
-        stm_RepeatReadBarrier(obj)                              \
-     :  (obj))
+        STM_COUNT(4, stm_RepeatReadBarrier(obj))                \
+     :  STM_COUNT(5, obj))
 
 #define stm_immut_read_barrier(obj)                             \
     (UNLIKELY(((obj)->h_tid & GCFLAG_STUB) != 0) ?              \
-        stm_ImmutReadBarrier(obj)                               \
-     :  (obj))
+        STM_COUNT(6, stm_ImmutReadBarrier(obj))                 \
+     :  STM_COUNT(7, obj))
 
 #define stm_repeat_write_barrier(obj)                           \
     (UNLIKELY(((obj)->h_tid & GCFLAG_WRITE_BARRIER) != 0) ?     \
-        stm_RepeatWriteBarrier(obj)                             \
-     :  (obj))
+        STM_COUNT(8, stm_RepeatWriteBarrier(obj))               \
+     :  STM_COUNT(9, obj))
 
 #define stm_write_barrier_noptr(obj)                            \
     (UNLIKELY((obj)->h_revision != stm_private_rev_num) ?       \
-        stm_WriteBarrier(obj)                                   \
-     :  (obj))
+        STM_COUNT(10, stm_WriteBarrier(obj))                    \
+     :  STM_COUNT(11, obj))
 
 
 #endif
diff --git a/rpython/translator/stm/src_stm/stmsync.c b/rpython/translator/stm/src_stm/stmsync.c
--- a/rpython/translator/stm/src_stm/stmsync.c
+++ b/rpython/translator/stm/src_stm/stmsync.c
@@ -84,6 +84,13 @@
     dprintf(("enter_callback_call(tok=%d)\n", token));
     if (token == 1) {
         stmgcpage_acquire_global_lock();
+#ifdef STM_BARRIER_COUNT
+        static int seen = 0;
+        if (!seen) {
+            seen = 1;
+            atexit(&stm_print_barrier_count);
+        }
+#endif
         DescriptorInit();
         stmgc_init_nursery();
         init_shadowstack();


More information about the pypy-commit mailing list