bdev/nvme: For writes, if there is only one iov element call
write instead of writev Call spdk_nvme_ns_cmd_write_with_md if there is only one iov element. Use spdk_nvme_ns_cmd_writev_with_md only if there is more than one. This is about a 15% improvement in I/Ops. Signed-off-by: Ben Walker <benjamin.walker@intel.com> Change-Id: I1a99b5507d37cde04e81feada65b14554ad01a17 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4319 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
3870092dd1
commit
7deedab66a
@ -2630,10 +2630,18 @@ bdev_nvme_writev(struct nvme_bdev *nbdev, struct spdk_io_channel *ch,
|
||||
bio->iovpos = 0;
|
||||
bio->iov_offset = 0;
|
||||
|
||||
rc = spdk_nvme_ns_cmd_writev_with_md(nbdev->nvme_ns->ns, nvme_ch->qpair, lba, lba_count,
|
||||
bdev_nvme_writev_done, bio, nbdev->disk.dif_check_flags,
|
||||
bdev_nvme_queued_reset_sgl, bdev_nvme_queued_next_sge,
|
||||
md, 0, 0);
|
||||
if (iovcnt == 1) {
|
||||
rc = spdk_nvme_ns_cmd_write_with_md(nbdev->nvme_ns->ns, nvme_ch->qpair, iov[0].iov_base, md, lba,
|
||||
lba_count,
|
||||
bdev_nvme_readv_done, bio,
|
||||
nbdev->disk.dif_check_flags,
|
||||
0, 0);
|
||||
} else {
|
||||
rc = spdk_nvme_ns_cmd_writev_with_md(nbdev->nvme_ns->ns, nvme_ch->qpair, lba, lba_count,
|
||||
bdev_nvme_writev_done, bio, nbdev->disk.dif_check_flags,
|
||||
bdev_nvme_queued_reset_sgl, bdev_nvme_queued_next_sge,
|
||||
md, 0, 0);
|
||||
}
|
||||
|
||||
if (rc != 0 && rc != -ENOMEM) {
|
||||
SPDK_ERRLOG("writev failed: rc = %d\n", rc);
|
||||
|
Loading…
Reference in New Issue
Block a user