bdev: Added latency to channel statistics
Modified include/spdk/bdev.h and include/spdk_internal/bdev.h add data members to capture statistics information. Modified lib/bdev/bdev.c to calculate read/write latency. Change-Id: Idcd55dd2e88c4b308e016f16ced53720256c79e3 Signed-off-by: Isaac Otsiabah <iotsiabah@us.fujitsu.com> Reviewed-on: https://review.gerrithub.io/390654 Reviewed-by: Jim Harris <james.r.harris@intel.com> Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
98d28d604d
commit
a4f3920d51
@ -115,6 +115,9 @@ struct spdk_bdev_io_stat {
|
||||
uint64_t num_read_ops;
|
||||
uint64_t bytes_written;
|
||||
uint64_t num_write_ops;
|
||||
uint64_t read_latency_ticks;
|
||||
uint64_t write_latency_ticks;
|
||||
uint64_t ticks_rate;
|
||||
};
|
||||
|
||||
typedef void (*spdk_bdev_init_cb)(void *cb_arg, int rc);
|
||||
|
@ -385,6 +385,9 @@ struct spdk_bdev_io {
|
||||
/** It may be used by modules to put the bdev_io into its own list. */
|
||||
TAILQ_ENTRY(spdk_bdev_io) module_link;
|
||||
|
||||
/** Current tsc at submit time. Used to calculate latency at completion. */
|
||||
uint64_t submit_tsc;
|
||||
|
||||
/**
|
||||
* Per I/O context for use by the bdev module.
|
||||
*/
|
||||
|
@ -807,6 +807,7 @@ spdk_bdev_io_submit(struct spdk_bdev_io *bdev_io)
|
||||
|
||||
assert(bdev_io->status == SPDK_BDEV_IO_STATUS_PENDING);
|
||||
|
||||
bdev_io->submit_tsc = spdk_get_ticks();
|
||||
shared_ch->io_outstanding++;
|
||||
bdev_io->in_submit_request = true;
|
||||
if (spdk_likely(bdev_ch->flags == 0)) {
|
||||
@ -1664,6 +1665,7 @@ spdk_bdev_get_io_stat(struct spdk_bdev *bdev, struct spdk_io_channel *ch,
|
||||
|
||||
struct spdk_bdev_channel *channel = spdk_io_channel_get_ctx(ch);
|
||||
|
||||
channel->stat.ticks_rate = spdk_get_ticks_hz();
|
||||
*stat = channel->stat;
|
||||
memset(&channel->stat, 0, sizeof(channel->stat));
|
||||
}
|
||||
@ -1916,10 +1918,12 @@ spdk_bdev_io_complete(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status sta
|
||||
case SPDK_BDEV_IO_TYPE_READ:
|
||||
bdev_ch->stat.bytes_read += bdev_io->u.bdev.num_blocks * bdev->blocklen;
|
||||
bdev_ch->stat.num_read_ops++;
|
||||
bdev_ch->stat.read_latency_ticks += (spdk_get_ticks() - bdev_io->submit_tsc);
|
||||
break;
|
||||
case SPDK_BDEV_IO_TYPE_WRITE:
|
||||
bdev_ch->stat.bytes_written += bdev_io->u.bdev.num_blocks * bdev->blocklen;
|
||||
bdev_ch->stat.num_write_ops++;
|
||||
bdev_ch->stat.write_latency_ticks += (spdk_get_ticks() - bdev_io->submit_tsc);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user