diff --git a/doc/jsonrpc.md b/doc/jsonrpc.md index 8b5310432..e1668da4c 100644 --- a/doc/jsonrpc.md +++ b/doc/jsonrpc.md @@ -617,8 +617,11 @@ Example response: "num_read_ops": 2, "bytes_written": 0, "num_write_ops": 0, + "bytes_unmapped": 0, + "num_unmap_ops": 0, "read_latency_ticks": 178904, "write_latency_ticks": 0, + "unmap_latency_ticks": 0, "queue_depth_polling_period": 2, "queue_depth": 0, "io_time": 0, diff --git a/include/spdk/bdev.h b/include/spdk/bdev.h index 097cca18c..ec453147b 100644 --- a/include/spdk/bdev.h +++ b/include/spdk/bdev.h @@ -133,8 +133,11 @@ struct spdk_bdev_io_stat { uint64_t num_read_ops; uint64_t bytes_written; uint64_t num_write_ops; + uint64_t bytes_unmapped; + uint64_t num_unmap_ops; uint64_t read_latency_ticks; uint64_t write_latency_ticks; + uint64_t unmap_latency_ticks; uint64_t ticks_rate; }; diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index f5a97e319..cc6af3429 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -2010,8 +2010,11 @@ _spdk_bdev_io_stat_add(struct spdk_bdev_io_stat *total, struct spdk_bdev_io_stat total->num_read_ops += add->num_read_ops; total->bytes_written += add->bytes_written; total->num_write_ops += add->num_write_ops; + total->bytes_unmapped += add->bytes_unmapped; + total->num_unmap_ops += add->num_unmap_ops; total->read_latency_ticks += add->read_latency_ticks; total->write_latency_ticks += add->write_latency_ticks; + total->unmap_latency_ticks += add->unmap_latency_ticks; } static void @@ -3067,6 +3070,10 @@ _spdk_bdev_io_complete(void *ctx) bdev_io->internal.ch->stat.num_write_ops++; bdev_io->internal.ch->stat.write_latency_ticks += tsc_diff; break; + case SPDK_BDEV_IO_TYPE_UNMAP: + bdev_io->internal.ch->stat.bytes_unmapped += bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen; + bdev_io->internal.ch->stat.num_unmap_ops++; + bdev_io->internal.ch->stat.unmap_latency_ticks += tsc_diff; default: break; } diff --git a/lib/bdev/rpc/bdev_rpc.c b/lib/bdev/rpc/bdev_rpc.c index 1989f6d27..83d183ff9 100644 --- a/lib/bdev/rpc/bdev_rpc.c +++ b/lib/bdev/rpc/bdev_rpc.c @@ -76,12 +76,21 @@ spdk_rpc_get_bdevs_iostat_cb(struct spdk_bdev *bdev, spdk_json_write_name(w, "num_write_ops"); spdk_json_write_uint64(w, stat->num_write_ops); + spdk_json_write_name(w, "bytes_unmapped"); + spdk_json_write_uint64(w, stat->bytes_unmapped); + + spdk_json_write_name(w, "num_unmap_ops"); + spdk_json_write_uint64(w, stat->num_unmap_ops); + spdk_json_write_name(w, "read_latency_ticks"); spdk_json_write_uint64(w, stat->read_latency_ticks); spdk_json_write_name(w, "write_latency_ticks"); spdk_json_write_uint64(w, stat->write_latency_ticks); + spdk_json_write_name(w, "unmap_latency_ticks"); + spdk_json_write_uint64(w, stat->unmap_latency_ticks); + if (spdk_bdev_get_qd_sampling_period(bdev)) { spdk_json_write_name(w, "queue_depth_polling_period"); spdk_json_write_uint64(w, spdk_bdev_get_qd_sampling_period(bdev));