Author: Tobias Weber <tobias_webe...@gmx.de>
Branch: c8-long-transactions
Changeset: r2041:9fd6311549e1
Date: 2017-04-11 21:54 +0200
http://bitbucket.org/pypy/stmgc/changeset/9fd6311549e1/

Log:    Add debug output and minor refactorings

diff --git a/c8/stm/core.c b/c8/stm/core.c
--- a/c8/stm/core.c
+++ b/c8/stm/core.c
@@ -1163,8 +1163,12 @@
 
     if (repeat_count == 0) {  /* else, 'nursery_mark' was already set
                                  in abort_data_structures_from_segment_num() */
-        if (number_of_segments_in_use() <= 2) {
-            /* TODO two is a hack b/c benchmarks have a main thread */
+        int segments_in_use = number_of_segments_in_use();
+        int single_thread_mode_segments_in_use_limit = 2;
+        dprintf((((segments_in_use <= 
single_thread_mode_segments_in_use_limit) ?
+                "can activate 1TM (%d segments)\n" : "cannot activate 1TM (%d 
segments)\n"),
+                segments_in_use));
+        if (segments_in_use <= single_thread_mode_segments_in_use_limit) {
             start_single_thread_mode();
         } else if (stm_single_thread_mode_active) {
             end_single_thread_mode();
diff --git a/c8/stm/nursery.c b/c8/stm/nursery.c
--- a/c8/stm/nursery.c
+++ b/c8/stm/nursery.c
@@ -15,7 +15,7 @@
 
 static bool stm_single_thread_mode_active = false;
 
-#define SINGLE_THREAD_MODE_FILL_MARK_NURSERY_BYTES  (NURSERY_SIZE * 9999)
+#define SINGLE_THREAD_MODE_FILL_MARK_NURSERY_BYTES  (NURSERY_SIZE * 500000)
 #define DEFAULT_FILL_MARK_NURSERY_BYTES             (NURSERY_SIZE / 4)
 
 uintptr_t stm_fill_mark_nursery_bytes = DEFAULT_FILL_MARK_NURSERY_BYTES;
@@ -26,12 +26,14 @@
     stm_single_thread_mode_active = true;
     stm_fill_mark_nursery_bytes = SINGLE_THREAD_MODE_FILL_MARK_NURSERY_BYTES;
     timing_event(STM_SEGMENT->running_thread, STM_SINGLE_THREAD_MODE_ON);
+    dprintf(("single thread mode ON\n"));
 }
 
 static void end_single_thread_mode(void) {
     timing_event(STM_SEGMENT->running_thread, STM_SINGLE_THREAD_MODE_OFF);
     stm_fill_mark_nursery_bytes = DEFAULT_FILL_MARK_NURSERY_BYTES;
     stm_single_thread_mode_active = false;
+    dprintf(("single thread mode OFF\n"));
 }
 
 static void setup_nursery(void)
diff --git a/c8/stm/sync.c b/c8/stm/sync.c
--- a/c8/stm/sync.c
+++ b/c8/stm/sync.c
@@ -176,8 +176,8 @@
 
 /************************************************************/
 
-static uint8_t number_of_segments_in_use(void) {
-    uint8_t result = 0;
+static int number_of_segments_in_use(void) {
+    int result = 0;
     int num;
     for (num = 1; num < NB_SEGMENTS; num++) {
         if (sync_ctl.in_use1[num] > 0) {
diff --git a/c8/stm/sync.h b/c8/stm/sync.h
--- a/c8/stm/sync.h
+++ b/c8/stm/sync.h
@@ -22,7 +22,7 @@
 static void set_gs_register(char *value);
 static void ensure_gs_register(long segnum);
 
-static uint8_t number_of_segments_in_use(void);
+static int number_of_segments_in_use(void);
 
 /* acquire and release one of the segments for running the given thread
    (must have the mutex acquired!) */
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to