From d31e78f644a54e5e5bc76cd32f9ecb5d08dea4e3 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 20 Oct 2011 12:00:28 -0700 Subject: [PATCH] filestore: simplify perfcounter lifecycle Signed-off-by: Sage Weil --- src/os/FileStore.cc | 127 ++++++++++++++++++-------------------------- src/os/FileStore.h | 4 +- 2 files changed, 53 insertions(+), 78 deletions(-) diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index e16008adf446..7ba1304e614d 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -665,6 +665,39 @@ FileStore::FileStore(const std::string &base, const std::string &jdev) : ostringstream sss; sss << basedir << "/current/commit_op_seq"; current_op_seq_fn = sss.str(); + + // initialize logger + PerfCountersBuilder plb(g_ceph_context, "filestore", l_os_first, l_os_last); + + plb.add_u64_counter(l_os_in_ops, "in_ops"); + plb.add_u64_counter(l_os_in_bytes, "in_bytes"); + plb.add_u64_counter(l_os_readable_ops, "readable_ops"); + plb.add_u64_counter(l_os_readable_bytes, "readable_bytes"); + plb.add_u64_counter(l_os_commit_ops, "commit_ops"); + plb.add_u64_counter(l_os_commit_bytes, "commit_bytes"); + + plb.add_u64(l_os_jq_max_ops, "journal_queue_max_ops"); + plb.add_u64(l_os_jq_ops, "journal_queue_ops"); + plb.add_u64_counter(l_os_j_ops, "journal_ops"); + plb.add_u64(l_os_jq_max_bytes, "journal_queue_max_bytes"); + plb.add_u64(l_os_jq_bytes, "journal_queue_bytes"); + plb.add_u64_counter(l_os_j_bytes, "journal_bytes"); + plb.add_u64(l_os_oq_max_ops, "op_queue_max_ops"); + plb.add_u64(l_os_oq_ops, "op_queue_ops"); + plb.add_u64_counter(l_os_ops, "ops"); + plb.add_u64(l_os_oq_max_bytes, "op_queue_max_bytes"); + plb.add_u64(l_os_oq_bytes, "op_queue_bytes"); + plb.add_u64_counter(l_os_bytes, "bytes"); + plb.add_u64(l_os_committing, "committing"); + + logger = plb.create_perf_counters(); +} + +FileStore::~FileStore() +{ + if (journal) + journal->logger = NULL; + delete logger; } static void get_attrname(const char *name, char *buf, int len) @@ -742,6 +775,8 @@ int FileStore::open_journal() if (journalpath.length()) { dout(10) << "open_journal at " << journalpath << dendl; journal = new FileJournal(fsid, &finisher, &sync_cond, journalpath.c_str(), m_journal_dio); + if (journal) + journal->logger = logger; } return 0; } @@ -1675,7 +1710,7 @@ int FileStore::mount() timer.init(); - start_logger(); + g_ceph_context->GetPerfCountersCollection()->add(logger); // all okay. return 0; @@ -1710,7 +1745,8 @@ int FileStore::umount() flusher_thread.join(); journal_stop(); - stop_logger(); + + g_ceph_context->GetPerfCountersCollection()->remove(logger); op_finisher.stop(); ondisk_finisher.stop(); @@ -1762,53 +1798,6 @@ int FileStore::get_max_object_name_length() return ret; } -void FileStore::start_logger() -{ - dout(10) << "start_logger" << dendl; - assert(!logger); - - PerfCountersBuilder plb(g_ceph_context, "filestore", l_os_first, l_os_last); - - plb.add_u64_counter(l_os_in_ops, "in_ops"); - plb.add_u64_counter(l_os_in_bytes, "in_bytes"); - plb.add_u64_counter(l_os_readable_ops, "readable_ops"); - plb.add_u64_counter(l_os_readable_bytes, "readable_bytes"); - plb.add_u64_counter(l_os_commit_ops, "commit_ops"); - plb.add_u64_counter(l_os_commit_bytes, "commit_bytes"); - - plb.add_u64(l_os_jq_max_ops, "journal_queue_max_ops"); - plb.add_u64(l_os_jq_ops, "journal_queue_ops"); - plb.add_u64_counter(l_os_j_ops, "journal_ops"); - plb.add_u64(l_os_jq_max_bytes, "journal_queue_max_bytes"); - plb.add_u64(l_os_jq_bytes, "journal_queue_bytes"); - plb.add_u64_counter(l_os_j_bytes, "journal_bytes"); - plb.add_u64(l_os_oq_max_ops, "op_queue_max_ops"); - plb.add_u64(l_os_oq_ops, "op_queue_ops"); - plb.add_u64_counter(l_os_ops, "ops"); - plb.add_u64(l_os_oq_max_bytes, "op_queue_max_bytes"); - plb.add_u64(l_os_oq_bytes, "op_queue_bytes"); - plb.add_u64_counter(l_os_bytes, "bytes"); - plb.add_u64(l_os_committing, "committing"); - - logger = plb.create_perf_counters(); - if (journal) - journal->logger = logger; - g_ceph_context->GetPerfCountersCollection()->add(logger); -} - -void FileStore::stop_logger() -{ - dout(10) << "stop_logger" << dendl; - if (logger) { - if (journal) - journal->logger = NULL; - g_ceph_context->GetPerfCountersCollection()->remove(logger); - delete logger; - logger = NULL; - } -} - - /// ----------------------------- @@ -1850,12 +1839,10 @@ void FileStore::queue_op(OpSequencer *osr, Op *o) osr->queue(o); - if (logger) { - logger->inc(l_os_ops); - logger->inc(l_os_bytes, o->bytes); - logger->set(l_os_oq_ops, op_queue_len); - logger->set(l_os_oq_bytes, op_queue_bytes); - } + logger->inc(l_os_ops); + logger->inc(l_os_bytes, o->bytes); + logger->set(l_os_oq_ops, op_queue_len); + logger->set(l_os_oq_bytes, op_queue_bytes); op_tp.unlock(); @@ -1883,10 +1870,8 @@ void FileStore::_op_queue_reserve_throttle(Op *o, const char *caller) max_bytes += m_filestore_queue_committing_max_bytes; } - if (logger) { - logger->set(l_os_oq_max_ops, max_ops); - logger->set(l_os_oq_max_bytes, max_bytes); - } + logger->set(l_os_oq_max_ops, max_ops); + logger->set(l_os_oq_max_bytes, max_bytes); while ((max_ops && (op_queue_len + 1) > max_ops) || (max_bytes && op_queue_bytes // let single large ops through! @@ -1935,10 +1920,8 @@ void FileStore::_finish_op(OpSequencer *osr) // called with tp lock held _op_queue_release_throttle(o); - if (logger) { - logger->inc(l_os_readable_ops); - logger->inc(l_os_readable_bytes, o->bytes); - } + logger->inc(l_os_readable_ops); + logger->inc(l_os_readable_bytes, o->bytes); if (next_finish == o->op) { dout(10) << "_finish_op " << o->op << " next_finish " << next_finish @@ -2011,10 +1994,8 @@ int FileStore::queue_transactions(Sequencer *posr, list &tls, dout(5) << "queue_transactions new osr " << osr << "/" << osr->parent << dendl; } - if (logger) { - logger->inc(l_os_in_ops); - //logger->inc(l_os_in_bytes, 1); - } + logger->inc(l_os_in_ops); + //logger->inc(l_os_in_bytes, 1); if (journal && journal->is_writeable() && !m_filestore_journal_trailing) { Op *o = build_op(tls, onreadable, onreadable_sync); @@ -2064,10 +2045,8 @@ int FileStore::queue_transactions(Sequencer *posr, list &tls, op_submit_finish(op); op_apply_finish(op); - if (logger) { - logger->inc(l_os_readable_ops); - //fixme logger->inc(l_os_readable_bytes, 1); - } + logger->inc(l_os_readable_ops); + //fixme logger->inc(l_os_readable_bytes, 1); return r; } @@ -3023,8 +3002,7 @@ void FileStore::sync_entry() timer.add_event_after(m_filestore_commit_timeout, sync_entry_timeo); sync_entry_timeo_lock.Unlock(); - if (logger) - logger->set(l_os_committing, 1); + logger->set(l_os_committing, 1); // make flusher stop flushing previously queued stuff sync_epoch++; @@ -3107,8 +3085,7 @@ void FileStore::sync_entry() dout(10) << "sync_entry commit took " << done << dendl; commit_finish(); - if (logger) - logger->set(l_os_committing, 0); + logger->set(l_os_committing, 0); // remove old snaps? if (do_snap) { diff --git a/src/os/FileStore.h b/src/os/FileStore.h index 0395672081c9..0840970a1e9f 100644 --- a/src/os/FileStore.h +++ b/src/os/FileStore.h @@ -243,9 +243,6 @@ class FileStore : public JournalingObjectStore, PerfCounters *logger; public: - void start_logger(); - void stop_logger(); - int lfn_find(coll_t cid, const hobject_t& oid, IndexedPath *path); int lfn_getxattr(coll_t cid, const hobject_t& oid, const char *name, void *val, size_t size); int lfn_setxattr(coll_t cid, const hobject_t& oid, const char *name, const void *val, size_t size); @@ -260,6 +257,7 @@ public: public: FileStore(const std::string &base, const std::string &jdev); + ~FileStore(); int _detect_fs(); int _sanity_check_fs(); -- 2.47.3