All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/2] Adding transport abstraction and iSER support
@ 2016-10-09  8:14 Roy Shterman
  2016-10-09  8:14 ` [Qemu-devel] [PATCH 1/2] block/iscsi: Introducing new zero-copy API Roy Shterman
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Roy Shterman @ 2016-10-09  8:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: roysh, roy.shterman, ronniesahlberg, pl, pbonzini

Introducing new transport abstraction, with additional support
in iSER transport layer. Also adding new zero-copy API that is
needed in iSER case.

changes from v1:
- Adding iser as an additional block driver

changes from v2:
- Splitting iser support and new API into two patches
- Removing option to configure iSER in URI options

Roy Shterman (2):
  block/iscsi: Introducing new zero-copy API
  block/iscsi: Adding new iSER transport layet option

 block/iscsi.c |   83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 81 insertions(+), 2 deletions(-)

-- 
1.7.8.2

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Qemu-devel] [PATCH 1/2] block/iscsi: Introducing new zero-copy API
  2016-10-09  8:14 [Qemu-devel] [PATCH 0/2] Adding transport abstraction and iSER support Roy Shterman
@ 2016-10-09  8:14 ` Roy Shterman
  2016-10-09  8:14 ` [Qemu-devel] [PATCH 2/2] block/iscsi: Adding new iSER transport layer option Roy Shterman
  2016-10-10 10:03 ` [Qemu-devel] [PATCH 0/2] Adding transport abstraction and iSER support Paolo Bonzini
  2 siblings, 0 replies; 4+ messages in thread
From: Roy Shterman @ 2016-10-09  8:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: roysh, roy.shterman, ronniesahlberg, pl, pbonzini

A new API to deploy zero-copy command submission. The new API takes I/O
vectors list and number of I/O vectors to submit as input parameters
when initiating the command. New API must be used if working with
iSER transport option.

Signed-off-by: Roy Shterman <roysh@mellanox.com>
---
 block/iscsi.c |   36 +++++++++++++++++++++++++++++++++++-
 1 files changed, 35 insertions(+), 1 deletions(-)

diff --git a/block/iscsi.c b/block/iscsi.c
index dff548a..9fb5d44 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -595,6 +595,20 @@ iscsi_co_writev_flags(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
     iscsi_co_init_iscsitask(iscsilun, &iTask);
 retry:
     if (iscsilun->use_16_for_rw) {
+#if LIBISCSI_API_VERSION >= (20160603)
+        iTask.task = iscsi_write16_iov_task(iscsilun->iscsi, iscsilun->lun, lba,
+                                            NULL, num_sectors * iscsilun->block_size,
+                                            iscsilun->block_size, 0, 0, fua, 0, 0,
+                                            iscsi_co_generic_cb, &iTask,
+                                            (struct scsi_iovec *)iov->iov, iov->niov);
+    } else {
+        iTask.task = iscsi_write10_iov_task(iscsilun->iscsi, iscsilun->lun, lba,
+                                            NULL, num_sectors * iscsilun->block_size,
+                                            iscsilun->block_size, 0, 0, fua, 0, 0,
+                                            iscsi_co_generic_cb, &iTask,
+                                            (struct scsi_iovec *)iov->iov, iov->niov);
+    }
+#else
         iTask.task = iscsi_write16_task(iscsilun->iscsi, iscsilun->lun, lba,
                                         NULL, num_sectors * iscsilun->block_size,
                                         iscsilun->block_size, 0, 0, fua, 0, 0,
@@ -605,11 +619,14 @@ retry:
                                         iscsilun->block_size, 0, 0, fua, 0, 0,
                                         iscsi_co_generic_cb, &iTask);
     }
+#endif
     if (iTask.task == NULL) {
         return -ENOMEM;
     }
+#if LIBISCSI_API_VERSION < (20160603)
     scsi_task_set_iov_out(iTask.task, (struct scsi_iovec *) iov->iov,
                           iov->niov);
+#endif
     while (!iTask.complete) {
         iscsi_set_events(iscsilun);
         qemu_coroutine_yield();
@@ -792,6 +809,21 @@ static int coroutine_fn iscsi_co_readv(BlockDriverState *bs,
     iscsi_co_init_iscsitask(iscsilun, &iTask);
 retry:
     if (iscsilun->use_16_for_rw) {
+#if LIBISCSI_API_VERSION >= (20160603)
+        iTask.task = iscsi_read16_iov_task(iscsilun->iscsi, iscsilun->lun, lba,
+                                           num_sectors * iscsilun->block_size,
+                                           iscsilun->block_size, 0, 0, 0, 0, 0,
+                                           iscsi_co_generic_cb, &iTask,
+                                           (struct scsi_iovec *)iov->iov, iov->niov);
+    } else {
+        iTask.task = iscsi_read10_iov_task(iscsilun->iscsi, iscsilun->lun, lba,
+                                           num_sectors * iscsilun->block_size,
+                                           iscsilun->block_size,
+                                           0, 0, 0, 0, 0,
+                                           iscsi_co_generic_cb, &iTask,
+                                           (struct scsi_iovec *)iov->iov, iov->niov);
+    }
+#else
         iTask.task = iscsi_read16_task(iscsilun->iscsi, iscsilun->lun, lba,
                                        num_sectors * iscsilun->block_size,
                                        iscsilun->block_size, 0, 0, 0, 0, 0,
@@ -803,11 +835,13 @@ retry:
                                        0, 0, 0, 0, 0,
                                        iscsi_co_generic_cb, &iTask);
     }
+#endif
     if (iTask.task == NULL) {
         return -ENOMEM;
     }
+#if LIBISCSI_API_VERSION < (20160603)
     scsi_task_set_iov_in(iTask.task, (struct scsi_iovec *) iov->iov, iov->niov);
-
+#endif
     while (!iTask.complete) {
         iscsi_set_events(iscsilun);
         qemu_coroutine_yield();
-- 
1.7.8.2

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Qemu-devel] [PATCH 2/2] block/iscsi: Adding new iSER transport layer option
  2016-10-09  8:14 [Qemu-devel] [PATCH 0/2] Adding transport abstraction and iSER support Roy Shterman
  2016-10-09  8:14 ` [Qemu-devel] [PATCH 1/2] block/iscsi: Introducing new zero-copy API Roy Shterman
@ 2016-10-09  8:14 ` Roy Shterman
  2016-10-10 10:03 ` [Qemu-devel] [PATCH 0/2] Adding transport abstraction and iSER support Paolo Bonzini
  2 siblings, 0 replies; 4+ messages in thread
From: Roy Shterman @ 2016-10-09  8:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: roysh, roy.shterman, ronniesahlberg, pl, pbonzini

iSER is a new transport layer supported in Libiscsi,
iSER provides a zero-copy RDMA capable interface that can
improve performance.

In order to use the new iSER transport one need to have RDMA supported HW
and to choose iser as the protocol name in Libiscsi URI.

For now iSER memory buffers are pre-allocated and pre-registered,
hence in order to work with iSER from QEMU, one need to enable
MEMLOCK attribute in the VM to be large enough for all iSER buffers and RDMA
resources.

Signed-off-by: Roy Shterman <roysh@mellanox.com>
---
 block/iscsi.c |   47 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 46 insertions(+), 1 deletions(-)

diff --git a/block/iscsi.c b/block/iscsi.c
index 9fb5d44..71880df 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -1643,7 +1643,13 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags,
         ret = -ENOMEM;
         goto out;
     }
-
+#if LIBISCSI_API_VERSION >= (20160603)
+    if (iscsi_init_transport(iscsi, iscsi_url->transport)) {
+        error_setg(errp, ("Error initializing transport."));
+        ret = -EINVAL;
+        goto out;
+    }
+#endif
     if (iscsi_set_targetname(iscsi, iscsi_url->target)) {
         error_setg(errp, "iSCSI: Failed to set target name.");
         ret = -EINVAL;
@@ -2047,9 +2053,48 @@ static BlockDriver bdrv_iscsi = {
     .bdrv_attach_aio_context = iscsi_attach_aio_context,
 };
 
+#if LIBISCSI_API_VERSION >= (20160603)
+static BlockDriver bdrv_iser = {
+    .format_name     = "iser",
+    .protocol_name   = "iser",
+
+    .instance_size   = sizeof(IscsiLun),
+    .bdrv_needs_filename = true,
+    .bdrv_file_open  = iscsi_open,
+    .bdrv_close      = iscsi_close,
+    .bdrv_create     = iscsi_create,
+    .create_opts     = &iscsi_create_opts,
+    .bdrv_reopen_prepare   = iscsi_reopen_prepare,
+    .bdrv_reopen_commit    = iscsi_reopen_commit,
+    .bdrv_invalidate_cache = iscsi_invalidate_cache,
+
+    .bdrv_getlength  = iscsi_getlength,
+    .bdrv_get_info   = iscsi_get_info,
+    .bdrv_truncate   = iscsi_truncate,
+    .bdrv_refresh_limits = iscsi_refresh_limits,
+
+    .bdrv_co_get_block_status = iscsi_co_get_block_status,
+    .bdrv_co_pdiscard      = iscsi_co_pdiscard,
+    .bdrv_co_pwrite_zeroes = iscsi_co_pwrite_zeroes,
+    .bdrv_co_readv         = iscsi_co_readv,
+    .bdrv_co_writev_flags  = iscsi_co_writev_flags,
+    .bdrv_co_flush_to_disk = iscsi_co_flush,
+
+#ifdef __linux__
+    .bdrv_aio_ioctl   = iscsi_aio_ioctl,
+#endif
+
+    .bdrv_detach_aio_context = iscsi_detach_aio_context,
+    .bdrv_attach_aio_context = iscsi_attach_aio_context,
+};
+#endif
+
 static void iscsi_block_init(void)
 {
     bdrv_register(&bdrv_iscsi);
+#if LIBISCSI_API_VERSION >= (20160603)
+    bdrv_register(&bdrv_iser);
+#endif
 }
 
 block_init(iscsi_block_init);
-- 
1.7.8.2

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] Adding transport abstraction and iSER support
  2016-10-09  8:14 [Qemu-devel] [PATCH 0/2] Adding transport abstraction and iSER support Roy Shterman
  2016-10-09  8:14 ` [Qemu-devel] [PATCH 1/2] block/iscsi: Introducing new zero-copy API Roy Shterman
  2016-10-09  8:14 ` [Qemu-devel] [PATCH 2/2] block/iscsi: Adding new iSER transport layer option Roy Shterman
@ 2016-10-10 10:03 ` Paolo Bonzini
  2 siblings, 0 replies; 4+ messages in thread
From: Paolo Bonzini @ 2016-10-10 10:03 UTC (permalink / raw)
  To: Roy Shterman, qemu-devel; +Cc: roy.shterman, ronniesahlberg, pl



On 09/10/2016 10:14, Roy Shterman wrote:
> Introducing new transport abstraction, with additional support
> in iSER transport layer. Also adding new zero-copy API that is
> needed in iSER case.
> 
> changes from v1:
> - Adding iser as an additional block driver
> 
> changes from v2:
> - Splitting iser support and new API into two patches
> - Removing option to configure iSER in URI options
> 
> Roy Shterman (2):
>   block/iscsi: Introducing new zero-copy API
>   block/iscsi: Adding new iSER transport layet option
> 
>  block/iscsi.c |   83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 81 insertions(+), 2 deletions(-)
> 

Queued, thanks.

Paolo

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-10-10 10:03 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-09  8:14 [Qemu-devel] [PATCH 0/2] Adding transport abstraction and iSER support Roy Shterman
2016-10-09  8:14 ` [Qemu-devel] [PATCH 1/2] block/iscsi: Introducing new zero-copy API Roy Shterman
2016-10-09  8:14 ` [Qemu-devel] [PATCH 2/2] block/iscsi: Adding new iSER transport layer option Roy Shterman
2016-10-10 10:03 ` [Qemu-devel] [PATCH 0/2] Adding transport abstraction and iSER support Paolo Bonzini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.