]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
blk/kerneldevice: add perfcounter for block async discard 58952/head
authorYite Gu <yitegu0@gmail.com>
Wed, 31 Jul 2024 07:24:03 +0000 (15:24 +0800)
committerYite Gu <yitegu0@gmail.com>
Mon, 12 Aug 2024 02:39:31 +0000 (10:39 +0800)
Adding perfcounter helps to understand the status of async discard.

Signed-off-by: Yite Gu <yitegu0@gmail.com>
src/blk/kernel/KernelDevice.cc
src/blk/kernel/KernelDevice.h

index 4370c493c2c873537d376d4f569f52d2791e24a2..f9c4d8cb600038fbeebcf0757bea0b09f6e7e161 100644 (file)
@@ -88,10 +88,25 @@ KernelDevice::KernelDevice(CephContext* cct, aio_callback_t cb, void *cbpriv, ai
     }
     io_queue = std::make_unique<aio_queue_t>(iodepth);
   }
+
+  char name[128];
+  sprintf(name, "blk-kernel-device-%s", dev_name);
+  PerfCountersBuilder b(cct, name,
+                       l_blk_kernel_device_first, l_blk_kernel_device_last);
+  b.set_prio_default(PerfCountersBuilder::PRIO_USEFUL);
+  b.add_u64_counter(l_blk_kernel_device_discard_op, "discard_op",
+            "Number of discard ops issued to kernel device");
+
+  logger.reset(b.create_perf_counters());
+  cct->get_perfcounters_collection()->add(logger.get());
 }
 
 KernelDevice::~KernelDevice()
 {
+  if (logger) {
+    cct->get_perfcounters_collection()->remove(logger.get());
+    logger.reset();
+  }
   cct->_conf.remove_observer(this);
 }
 
@@ -783,6 +798,7 @@ void KernelDevice::_discard_thread(uint64_t tid)
       discard_running ++;
       l.unlock();
       dout(20) << __func__ << " finishing" << dendl;
+      logger->inc(l_blk_kernel_device_discard_op, discard_processing.size());
       for (auto p = discard_processing.begin(); p != discard_processing.end(); ++p) {
         _discard(p.get_start(), p.get_len());
       }
index ff72eda055d9f3c83ce7684447792ef9dd89de79..42e542a6cc8dab259639a7ab2d040e14be2c7795 100644 (file)
 
 #define RW_IO_MAX (INT_MAX & CEPH_PAGE_MASK)
 
+enum {
+  l_blk_kernel_device_first = 1000,
+  l_blk_kernel_device_discard_op,
+  l_blk_kernel_device_last,
+};
+
 class KernelDevice : public BlockDevice,
                      public md_config_obs_t {
 protected:
@@ -53,6 +59,7 @@ private:
   void *discard_callback_priv;
   bool aio_stop;
   bool discard_stop;
+  std::unique_ptr<PerfCounters> logger;
 
   ceph::mutex discard_lock = ceph::make_mutex("KernelDevice::discard_lock");
   ceph::condition_variable discard_cond;