From cabbb25d5d3625115b6013bb7ad82b280bc5d9fa Mon Sep 17 00:00:00 2001 From: Richael Zhuang Date: Fri, 14 Oct 2022 13:09:07 +0800 Subject: [PATCH] bdev: add API to get submit tsc of a bdev I/O Add API spdk_bdev_io_get_submit_tsc to get submit tsc of a bdev I/O, which can be used in bdev modules to avoid calling expensive spdk_get_ticks(). Change-Id: Ifbcecb1bc663344997c5e73b72a1dfb5d0422946 Signed-off-by: Richael Zhuang Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14989 Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot Reviewed-by: Jim Harris Reviewed-by: Aleksey Marchuk --- CHANGELOG.md | 2 ++ include/spdk/bdev_module.h | 9 +++++++++ lib/bdev/bdev.c | 6 ++++++ lib/bdev/spdk_bdev.map | 1 + 4 files changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a3c19690..8618d8815 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ required bdev. New `spdk_bdev_copy_blocks` and `spdk_bdev_get_max_copy` APIs to support copy commands. +A new API `spdk_bdev_io_get_submit_tsc` was added to get the submit_tsc of the bdev I/O. + ## v22.09 ### accel diff --git a/include/spdk/bdev_module.h b/include/spdk/bdev_module.h index d598d05d6..e0f572f06 100644 --- a/include/spdk/bdev_module.h +++ b/include/spdk/bdev_module.h @@ -1077,6 +1077,15 @@ struct spdk_thread *spdk_bdev_io_get_thread(struct spdk_bdev_io *bdev_io); */ struct spdk_io_channel *spdk_bdev_io_get_io_channel(struct spdk_bdev_io *bdev_io); +/** + * Get the submit_tsc of a bdev I/O. + * + * \param bdev_io The bdev I/O to get the submit_tsc. + * + * \return The submit_tsc of the specified bdev I/O. + */ +uint64_t spdk_bdev_io_get_submit_tsc(struct spdk_bdev_io *bdev_io); + /** * Resize for a bdev. * diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 0bdbf0131..0a5a1dba4 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -3095,6 +3095,12 @@ spdk_bdev_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type io_ty return supported; } +uint64_t +spdk_bdev_io_get_submit_tsc(struct spdk_bdev_io *bdev_io) +{ + return bdev_io->internal.submit_tsc; +} + int spdk_bdev_dump_info_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w) { diff --git a/lib/bdev/spdk_bdev.map b/lib/bdev/spdk_bdev.map index c04cc7dc6..26ae9aa96 100644 --- a/lib/bdev/spdk_bdev.map +++ b/lib/bdev/spdk_bdev.map @@ -134,6 +134,7 @@ spdk_bdev_io_complete_aio_status; spdk_bdev_io_get_thread; spdk_bdev_io_get_io_channel; + spdk_bdev_io_get_submit_tsc; spdk_bdev_notify_blockcnt_change; spdk_scsi_nvme_translate; spdk_bdev_module_list_add;