[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