1
0
Fork 0
forked from lthn/blockchain

more preformance logs

This commit is contained in:
crypro.zoidberg 2019-04-18 02:45:43 +02:00
parent 2be037042f
commit d846d26bf4
3 changed files with 90 additions and 18 deletions

View file

@ -51,6 +51,7 @@ namespace math_helper
average()
{
m_base = default_base;
m_count = 0;
}
bool set_base()
@ -71,6 +72,7 @@ namespace math_helper
CRITICAL_REGION_LOCAL(m_lock);
//#ifndef DEBUG_STUB
m_count++;
m_list.push_back(vl);
if(m_list.size() > m_base )
m_list.pop_front();
@ -106,9 +108,20 @@ namespace math_helper
return 0;
}
uint64_t& get_count()
{
return m_count;
}
void reset()
{
m_count = 0;
m_list.clear();
}
private:
unsigned int m_base;
unsigned int m_base;
uint64_t m_count;
std::list<value_type> m_list;
mutable critical_section m_lock;
};

View file

@ -75,15 +75,18 @@ namespace tools
std::map<std::thread::id, std::vector<bool> > m_transactions_stack;
std::atomic<bool> m_is_open;
epee::shared_recursive_mutex& m_rwlock;
public:
struct performance_data
{
epee::math_helper::average<uint64_t, 10> backend_set_pod_time;
epee::math_helper::average<uint64_t, 10> backend_set_t_time;
epee::math_helper::average<uint64_t, 10> set_serialize_t_time;
epee::math_helper::average<uint64_t, 10> backend_get_pod_time;
epee::math_helper::average<uint64_t, 10> backend_get_t_time;
epee::math_helper::average<uint64_t, 10> get_serialize_t_time;
};
private:
mutable performance_data m_gperformance_data;
mutable std::unordered_map<container_handle, performance_data> m_performance_data_map;
public:
basic_db_accessor(std::shared_ptr<i_db_backend> backend, epee::shared_recursive_mutex& rwlock) :m_backend(backend), m_rwlock(rwlock), m_is_open(false)
@ -93,7 +96,8 @@ namespace tools
close();
}
const performance_data& get_performance_data_for_handle(container_handle h) const { return m_performance_data_map[h]; }
performance_data& get_performance_data_for_handle(container_handle h) const { return m_performance_data_map[h]; }
performance_data& get_performance_data_global() const { return m_gperformance_data; }
bool bind_parent_container(i_db_parent_to_container_callabck* pcontainer)
@ -270,15 +274,23 @@ namespace tools
template<class t_pod_key, class t_object>
bool get_t_object(container_handle h, const t_pod_key& k, t_object& obj) const
{
performance_data& m_performance_data = m_gperformance_data;
//TRY_ENTRY();
std::string res_buff;
size_t sk = 0;
const char* pk = key_to_ptr(k, sk);
TIME_MEASURE_START_PD(backend_get_t_time);
if (!m_backend->get(h, pk, sk, res_buff))
return false;
TIME_MEASURE_FINISH_PD(backend_get_t_time);
return t_unserializable_object_from_blob(obj, res_buff);
TIME_MEASURE_START_PD(get_serialize_t_time);
bool res = t_unserializable_object_from_blob(obj, res_buff);
TIME_MEASURE_FINISH_PD(get_serialize_t_time);
return res;
//CATCH_ENTRY_L0("get_t_object_from_db", false);
}
@ -310,15 +322,18 @@ namespace tools
bool get_pod_object(container_handle h, const t_pod_key& k, t_pod_object& obj) const
{
static_assert(std::is_pod<t_pod_object>::value, "t_pod_object must be a POD type.");
performance_data& m_performance_data = m_gperformance_data;
//TRY_ENTRY();
std::string res_buff;
size_t sk = 0;
const char* pk = key_to_ptr(k, sk);
TIME_MEASURE_START_PD(backend_get_pod_time);
if (!m_backend->get(h, pk, sk, res_buff))
return false;
TIME_MEASURE_FINISH_PD(backend_get_pod_time);
CHECK_AND_ASSERT_MES(sizeof(t_pod_object) == res_buff.size(), false, "sizes missmath at get_pod_object_from_db(). returned size = "
<< res_buff.size() << "expected: " << sizeof(t_pod_object));
@ -784,14 +799,19 @@ namespace tools
m_cache.erase(k);
}
const performance_data& get_performance_data() const
performance_data& get_performance_data() const
{
return m_performance_data;
}
const typename basic_db_accessor::performance_data& get_performance_data_native() const
typename basic_db_accessor::performance_data& get_performance_data_native() const
{
return base_class::bdb.get_performance_data_for_handle(base_class::m_h);
}
typename basic_db_accessor::performance_data& get_performance_data_global() const
{
return base_class::bdb.get_performance_data_global();
}
private:
mutable performance_data m_performance_data;
};

View file

@ -895,6 +895,26 @@ wide_difficulty_type blockchain_storage::get_next_diff_conditional(bool pos) con
//skip genesis timestamp
uint64_t stop_ind = 0;
uint64_t blocks_size = m_db_blocks.size();
TIME_MEASURE_START_PD(target_calculating_enum_blocks);
//@#@
// #define PRINT_PERFORMANCE_DATA_NATIVE(var_name) << #var_name": " << m_db_blocks.get_performance_data_native().var_name.get_avg() << "(" << m_db_blocks.get_performance_data_native().var_name.get_count()<< ")" << ENDL
// #define PRINT_PERFORMANCE_DATA_GLOBAL(var_name) << #var_name": " << m_db_blocks.get_performance_data_global().var_name.get_avg() << "(" << m_db_blocks.get_performance_data_global().var_name.get_count()<< ")" << ENDL
// #define PRINT_PERFORMANCE_DATA(var_name) << #var_name": " << m_db_blocks.get_performance_data().var_name.get_avg() << "(" << m_db_blocks.get_performance_data().var_name.get_count()<< ")" << ENDL
//
// #define RESET_PERFORMANCE_DATA_NATIVE(var_name) m_db_blocks.get_performance_data_native().var_name.reset();
// #define RESET_PERFORMANCE_DATA_GLOBAL(var_name) m_db_blocks.get_performance_data_global().var_name.reset();
// #define RESET_PERFORMANCE_DATA(var_name) m_db_blocks.get_performance_data().var_name.reset();
//
//
// RESET_PERFORMANCE_DATA_GLOBAL(backend_get_pod_time);
// RESET_PERFORMANCE_DATA_GLOBAL(backend_get_t_time);
// RESET_PERFORMANCE_DATA_GLOBAL(get_serialize_t_time);
// RESET_PERFORMANCE_DATA(hit_percent);
// RESET_PERFORMANCE_DATA(read_cache_microsec);
// RESET_PERFORMANCE_DATA(read_db_microsec);
// RESET_PERFORMANCE_DATA(update_cache_microsec);
// RESET_PERFORMANCE_DATA(write_to_cache_microsec);
for (uint64_t cur_ind = blocks_size - 1; cur_ind != stop_ind && count < DIFFICULTY_WINDOW; cur_ind--)
{
auto beiptr = m_db_blocks[cur_ind];
@ -906,8 +926,32 @@ wide_difficulty_type blockchain_storage::get_next_diff_conditional(bool pos) con
commulative_difficulties.push_back(beiptr->cumulative_diff_precise);
++count;
}
//@#@
// LOG_PRINT_MAGENTA("[GET_NEXT_DIFF_CONDITIONAL][DB STAT]: count: " << count << ENDL
// PRINT_PERFORMANCE_DATA_NATIVE(backend_set_pod_time)
// PRINT_PERFORMANCE_DATA_NATIVE(backend_set_t_time)
// PRINT_PERFORMANCE_DATA_NATIVE(set_serialize_t_time)
// PRINT_PERFORMANCE_DATA_GLOBAL(backend_get_pod_time)
// PRINT_PERFORMANCE_DATA_GLOBAL(backend_get_t_time)
// PRINT_PERFORMANCE_DATA_GLOBAL(get_serialize_t_time)
// PRINT_PERFORMANCE_DATA(hit_percent)
// PRINT_PERFORMANCE_DATA(read_cache_microsec)
// PRINT_PERFORMANCE_DATA(read_db_microsec)
// PRINT_PERFORMANCE_DATA(update_cache_microsec)
// PRINT_PERFORMANCE_DATA(write_to_cache_microsec)
// //PRINT_PERFORMANCE_DATA(write_to_db_microsec)
// , LOG_LEVEL_0);
//!@#@
wide_difficulty_type& dif = pos ? m_cached_next_pos_difficulty : m_cached_next_pow_difficulty;
return dif = next_difficulty(timestamps, commulative_difficulties, pos ? DIFFICULTY_POS_TARGET : DIFFICULTY_POW_TARGET);
TIME_MEASURE_FINISH_PD(target_calculating_enum_blocks);
TIME_MEASURE_START_PD(target_calculating_calc);
dif = next_difficulty(timestamps, commulative_difficulties, pos ? DIFFICULTY_POS_TARGET : DIFFICULTY_POW_TARGET);
TIME_MEASURE_FINISH_PD(target_calculating_calc);
return dif;
}
//------------------------------------------------------------------
wide_difficulty_type blockchain_storage::get_next_diff_conditional2(bool pos, const alt_chain_type& alt_chain, uint64_t split_height) const
@ -932,13 +976,8 @@ wide_difficulty_type blockchain_storage::get_next_diff_conditional2(bool pos, co
return false;
return true;
};
TIME_MEASURE_START_PD(target_calculating_enum_blocks);
enum_blockchain(cb, alt_chain, split_height);
TIME_MEASURE_FINISH_PD(target_calculating_enum_blocks);
TIME_MEASURE_START_PD(target_calculating_calc);
wide_difficulty_type res = next_difficulty(timestamps, commulative_difficulties, pos ? DIFFICULTY_POS_TARGET : DIFFICULTY_POW_TARGET);
TIME_MEASURE_FINISH_PD(target_calculating_calc);
return res;
return next_difficulty(timestamps, commulative_difficulties, pos ? DIFFICULTY_POS_TARGET : DIFFICULTY_POW_TARGET);
}
//------------------------------------------------------------------
wide_difficulty_type blockchain_storage::get_cached_next_difficulty(bool pos) const
@ -4547,14 +4586,14 @@ bool blockchain_storage::handle_block_to_main_chain(const block& bl, const crypt
<< ENDL << "HEIGHT " << bei.height << ", difficulty: " << current_diffic << ", cumul_diff_precise: " << bei.cumulative_diff_precise << ", cumul_diff_adj: " << bei.cumulative_diff_adjusted << " (+" << cumulative_diff_delta << ")"
<< ENDL << "block reward: " << print_money_brief(base_reward + fee_summary) << " (" << print_money_brief(base_reward) << " + " << print_money_brief(fee_summary)
<< ")" << ", coinbase_blob_size: " << coinbase_blob_size << ", cumulative size: " << cumulative_block_size << ", tx_count: " << bei.bl.tx_hashes.size()
<< ", " << block_processing_time_0_ms
<< "(" << block_processing_time_1
<< "/" << target_calculating_time_2
<< ", timing: " << block_processing_time_0_ms << "ms"
<< "(micrsec:" << block_processing_time_1
<< "(" << target_calculating_time_2 << "(" << m_performance_data.target_calculating_enum_blocks.get_last_val() << "/" << m_performance_data.target_calculating_calc.get_last_val() << ")"
<< "/" << longhash_calculating_time_3
<< "/" << insert_time_4
<< "/" << all_txs_insert_time_5
<< "/" << etc_stuff_6
<< ")micrs");
<< "))");
on_block_added(bei, id);