diff --git a/include/spdk/bdev.h b/include/spdk/bdev.h index 2d5d26503..f6c4063c8 100644 --- a/include/spdk/bdev.h +++ b/include/spdk/bdev.h @@ -299,6 +299,16 @@ uint32_t spdk_bdev_get_block_size(const struct spdk_bdev *bdev); */ uint64_t spdk_bdev_get_num_blocks(const struct spdk_bdev *bdev); +/** + * Get IOs per second of block device for the QoS rate limiting. + * + * \param bdev Block device to query. + * \return IOs per second. + * + * Return 0 for no QoS enforced on the queried block device. + */ +uint64_t spdk_bdev_get_qos_ios_per_sec(const struct spdk_bdev *bdev); + /** * Get minimum I/O buffer address alignment for a bdev. * diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 342e7a258..04975acaa 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -1363,6 +1363,12 @@ spdk_bdev_get_num_blocks(const struct spdk_bdev *bdev) return bdev->blockcnt; } +uint64_t +spdk_bdev_get_qos_ios_per_sec(const struct spdk_bdev *bdev) +{ + return bdev->ios_per_sec; +} + size_t spdk_bdev_get_buf_align(const struct spdk_bdev *bdev) { diff --git a/lib/bdev/rpc/bdev_rpc.c b/lib/bdev/rpc/bdev_rpc.c index 790160542..8b483b5cd 100644 --- a/lib/bdev/rpc/bdev_rpc.c +++ b/lib/bdev/rpc/bdev_rpc.c @@ -74,6 +74,9 @@ spdk_rpc_dump_bdev_info(struct spdk_json_write_ctx *w, spdk_json_write_named_string(w, "uuid", uuid_str); } + spdk_json_write_name(w, "qos_ios_per_sec"); + spdk_json_write_uint64(w, spdk_bdev_get_qos_ios_per_sec(bdev)); + spdk_json_write_name(w, "claimed"); spdk_json_write_bool(w, (bdev->claim_module != NULL));