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