From: Joao Eduardo Luis Date: Wed, 30 May 2012 01:10:35 +0000 (-0700) Subject: workloadgen: Fix the statistics output and a bug triggered by coll destruction X-Git-Tag: v0.48argonaut~155^2~20 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=26ecf608c5fb5246ff455ebabca4ab0733984740;p=ceph.git workloadgen: Fix the statistics output and a bug triggered by coll destruction Signed-off-by: Joao Eduardo Luis --- diff --git a/src/test/filestore/TestFileStoreState.cc b/src/test/filestore/TestFileStoreState.cc index 59ab69cb348..4339c5ca653 100644 --- a/src/test/filestore/TestFileStoreState.cc +++ b/src/test/filestore/TestFileStoreState.cc @@ -139,16 +139,14 @@ TestFileStoreState::get_coll_at(int pos, bool erase) TestFileStoreState::coll_entry_t::~coll_entry_t() { if (m_objects.size() > 0) { -// for (set::iterator it = m_objects.begin(); -// it != m_objects.end(); it++) { map::iterator it = m_objects.begin(); for (; it != m_objects.end(); it++) { hobject_t *obj = it->second; - m_objects.erase(it); if (obj) { delete obj; } } + m_objects.clear(); } } diff --git a/src/test/filestore/workload_generator.cc b/src/test/filestore/workload_generator.cc index b35b8ce6cd8..da181612aee 100644 --- a/src/test/filestore/workload_generator.cc +++ b/src/test/filestore/workload_generator.cc @@ -51,8 +51,10 @@ WorkloadGenerator::WorkloadGenerator(vector args) m_suppress_write_xattr_coll(false), m_suppress_write_log(false), m_do_stats(false), m_stats_finished_txs(0), - m_stats_written_data(0), m_stats_duration(), m_stats_lock("WorldloadGenerator::m_stats_lock"), - m_stats_show_secs(5) + m_stats_lock("WorldloadGenerator::m_stats_lock"), + m_stats_show_secs(5), + m_stats_total_written(0), + m_stats_begin() { int err = 0; @@ -373,13 +375,36 @@ TestFileStoreState::coll_entry_t return entry; } +void WorkloadGenerator::do_stats() +{ + utime_t now = ceph_clock_now(NULL); + m_stats_lock.Lock(); + + utime_t duration = (now - m_stats_begin); + + // when cast to double, a utime_t behaves properly + double throughput = (m_stats_total_written / ((double) duration)); + double tx_throughput (m_stats_finished_txs / ((double) duration)); + + dout(0) << __func__ + << " written: " << m_stats_total_written + << " duration: " << duration << " sec" + << " bandwidth: " << prettybyte_t(throughput) << "/s" + << " iops: " << tx_throughput << "/s" + << dendl; + + m_stats_lock.Unlock(); +} + void WorkloadGenerator::run() { bool create_coll = false; int ops_run = 0; utime_t stats_interval(m_stats_show_secs, 0); - utime_t stats_time = ceph_clock_now(NULL); + utime_t now = ceph_clock_now(NULL); + utime_t stats_time = now; + m_stats_begin = now; do { C_StatState *stat_state = NULL; @@ -409,28 +434,9 @@ void WorkloadGenerator::run() utime_t now = ceph_clock_now(NULL); utime_t elapsed = now - stats_time; if (elapsed >= stats_interval) { - m_stats_lock.Lock(); - - // when cast to double, a utime_t behaves properly - double throughput = (m_stats_written_data / ((double) m_stats_duration)); - double tx_throughput (m_stats_finished_txs / ((double) m_stats_duration)); - - dout(0) << __func__ - << " written: " << m_stats_written_data - << " duration: " << m_stats_duration - << " bandwidth: " << prettybyte_t(throughput) << "/s" - << " iops: " << tx_throughput << "/s" - << dendl; - - m_stats_finished_txs = 0; - m_stats_written_data = 0; - m_stats_duration = utime_t(); - - m_stats_lock.Unlock(); - - stats_time = now; + do_stats(); + stats_time = now; } - stat_state = new C_StatState(this, now); } @@ -486,12 +492,9 @@ queue_tx: wait_for_done(); - dout(0) << __func__ << " finishing" << dendl; -} - -void WorkloadGenerator::print_results() -{ + do_stats(); + dout(0) << __func__ << " finishing" << dendl; } void usage() @@ -561,6 +564,5 @@ int main(int argc, const char *argv[]) WorkloadGenerator *wrkldgen_ptr = new WorkloadGenerator(args); wrkldgen.reset(wrkldgen_ptr); wrkldgen->run(); - wrkldgen->print_results(); return 0; } diff --git a/src/test/filestore/workload_generator.h b/src/test/filestore/workload_generator.h index 35426ff81ff..6a63b353c61 100644 --- a/src/test/filestore/workload_generator.h +++ b/src/test/filestore/workload_generator.h @@ -78,11 +78,12 @@ class WorkloadGenerator : public TestFileStoreState { bool m_do_stats; int m_stats_finished_txs; - size_t m_stats_written_data; - utime_t m_stats_duration; Mutex m_stats_lock; int m_stats_show_secs; + size_t m_stats_total_written; + utime_t m_stats_begin; + private: void _suppress_ops_or_die(std::string& val); @@ -116,6 +117,8 @@ class WorkloadGenerator : public TestFileStoreState { coll_entry_t *do_create_collection(ObjectStore::Transaction *t, C_StatState *stat); + void do_stats(); + public: WorkloadGenerator(vector args); ~WorkloadGenerator() { @@ -162,19 +165,15 @@ public: void finish(int r) { ctx->finish(r); - utime_t end = ceph_clock_now(NULL); - utime_t taken = end - stat_state->start; - stat_state->wrkldgen->m_stats_lock.Lock(); - stat_state->wrkldgen->m_stats_duration += taken; - stat_state->wrkldgen->m_stats_written_data += stat_state->written_data; + + stat_state->wrkldgen->m_stats_total_written += stat_state->written_data; stat_state->wrkldgen->m_stats_finished_txs ++; stat_state->wrkldgen->m_stats_lock.Unlock(); } }; void run(void); - void print_results(void); }; bool operator<(const WorkloadGenerator::coll_entry_t& l,