Author: Tobias Weber <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit