Commit a4f3920d authored by Isaac Otsiabah's avatar Isaac Otsiabah Committed by Daniel Verkamp
Browse files

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: default avatarIsaac Otsiabah <iotsiabah@us.fujitsu.com>
Reviewed-on: https://review.gerrithub.io/390654


Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
parent 98d28d60
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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);
+3 −0
Original line number Diff line number Diff line
@@ -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.
	 */
+4 −0
Original line number Diff line number Diff line
@@ -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;