Author: Tobias Weber <tobias_webe...@gmx.de> Branch: c8-binary-trx-length-per-thread Changeset: r2074:abbe431338a8 Date: 2017-06-11 18:26 +0200 http://bitbucket.org/pypy/stmgc/changeset/abbe431338a8/
Log: Implement simple binary adaptive transaction length diff --git a/c8/stm/nursery.c b/c8/stm/nursery.c --- a/c8/stm/nursery.c +++ b/c8/stm/nursery.c @@ -16,30 +16,15 @@ static uintptr_t _stm_nursery_start; #define DEFAULT_FILL_MARK_NURSERY_BYTES (NURSERY_SIZE / 4) - -// #define LARGE_FILL_MARK_NURSERY_BYTES DEFAULT_FILL_MARK_NURSERY_BYTES #define LARGE_FILL_MARK_NURSERY_BYTES 0x1000000000L -// #define LARGE_FILL_MARK_NURSERY_BYTES 0x1000000000000000L - -#define STM_MIN_RELATIVE_TRANSACTION_LENGTH (0.00000001) static double get_new_transaction_length(stm_thread_local_t *tl, bool aborts) { - const int multiplier = 100; - double previous = tl->relative_transaction_length; - double new = previous; + double new = tl->relative_transaction_length; if (aborts) { tl->transaction_length_backoff = 3; - if (previous > STM_MIN_RELATIVE_TRANSACTION_LENGTH) { - new = previous / multiplier; - } else { - new = 0; - } + new = 0; } else if (tl->transaction_length_backoff == 0) { - if (previous - (STM_MIN_RELATIVE_TRANSACTION_LENGTH * 0.1) < 0) { - new = STM_MIN_RELATIVE_TRANSACTION_LENGTH; - } else if (previous < 1) { - new = previous * multiplier; - } + new = 1; } else { // not abort and backoff != 0 tl->transaction_length_backoff -= 1; } diff --git a/c8/stm/setup.c b/c8/stm/setup.c --- a/c8/stm/setup.c +++ b/c8/stm/setup.c @@ -247,7 +247,7 @@ tl->thread_local_counter = ++thread_local_counters; /* init single thread mode */ - tl->relative_transaction_length = STM_MIN_RELATIVE_TRANSACTION_LENGTH; + tl->relative_transaction_length = 1; tl->transaction_length_backoff = 0; *_get_cpth(tl) = pthread_self(); _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit