From c0c4fcf47d8209da26e686b308d8c20ffc8220d3 Mon Sep 17 00:00:00 2001 From: weiyu Date: Wed, 9 Oct 2019 17:32:32 -0700 Subject: [PATCH 1/1] Performance fix; delete unused data structures --- funcnode.cc | 2 +- history.cc | 23 ++++++++--------------- history.h | 4 ++-- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/funcnode.cc b/funcnode.cc index 5333bce7..b28fbd5b 100644 --- a/funcnode.cc +++ b/funcnode.cc @@ -139,7 +139,7 @@ void FuncNode::update_tree(action_list_t * act_list) if (act_list == NULL || act_list->size() == 0) return; - HashTable * write_history = history->getWriteHistory(); + HashTable * write_history = history->getWriteHistory(); /* build inst_list from act_list for later processing */ func_inst_list_t inst_list; diff --git a/history.cc b/history.cc index 2ad4c1a9..4fde9144 100644 --- a/history.cc +++ b/history.cc @@ -19,7 +19,7 @@ ModelHistory::ModelHistory() : func_nodes() { /* The following are snapshot data structures */ - write_history = new HashTable(); + write_history = new HashTable(); loc_rd_func_nodes_map = new HashTable *, uintptr_t, 0>(); loc_wr_func_nodes_map = new HashTable *, uintptr_t, 0>(); loc_waiting_writes_map = new HashTable *, uintptr_t, 0>(); @@ -330,7 +330,6 @@ void ModelHistory::check_waiting_write(ModelAction * write_act) void * location = write_act->get_location(); uint64_t value = write_act->get_write_value(); SnapVector * concrete_preds = loc_waiting_writes_map->get(location); - SnapVector to_remove = SnapVector(); if (concrete_preds == NULL) return; @@ -362,22 +361,16 @@ void ModelHistory::check_waiting_write(ModelAction * write_act) } if (satisfy_predicate) { - to_remove.push_back(concrete_pred); + /* Wake up threads */ + thread_id_t tid = concrete_pred->get_tid(); + Thread * thread = model->get_thread(tid); + + //model_print("** thread %d is woken up\n", thread->get_id()); + model->get_execution()->getFuzzer()->notify_paused_thread(thread); } index++; } - - for (uint i = 0; i < to_remove.size(); i++) { - ConcretePredicate * concrete_pred = to_remove[i]; - - /* Wake up threads */ - thread_id_t tid = concrete_pred->get_tid(); - Thread * thread = model->get_thread(tid); - - model_print("** thread %d is woken up\n", thread->get_id()); - model->get_execution()->getFuzzer()->notify_paused_thread(thread); - } } WaitObj * ModelHistory::getWaitObj(thread_id_t tid) @@ -520,7 +513,6 @@ void ModelHistory::monitor_waiting_thread_counter(thread_id_t tid) { WaitObj * wait_obj = getWaitObj(tid); thrd_id_set_t * waited_by = wait_obj->getWaitedBy(); - SnapVector expire_threads; // Thread tid has taken an action, update the counter for threads waiting for tid thrd_id_set_iter * tid_iter = waited_by->iterator(); @@ -530,6 +522,7 @@ void ModelHistory::monitor_waiting_thread_counter(thread_id_t tid) bool expire = other_wait_obj->incr_counter(tid); if (expire) { +// model_print("thread %d stops waiting for thread %d\n", waited_by_id, tid); wait_obj->remove_waited_by(waited_by_id); other_wait_obj->remove_waiting_for(tid); diff --git a/history.h b/history.h index f8d86636..4795eb53 100644 --- a/history.h +++ b/history.h @@ -28,7 +28,7 @@ public: FuncNode * get_curr_func_node(thread_id_t tid); void update_write_history(void * location, uint64_t write_val); - HashTable * getWriteHistory() { return write_history; } + HashTable * getWriteHistory() { return write_history; } void update_loc_rd_func_nodes_map(void * location, FuncNode * node); void update_loc_wr_func_nodes_map(void * location, FuncNode * node); SnapVector * getRdFuncNodes(void * location); @@ -64,7 +64,7 @@ private: ModelVector func_nodes; /* Map a location to a set of values that have been written to it */ - HashTable * write_history; + HashTable * write_history; /* Map a location to FuncNodes that may read from it */ HashTable *, uintptr_t, 0> * loc_rd_func_nodes_map; -- 2.34.1