bdevperf: save bdev io type in bdevperf_task
Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: Ia32bd2655a4cc1c082ce5fd5420f6abaabe40133 Reviewed-on: https://review.gerrithub.io/415299 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
7717cfcacc
commit
67bc354c37
@ -49,6 +49,7 @@ struct bdevperf_task {
|
|||||||
struct io_target *target;
|
struct io_target *target;
|
||||||
void *buf;
|
void *buf;
|
||||||
uint64_t offset_blocks;
|
uint64_t offset_blocks;
|
||||||
|
enum spdk_bdev_io_type io_type;
|
||||||
TAILQ_ENTRY(bdevperf_task) link;
|
TAILQ_ENTRY(bdevperf_task) link;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -356,6 +357,7 @@ static __thread unsigned int seed = 0;
|
|||||||
static void
|
static void
|
||||||
bdevperf_submit_single(struct io_target *target, struct bdevperf_task *task)
|
bdevperf_submit_single(struct io_target *target, struct bdevperf_task *task)
|
||||||
{
|
{
|
||||||
|
spdk_bdev_io_completion_cb cb_fn;
|
||||||
struct spdk_bdev_desc *desc;
|
struct spdk_bdev_desc *desc;
|
||||||
struct spdk_io_channel *ch;
|
struct spdk_io_channel *ch;
|
||||||
uint64_t offset_in_ios;
|
uint64_t offset_in_ios;
|
||||||
@ -389,24 +391,43 @@ bdevperf_submit_single(struct io_target *target, struct bdevperf_task *task)
|
|||||||
memset(task->buf, rand_r(&seed) % 256, g_io_size);
|
memset(task->buf, rand_r(&seed) % 256, g_io_size);
|
||||||
task->iov.iov_base = task->buf;
|
task->iov.iov_base = task->buf;
|
||||||
task->iov.iov_len = g_io_size;
|
task->iov.iov_len = g_io_size;
|
||||||
rc = spdk_bdev_writev_blocks(desc, ch, &task->iov, 1, task->offset_blocks,
|
task->io_type = SPDK_BDEV_IO_TYPE_WRITE;
|
||||||
target->io_size_blocks, bdevperf_verify_write_complete, task);
|
|
||||||
} else if (g_flush) {
|
} else if (g_flush) {
|
||||||
rc = spdk_bdev_flush_blocks(desc, ch, task->offset_blocks,
|
task->io_type = SPDK_BDEV_IO_TYPE_FLUSH;
|
||||||
target->io_size_blocks, bdevperf_complete, task);
|
|
||||||
} else if (g_unmap) {
|
} else if (g_unmap) {
|
||||||
rc = spdk_bdev_unmap_blocks(desc, ch, task->offset_blocks,
|
task->io_type = SPDK_BDEV_IO_TYPE_UNMAP;
|
||||||
target->io_size_blocks, bdevperf_complete, task);
|
|
||||||
} else if ((g_rw_percentage == 100) ||
|
} else if ((g_rw_percentage == 100) ||
|
||||||
(g_rw_percentage != 0 && ((rand_r(&seed) % 100) < g_rw_percentage))) {
|
(g_rw_percentage != 0 && ((rand_r(&seed) % 100) < g_rw_percentage))) {
|
||||||
rbuf = g_zcopy ? NULL : task->buf;
|
task->io_type = SPDK_BDEV_IO_TYPE_READ;
|
||||||
rc = spdk_bdev_read_blocks(desc, ch, rbuf, task->offset_blocks,
|
|
||||||
target->io_size_blocks, bdevperf_complete, task);
|
|
||||||
} else {
|
} else {
|
||||||
task->iov.iov_base = task->buf;
|
task->iov.iov_base = task->buf;
|
||||||
task->iov.iov_len = g_io_size;
|
task->iov.iov_len = g_io_size;
|
||||||
|
task->io_type = SPDK_BDEV_IO_TYPE_WRITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (task->io_type) {
|
||||||
|
case SPDK_BDEV_IO_TYPE_WRITE:
|
||||||
|
cb_fn = (g_verify || g_reset) ? bdevperf_verify_write_complete : bdevperf_complete;
|
||||||
rc = spdk_bdev_writev_blocks(desc, ch, &task->iov, 1, task->offset_blocks,
|
rc = spdk_bdev_writev_blocks(desc, ch, &task->iov, 1, task->offset_blocks,
|
||||||
target->io_size_blocks, bdevperf_complete, task);
|
target->io_size_blocks, cb_fn, task);
|
||||||
|
break;
|
||||||
|
case SPDK_BDEV_IO_TYPE_FLUSH:
|
||||||
|
rc = spdk_bdev_flush_blocks(desc, ch, task->offset_blocks,
|
||||||
|
target->io_size_blocks, bdevperf_complete, task);
|
||||||
|
break;
|
||||||
|
case SPDK_BDEV_IO_TYPE_UNMAP:
|
||||||
|
rc = spdk_bdev_unmap_blocks(desc, ch, task->offset_blocks,
|
||||||
|
target->io_size_blocks, bdevperf_complete, task);
|
||||||
|
break;
|
||||||
|
case SPDK_BDEV_IO_TYPE_READ:
|
||||||
|
rbuf = g_zcopy ? NULL : task->buf;
|
||||||
|
rc = spdk_bdev_read_blocks(desc, ch, rbuf, task->offset_blocks,
|
||||||
|
target->io_size_blocks, bdevperf_complete, task);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
assert(false);
|
||||||
|
rc = -EINVAL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rc) {
|
if (rc) {
|
||||||
|
Loading…
Reference in New Issue
Block a user