From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <qian.q.xu@intel.com>
Received: from mga04.intel.com (mga04.intel.com [192.55.52.120])
 by dpdk.org (Postfix) with ESMTP id 296B35A38
 for <dev@dpdk.org>; Tue,  6 Sep 2016 11:42:43 +0200 (CEST)
Received: from fmsmga001.fm.intel.com ([10.253.24.23])
 by fmsmga104.fm.intel.com with ESMTP; 06 Sep 2016 02:42:43 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.30,291,1470726000"; d="scan'208";a="1035975056"
Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204])
 by fmsmga001.fm.intel.com with ESMTP; 06 Sep 2016 02:42:42 -0700
Received: from fmsmsx120.amr.corp.intel.com (10.18.124.208) by
 FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS)
 id 14.3.248.2; Tue, 6 Sep 2016 02:42:41 -0700
Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by
 fmsmsx120.amr.corp.intel.com (10.18.124.208) with Microsoft SMTP Server (TLS)
 id 14.3.248.2; Tue, 6 Sep 2016 02:42:41 -0700
Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.109]) by
 SHSMSX103.ccr.corp.intel.com ([169.254.4.102]) with mapi id 14.03.0248.002;
 Tue, 6 Sep 2016 17:42:39 +0800
From: "Xu, Qian Q" <qian.q.xu@intel.com>
To: "Xu, Qian Q" <qian.q.xu@intel.com>, Yuanhan Liu
 <yuanhan.liu@linux.intel.com>, "dev@dpdk.org" <dev@dpdk.org>
CC: Maxime Coquelin <maxime.coquelin@redhat.com>
Thread-Topic: [dpdk-dev] [PATCH 5/6] vhost: add a flag to enable Tx zero copy
Thread-Index: AQHR/RSqS0Xnvff0CkSwP/T2K2rtzaBsP5WQgAALbOA=
Date: Tue, 6 Sep 2016 09:42:38 +0000
Message-ID: <82F45D86ADE5454A95A89742C8D1410E3912C60B@shsmsx102.ccr.corp.intel.com>
References: <1471939839-29778-1-git-send-email-yuanhan.liu@linux.intel.com>
 <1471939839-29778-6-git-send-email-yuanhan.liu@linux.intel.com>
 <82F45D86ADE5454A95A89742C8D1410E3912C500@shsmsx102.ccr.corp.intel.com>
In-Reply-To: <82F45D86ADE5454A95A89742C8D1410E3912C500@shsmsx102.ccr.corp.intel.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [10.239.127.40]
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Subject: Re: [dpdk-dev] [PATCH 5/6] vhost: add a flag to enable Tx zero copy
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Tue, 06 Sep 2016 09:42:43 -0000

Another interesting thing to me is the ZERO-COPY settings. If I have 2 vhos=
t, and 1 is set as
Zero-copy=3D0, and another is set zero-copy=3D1, so the vhost will take it =
as Zero-copy
Enabled for all vhost, or for one vhost. Does the vhost allow such usage? O=
r we need=20
Enforce all vhost zero-copy to be a same number.=20

-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Xu, Qian Q
Sent: Tuesday, September 06, 2016 5:00 PM
To: Yuanhan Liu; dev@dpdk.org
Cc: Maxime Coquelin
Subject: Re: [dpdk-dev] [PATCH 5/6] vhost: add a flag to enable Tx zero cop=
y

Just curious about the naming: vhost USER TX Zero copy. In fact, it's Vhost=
 RX zero-copy
For virtio, it's Virtio TX zero-copy. So, I wonder why we call it as Vhost =
TX ZERO-COPY,=20
Any comments?=20

-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Yuanhan Liu
Sent: Tuesday, August 23, 2016 4:11 PM
To: dev@dpdk.org
Cc: Maxime Coquelin; Yuanhan Liu
Subject: [dpdk-dev] [PATCH 5/6] vhost: add a flag to enable Tx zero copy

Add a new flag ``RTE_VHOST_USER_TX_ZERO_COPY`` to explictily enable
Tx zero copy. If not given, Tx zero copy is disabled by default.

Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
---
 doc/guides/prog_guide/vhost_lib.rst |  7 ++++++-
 lib/librte_vhost/rte_virtio_net.h   |  1 +
 lib/librte_vhost/socket.c           |  5 +++++
 lib/librte_vhost/vhost.c            | 10 ++++++++++
 lib/librte_vhost/vhost.h            |  1 +
 5 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/doc/guides/prog_guide/vhost_lib.rst b/doc/guides/prog_guide/vh=
ost_lib.rst
index 6b0c6b2..15c2bf7 100644
--- a/doc/guides/prog_guide/vhost_lib.rst
+++ b/doc/guides/prog_guide/vhost_lib.rst
@@ -79,7 +79,7 @@ The following is an overview of the Vhost API functions:
   ``/dev/path`` character device file will be created. For vhost-user serv=
er
   mode, a Unix domain socket file ``path`` will be created.
=20
-  Currently two flags are supported (these are valid for vhost-user only):
+  Currently supported flags are (these are valid for vhost-user only):
=20
   - ``RTE_VHOST_USER_CLIENT``
=20
@@ -97,6 +97,11 @@ The following is an overview of the Vhost API functions:
     This reconnect option is enabled by default. However, it can be turned=
 off
     by setting this flag.
=20
+  - ``RTE_VHOST_USER_TX_ZERO_COPY``
+
+    Tx zero copy will be enabled when this flag is set. It is disabled by
+    default.
+
 * ``rte_vhost_driver_session_start()``
=20
   This function starts the vhost session loop to handle vhost messages. It
diff --git a/lib/librte_vhost/rte_virtio_net.h b/lib/librte_vhost/rte_virti=
o_net.h
index 9caa622..5e437c6 100644
--- a/lib/librte_vhost/rte_virtio_net.h
+++ b/lib/librte_vhost/rte_virtio_net.h
@@ -53,6 +53,7 @@
=20
 #define RTE_VHOST_USER_CLIENT		(1ULL << 0)
 #define RTE_VHOST_USER_NO_RECONNECT	(1ULL << 1)
+#define RTE_VHOST_USER_TX_ZERO_COPY	(1ULL << 2)
=20
 /* Enum for virtqueue management. */
 enum {VIRTIO_RXQ, VIRTIO_TXQ, VIRTIO_QNUM};
diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c
index bf03f84..5c3962d 100644
--- a/lib/librte_vhost/socket.c
+++ b/lib/librte_vhost/socket.c
@@ -62,6 +62,7 @@ struct vhost_user_socket {
 	int connfd;
 	bool is_server;
 	bool reconnect;
+	bool tx_zero_copy;
 };
=20
 struct vhost_user_connection {
@@ -203,6 +204,9 @@ vhost_user_add_connection(int fd, struct vhost_user_soc=
ket *vsocket)
 	size =3D strnlen(vsocket->path, PATH_MAX);
 	vhost_set_ifname(vid, vsocket->path, size);
=20
+	if (vsocket->tx_zero_copy)
+		vhost_enable_tx_zero_copy(vid);
+
 	RTE_LOG(INFO, VHOST_CONFIG, "new device, handle is %d\n", vid);
=20
 	vsocket->connfd =3D fd;
@@ -499,6 +503,7 @@ rte_vhost_driver_register(const char *path, uint64_t fl=
ags)
 	memset(vsocket, 0, sizeof(struct vhost_user_socket));
 	vsocket->path =3D strdup(path);
 	vsocket->connfd =3D -1;
+	vsocket->tx_zero_copy =3D flags & RTE_VHOST_USER_TX_ZERO_COPY;
=20
 	if ((flags & RTE_VHOST_USER_CLIENT) !=3D 0) {
 		vsocket->reconnect =3D !(flags & RTE_VHOST_USER_NO_RECONNECT);
diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c
index ab25649..5461e5b 100644
--- a/lib/librte_vhost/vhost.c
+++ b/lib/librte_vhost/vhost.c
@@ -290,6 +290,16 @@ vhost_set_ifname(int vid, const char *if_name, unsigne=
d int if_len)
 	dev->ifname[sizeof(dev->ifname) - 1] =3D '\0';
 }
=20
+void
+vhost_enable_tx_zero_copy(int vid)
+{
+	struct virtio_net *dev =3D get_device(vid);
+
+	if (dev =3D=3D NULL)
+		return;
+
+	dev->tx_zero_copy =3D 1;
+}
=20
 int
 rte_vhost_get_numa_node(int vid)
diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h
index 718133e..3081180 100644
--- a/lib/librte_vhost/vhost.h
+++ b/lib/librte_vhost/vhost.h
@@ -279,6 +279,7 @@ void vhost_destroy_device(int);
 int alloc_vring_queue_pair(struct virtio_net *dev, uint32_t qp_idx);
=20
 void vhost_set_ifname(int, const char *if_name, unsigned int if_len);
+void vhost_enable_tx_zero_copy(int vid);
=20
 /*
  * Backend-specific cleanup. Defined by vhost-cuse and vhost-user.
--=20
1.9.0