Skip to content

Commit f446f4c

Browse files
committed
blk/kerneldevice: add perfcounter for block async discard
Adding perfcounter helps to understand the status of async discard. Signed-off-by: Yite Gu <[email protected]>
1 parent 90835d6 commit f446f4c

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

src/blk/kernel/KernelDevice.cc

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,25 @@ KernelDevice::KernelDevice(CephContext* cct, aio_callback_t cb, void *cbpriv, ai
8888
}
8989
io_queue = std::make_unique<aio_queue_t>(iodepth);
9090
}
91+
92+
char name[128];
93+
sprintf(name, "blk-kernel-device-%s", dev_name);
94+
PerfCountersBuilder b(cct, name,
95+
l_blk_kernel_device_first, l_blk_kernel_device_last);
96+
b.set_prio_default(PerfCountersBuilder::PRIO_USEFUL);
97+
b.add_u64_counter(l_blk_kernel_device_discard_op, "discard_op",
98+
"Number of discard ops issued to kernel device");
99+
100+
logger.reset(b.create_perf_counters());
101+
cct->get_perfcounters_collection()->add(logger.get());
91102
}
92103

93104
KernelDevice::~KernelDevice()
94105
{
106+
if (logger) {
107+
cct->get_perfcounters_collection()->remove(logger.get());
108+
logger.reset();
109+
}
95110
cct->_conf.remove_observer(this);
96111
}
97112

@@ -783,6 +798,7 @@ void KernelDevice::_discard_thread(uint64_t tid)
783798
discard_running ++;
784799
l.unlock();
785800
dout(20) << __func__ << " finishing" << dendl;
801+
logger->inc(l_blk_kernel_device_discard_op, discard_processing.size());
786802
for (auto p = discard_processing.begin(); p != discard_processing.end(); ++p) {
787803
_discard(p.get_start(), p.get_len());
788804
}

src/blk/kernel/KernelDevice.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@
2929

3030
#define RW_IO_MAX (INT_MAX & CEPH_PAGE_MASK)
3131

32+
enum {
33+
l_blk_kernel_device_first = 1000,
34+
l_blk_kernel_device_discard_op,
35+
l_blk_kernel_device_last,
36+
};
37+
3238
class KernelDevice : public BlockDevice,
3339
public md_config_obs_t {
3440
protected:
@@ -53,6 +59,7 @@ class KernelDevice : public BlockDevice,
5359
void *discard_callback_priv;
5460
bool aio_stop;
5561
bool discard_stop;
62+
std::unique_ptr<PerfCounters> logger;
5663

5764
ceph::mutex discard_lock = ceph::make_mutex("KernelDevice::discard_lock");
5865
ceph::condition_variable discard_cond;

0 commit comments

Comments
 (0)