]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
workloadgen: Fix the statistics output and a bug triggered by coll destruction
authorJoao Eduardo Luis <joao.luis@inktank.com>
Wed, 30 May 2012 01:10:35 +0000 (18:10 -0700)
committerSage Weil <sage@inktank.com>
Wed, 30 May 2012 16:30:16 +0000 (09:30 -0700)
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
src/test/filestore/TestFileStoreState.cc
src/test/filestore/workload_generator.cc
src/test/filestore/workload_generator.h

index 59ab69cb348b1d5eb80b53da87a564924552450d..4339c5ca6530b28cc552e0dca652d0ba6a34503d 100644 (file)
@@ -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<hobject_t*>::iterator it = m_objects.begin();
-//        it != m_objects.end(); it++) {
     map<int, hobject_t*>::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();
   }
 }
 
index b35b8ce6cd8cb89a0e33c48b30cfa77143622787..da181612aeed6698eff8ff4396ddd59393ed128b 100644 (file)
@@ -51,8 +51,10 @@ WorkloadGenerator::WorkloadGenerator(vector<const char*> 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;
 }
index 35426ff81ff39f9856696ccedb418ae56246cc6f..6a63b353c61115ba03751dcec5c4dba2694ee31e 100644 (file)
@@ -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<const char*> 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,