Author: Tobias Weber <[email protected]>
Branch: c8-overheads-instrumentation
Changeset: r2037:8f7c34968ab8
Date: 2017-04-06 11:23 +0200
http://bitbucket.org/pypy/stmgc/changeset/8f7c34968ab8/
Log: Amend instrumentation of validation, and add instrumentation for
start transaction and write slowpath card
diff --git a/c8/stm/core.c b/c8/stm/core.c
--- a/c8/stm/core.c
+++ b/c8/stm/core.c
@@ -418,6 +418,8 @@
*/
static void _validate_and_attach(struct stm_commit_log_entry_s *new)
{
+ start_timer();
+
uintptr_t cle_length = 0;
struct stm_commit_log_entry_s *old;
@@ -430,10 +432,17 @@
soon_finished_or_inevitable_thread_segment();
retry_from_start:
+ pause_timer();
if (!_stm_validate()) {
+ continue_timer();
+
free_cle(new);
- stm_abort_transaction();
+
+ stop_timer_and_publish(STM_DURATION_VALIDATION);
+
+ stm_abort_transaction(); // leaves method by longjump
}
+ continue_timer();
if (cle_length != list_count(STM_PSEGMENT->modified_old_objects)) {
/* something changed the list of modified objs during _stm_validate; or
@@ -493,6 +502,8 @@
dprintf(("_validate_and_attach(%p) failed, retrying\n", new));
goto retry_from_start;
}
+
+ stop_timer_and_publish(STM_DURATION_VALIDATION);
}
/* This is called to do stm_validate() and then attach INEV_RUNNING to
@@ -513,6 +524,8 @@
static void _validate_and_add_to_commit_log(void)
{
+ start_timer();
+
struct stm_commit_log_entry_s *old, *new;
new = _create_commit_log_entry();
@@ -541,8 +554,12 @@
release_modification_lock_wr(STM_SEGMENT->segment_num);
}
else {
+ pause_timer();
_validate_and_attach(new);
+ continue_timer();
}
+
+ stop_timer_and_publish(STM_DURATION_VALIDATION);
}
/* ############# STM ############# */
@@ -922,6 +939,8 @@
void _stm_write_slowpath_card(object_t *obj, uintptr_t index)
{
+ start_timer();
+
dprintf_test(("write_slowpath_card(%p, %lu)\n",
obj, index));
@@ -930,9 +949,15 @@
card marking instead. */
if (!(obj->stm_flags & GCFLAG_CARDS_SET)) {
bool mark_card = obj_should_use_cards(STM_SEGMENT->segment_base, obj);
+
+ pause_timer();
write_slowpath_common(obj, mark_card);
- if (!mark_card)
+ continue_timer();
+
+ if (!mark_card) {
+ stop_timer_and_publish(STM_DURATION_WRITE_SLOWPATH);
return;
+ }
}
assert(obj_should_use_cards(STM_SEGMENT->segment_base, obj));
@@ -979,6 +1004,8 @@
dprintf(("mark %p index %lu, card:%lu with %d\n",
obj, index, get_index_to_card_index(index), CARD_MARKED));
+
+ stop_timer_and_publish(STM_DURATION_WRITE_SLOWPATH);
}
__attribute__((flatten))
@@ -1043,6 +1070,8 @@
static void _do_start_transaction(stm_thread_local_t *tl)
{
+ start_timer();
+
assert(!_stm_in_transaction(tl));
tl->wait_event_emitted = 0;
@@ -1106,6 +1135,8 @@
reset_transaction_read_version();
}
+ stop_timer_and_publish(STM_DURATION_START_TRX);
+
stm_validate();
}
diff --git a/c8/stmgc.h b/c8/stmgc.h
--- a/c8/stmgc.h
+++ b/c8/stmgc.h
@@ -575,6 +575,7 @@
STM_GC_MAJOR_DONE,
/* execution duration profiling events */
+ STM_DURATION_START_TRX,
STM_DURATION_WRITE_GC_ONLY,
STM_DURATION_WRITE_SLOWPATH,
STM_DURATION_VALIDATION,
@@ -600,6 +601,7 @@
"gc major start", \
"gc major done", \
/* names of duration events */ \
+ "duration of transaction start", \
"duration of gc due to write", \
"duration of write slowpath", \
"duration of validation", \
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit