diff mbox

[dpdk-dev,2/2] examples/vhost: use factorized default Rx/Tx configuration

Message ID 1415831647-11139-3-git-send-email-huawei.xie@intel.com (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Huawei Xie Nov. 12, 2014, 10:34 p.m. UTC
Refer to Pablo's commit:
    "use factorized default Rx/Tx configuration

    For apps that were using default rte_eth_rxconf and rte_eth_txconf
    structures, these have been removed and now they are obtained by
    calling rte_eth_dev_info_get, just before setting up RX/TX queues."

move zero copy's deferred start set up ahead.

Signed-off-by: Huawei Xie <huawei.xie@intel.com>
---
 examples/vhost/main.c | 78 +++++++++++++++------------------------------------
 1 file changed, 22 insertions(+), 56 deletions(-)

Comments

Chen, Jing D Nov. 13, 2014, 6:02 a.m. UTC | #1
Hi,

> -----Original Message-----
> From: Xie, Huawei
> Sent: Thursday, November 13, 2014 6:34 AM
> To: dev@dpdk.org
> Cc: Chen, Jing D; Xie, Huawei
> Subject: [PATCH 2/2] examples/vhost: use factorized default Rx/Tx
> configuration
> 
> Refer to Pablo's commit:
>     "use factorized default Rx/Tx configuration
> 
>     For apps that were using default rte_eth_rxconf and rte_eth_txconf
>     structures, these have been removed and now they are obtained by
>     calling rte_eth_dev_info_get, just before setting up RX/TX queues."
> 
> move zero copy's deferred start set up ahead.
> 
> Signed-off-by: Huawei Xie <huawei.xie@intel.com>
> ---
>  examples/vhost/main.c | 78 +++++++++++++++----------------------------------
> --
>  1 file changed, 22 insertions(+), 56 deletions(-)
> 
> diff --git a/examples/vhost/main.c b/examples/vhost/main.c
> index 2b1bf02..fa36913 100644
> --- a/examples/vhost/main.c
> +++ b/examples/vhost/main.c
> @@ -79,25 +79,6 @@
>  	+ RTE_PKTMBUF_HEADROOM)
>  #define MBUF_CACHE_SIZE_ZCP 0
> 
> -/*
> - * RX and TX Prefetch, Host, and Write-back threshold values should be
> - * carefully set for optimal performance. Consult the network
> - * controller's datasheet and supporting DPDK documentation for guidance
> - * on how these parameters should be set.
> - */
> -#define RX_PTHRESH 8 /* Default values of RX prefetch threshold reg. */
> -#define RX_HTHRESH 8 /* Default values of RX host threshold reg. */
> -#define RX_WTHRESH 4 /* Default values of RX write-back threshold reg. */
> -
> -/*
> - * These default values are optimized for use with the Intel(R) 82599 10 GbE
> - * Controller and the DPDK ixgbe PMD. Consider using other values for other
> - * network controllers and/or network drivers.
> - */
> -#define TX_PTHRESH 36 /* Default values of TX prefetch threshold reg. */
> -#define TX_HTHRESH 0  /* Default values of TX host threshold reg. */
> -#define TX_WTHRESH 0  /* Default values of TX write-back threshold reg. */
> -
>  #define MAX_PKT_BURST 32 		/* Max burst size for RX/TX */
>  #define BURST_TX_DRAIN_US 100 	/* TX drain every ~100us */
> 
> @@ -217,32 +198,6 @@ static uint32_t burst_rx_retry_num =
> BURST_RX_RETRIES;
>  /* Character device basename. Can be set by user. */
>  static char dev_basename[MAX_BASENAME_SZ] = "vhost-net";
> 
> -
> -/* Default configuration for rx and tx thresholds etc. */
> -static struct rte_eth_rxconf rx_conf_default = {
> -	.rx_thresh = {
> -		.pthresh = RX_PTHRESH,
> -		.hthresh = RX_HTHRESH,
> -		.wthresh = RX_WTHRESH,
> -	},
> -	.rx_drop_en = 1,
> -};
> -
> -/*
> - * These default values are optimized for use with the Intel(R) 82599 10 GbE
> - * Controller and the DPDK ixgbe/igb PMD. Consider using other values for
> other
> - * network controllers and/or network drivers.
> - */
> -static struct rte_eth_txconf tx_conf_default = {
> -	.tx_thresh = {
> -		.pthresh = TX_PTHRESH,
> -		.hthresh = TX_HTHRESH,
> -		.wthresh = TX_WTHRESH,
> -	},
> -	.tx_free_thresh = 0, /* Use PMD default values */
> -	.tx_rs_thresh = 0, /* Use PMD default values */
> -};
> -
>  /* empty vmdq configuration structure. Filled in programatically */
>  static struct rte_eth_conf vmdq_conf_default = {
>  	.rxmode = {
> @@ -410,7 +365,9 @@ port_init(uint8_t port)
>  {
>  	struct rte_eth_dev_info dev_info;
>  	struct rte_eth_conf port_conf;
> -	uint16_t rx_rings, tx_rings;
> +	struct rte_eth_rxconf *rxconf;
> +	struct rte_eth_txconf *txconf;
> +	int16_t rx_rings, tx_rings;
>  	uint16_t rx_ring_size, tx_ring_size;
>  	int retval;
>  	uint16_t q;
> @@ -418,6 +375,21 @@ port_init(uint8_t port)
>  	/* The max pool number from dev_info will be used to validate the
> pool number specified in cmd line */
>  	rte_eth_dev_info_get (port, &dev_info);
> 
> +	rxconf = &dev_info.default_rxconf;
> +	txconf = &dev_info.default_txconf;
> +	rxconf->rx_drop_en = 1;
> +
> +	/*
> +	 * Zero copy defers queue RX/TX start to the time when guest
> +	 * finishes its startup and packet buffers from that guest are
> +	 * available.
> +	 */
> +	if (zero_copy) {
> +		rxconf->rx_deferred_start = 1;
> +		rxconf->rx_drop_en = 0;
> +		txconf->tx_deferred_start = 1;
> +	}
> +

May I know why 'rx_drop_en' is cleared after 'zero_copy' set?

>  	/*configure the number of supported virtio devices based on VMDQ
> limits */
>  	num_devices = dev_info.max_vmdq_pools;
> 
> @@ -460,14 +432,16 @@ port_init(uint8_t port)
>  	/* Setup the queues. */
>  	for (q = 0; q < rx_rings; q ++) {
>  		retval = rte_eth_rx_queue_setup(port, q, rx_ring_size,
> -						rte_eth_dev_socket_id(port),
> &rx_conf_default,
> +						rte_eth_dev_socket_id(port),
> +						rxconf,
>  						vpool_array[q].pool);
>  		if (retval < 0)
>  			return retval;
>  	}
>  	for (q = 0; q < tx_rings; q ++) {
>  		retval = rte_eth_tx_queue_setup(port, q, tx_ring_size,
> -						rte_eth_dev_socket_id(port),
> &tx_conf_default);
> +						rte_eth_dev_socket_id(port),
> +						txconf);
>  		if (retval < 0)
>  			return retval;
>  	}
> @@ -2920,14 +2894,6 @@ MAIN(int argc, char *argv[])
>  		char pool_name[RTE_MEMPOOL_NAMESIZE];
>  		char ring_name[RTE_MEMPOOL_NAMESIZE];
> 
> -		/*
> -		 * Zero copy defers queue RX/TX start to the time when
> guest
> -		 * finishes its startup and packet buffers from that guest are
> -		 * available.
> -		 */
> -		rx_conf_default.rx_deferred_start = (uint8_t)zero_copy;
> -		rx_conf_default.rx_drop_en = 0;
> -		tx_conf_default.tx_deferred_start = (uint8_t)zero_copy;
>  		nb_mbuf = num_rx_descriptor
>  			+ num_switching_cores * MBUF_CACHE_SIZE_ZCP
>  			+ num_switching_cores * MAX_PKT_BURST;
> --
> 1.8.1.4
Huawei Xie Nov. 14, 2014, 2:17 a.m. UTC | #2
> -----Original Message-----
> From: Chen, Jing D
> Sent: Wednesday, November 12, 2014 11:02 PM
> To: Xie, Huawei; dev@dpdk.org
> Subject: RE: [PATCH 2/2] examples/vhost: use factorized default Rx/Tx
> configuration
> 
> Hi,
> 
> > -----Original Message-----
> > From: Xie, Huawei
> > Sent: Thursday, November 13, 2014 6:34 AM
> > To: dev@dpdk.org
> > Cc: Chen, Jing D; Xie, Huawei
> > Subject: [PATCH 2/2] examples/vhost: use factorized default Rx/Tx
> > configuration
> >
> > Refer to Pablo's commit:
> >     "use factorized default Rx/Tx configuration
> >
> >     For apps that were using default rte_eth_rxconf and rte_eth_txconf
> >     structures, these have been removed and now they are obtained by
> >     calling rte_eth_dev_info_get, just before setting up RX/TX queues."
> >
> > move zero copy's deferred start set up ahead.
> >
> > Signed-off-by: Huawei Xie <huawei.xie@intel.com>
> > ---
> >  examples/vhost/main.c | 78 +++++++++++++++----------------------------------
> > --
> >  1 file changed, 22 insertions(+), 56 deletions(-)
> >
> > diff --git a/examples/vhost/main.c b/examples/vhost/main.c
> > index 2b1bf02..fa36913 100644
> > --- a/examples/vhost/main.c
> > +++ b/examples/vhost/main.c
> > @@ -79,25 +79,6 @@
> >  	+ RTE_PKTMBUF_HEADROOM)
> >  #define MBUF_CACHE_SIZE_ZCP 0
> >
> > -/*
> > - * RX and TX Prefetch, Host, and Write-back threshold values should be
> > - * carefully set for optimal performance. Consult the network
> > - * controller's datasheet and supporting DPDK documentation for guidance
> > - * on how these parameters should be set.
> > - */
> > -#define RX_PTHRESH 8 /* Default values of RX prefetch threshold reg. */
> > -#define RX_HTHRESH 8 /* Default values of RX host threshold reg. */
> > -#define RX_WTHRESH 4 /* Default values of RX write-back threshold reg. */
> > -
> > -/*
> > - * These default values are optimized for use with the Intel(R) 82599 10 GbE
> > - * Controller and the DPDK ixgbe PMD. Consider using other values for other
> > - * network controllers and/or network drivers.
> > - */
> > -#define TX_PTHRESH 36 /* Default values of TX prefetch threshold reg. */
> > -#define TX_HTHRESH 0  /* Default values of TX host threshold reg. */
> > -#define TX_WTHRESH 0  /* Default values of TX write-back threshold reg. */
> > -
> >  #define MAX_PKT_BURST 32 		/* Max burst size for RX/TX */
> >  #define BURST_TX_DRAIN_US 100 	/* TX drain every ~100us */
> >
> > @@ -217,32 +198,6 @@ static uint32_t burst_rx_retry_num =
> > BURST_RX_RETRIES;
> >  /* Character device basename. Can be set by user. */
> >  static char dev_basename[MAX_BASENAME_SZ] = "vhost-net";
> >
> > -
> > -/* Default configuration for rx and tx thresholds etc. */
> > -static struct rte_eth_rxconf rx_conf_default = {
> > -	.rx_thresh = {
> > -		.pthresh = RX_PTHRESH,
> > -		.hthresh = RX_HTHRESH,
> > -		.wthresh = RX_WTHRESH,
> > -	},
> > -	.rx_drop_en = 1,
> > -};
> > -
> > -/*
> > - * These default values are optimized for use with the Intel(R) 82599 10 GbE
> > - * Controller and the DPDK ixgbe/igb PMD. Consider using other values for
> > other
> > - * network controllers and/or network drivers.
> > - */
> > -static struct rte_eth_txconf tx_conf_default = {
> > -	.tx_thresh = {
> > -		.pthresh = TX_PTHRESH,
> > -		.hthresh = TX_HTHRESH,
> > -		.wthresh = TX_WTHRESH,
> > -	},
> > -	.tx_free_thresh = 0, /* Use PMD default values */
> > -	.tx_rs_thresh = 0, /* Use PMD default values */
> > -};
> > -
> >  /* empty vmdq configuration structure. Filled in programatically */
> >  static struct rte_eth_conf vmdq_conf_default = {
> >  	.rxmode = {
> > @@ -410,7 +365,9 @@ port_init(uint8_t port)
> >  {
> >  	struct rte_eth_dev_info dev_info;
> >  	struct rte_eth_conf port_conf;
> > -	uint16_t rx_rings, tx_rings;
> > +	struct rte_eth_rxconf *rxconf;
> > +	struct rte_eth_txconf *txconf;
> > +	int16_t rx_rings, tx_rings;
> >  	uint16_t rx_ring_size, tx_ring_size;
> >  	int retval;
> >  	uint16_t q;
> > @@ -418,6 +375,21 @@ port_init(uint8_t port)
> >  	/* The max pool number from dev_info will be used to validate the
> > pool number specified in cmd line */
> >  	rte_eth_dev_info_get (port, &dev_info);
> >
> > +	rxconf = &dev_info.default_rxconf;
> > +	txconf = &dev_info.default_txconf;
> > +	rxconf->rx_drop_en = 1;
> > +
> > +	/*
> > +	 * Zero copy defers queue RX/TX start to the time when guest
> > +	 * finishes its startup and packet buffers from that guest are
> > +	 * available.
> > +	 */
> > +	if (zero_copy) {
> > +		rxconf->rx_deferred_start = 1;
> > +		rxconf->rx_drop_en = 0;
> > +		txconf->tx_deferred_start = 1;
> > +	}
> > +
> 
> May I know why 'rx_drop_en' is cleared after 'zero_copy' set?
:), first of all, this is not related to this patch. This patch inheritate old rx_drop_en behavior, and  apply pablo's change.
Secondly, this is due to rx ring in zero copy case has very limited descriptor number. Clearing this setting will cache the packets
when there are not enough descriptors
> 
> >  	/*configure the number of supported virtio devices based on VMDQ
> > limits */
> >  	num_devices = dev_info.max_vmdq_pools;
> >
> > @@ -460,14 +432,16 @@ port_init(uint8_t port)
> >  	/* Setup the queues. */
> >  	for (q = 0; q < rx_rings; q ++) {
> >  		retval = rte_eth_rx_queue_setup(port, q, rx_ring_size,
> > -						rte_eth_dev_socket_id(port),
> > &rx_conf_default,
> > +						rte_eth_dev_socket_id(port),
> > +						rxconf,
> >  						vpool_array[q].pool);
> >  		if (retval < 0)
> >  			return retval;
> >  	}
> >  	for (q = 0; q < tx_rings; q ++) {
> >  		retval = rte_eth_tx_queue_setup(port, q, tx_ring_size,
> > -						rte_eth_dev_socket_id(port),
> > &tx_conf_default);
> > +						rte_eth_dev_socket_id(port),
> > +						txconf);
> >  		if (retval < 0)
> >  			return retval;
> >  	}
> > @@ -2920,14 +2894,6 @@ MAIN(int argc, char *argv[])
> >  		char pool_name[RTE_MEMPOOL_NAMESIZE];
> >  		char ring_name[RTE_MEMPOOL_NAMESIZE];
> >
> > -		/*
> > -		 * Zero copy defers queue RX/TX start to the time when
> > guest
> > -		 * finishes its startup and packet buffers from that guest are
> > -		 * available.
> > -		 */
> > -		rx_conf_default.rx_deferred_start = (uint8_t)zero_copy;
> > -		rx_conf_default.rx_drop_en = 0;
> > -		tx_conf_default.tx_deferred_start = (uint8_t)zero_copy;
> >  		nb_mbuf = num_rx_descriptor
> >  			+ num_switching_cores * MBUF_CACHE_SIZE_ZCP
> >  			+ num_switching_cores * MAX_PKT_BURST;
> > --
> > 1.8.1.4
diff mbox

Patch

diff --git a/examples/vhost/main.c b/examples/vhost/main.c
index 2b1bf02..fa36913 100644
--- a/examples/vhost/main.c
+++ b/examples/vhost/main.c
@@ -79,25 +79,6 @@ 
 	+ RTE_PKTMBUF_HEADROOM)
 #define MBUF_CACHE_SIZE_ZCP 0
 
-/*
- * RX and TX Prefetch, Host, and Write-back threshold values should be
- * carefully set for optimal performance. Consult the network
- * controller's datasheet and supporting DPDK documentation for guidance
- * on how these parameters should be set.
- */
-#define RX_PTHRESH 8 /* Default values of RX prefetch threshold reg. */
-#define RX_HTHRESH 8 /* Default values of RX host threshold reg. */
-#define RX_WTHRESH 4 /* Default values of RX write-back threshold reg. */
-
-/*
- * These default values are optimized for use with the Intel(R) 82599 10 GbE
- * Controller and the DPDK ixgbe PMD. Consider using other values for other
- * network controllers and/or network drivers.
- */
-#define TX_PTHRESH 36 /* Default values of TX prefetch threshold reg. */
-#define TX_HTHRESH 0  /* Default values of TX host threshold reg. */
-#define TX_WTHRESH 0  /* Default values of TX write-back threshold reg. */
-
 #define MAX_PKT_BURST 32 		/* Max burst size for RX/TX */
 #define BURST_TX_DRAIN_US 100 	/* TX drain every ~100us */
 
@@ -217,32 +198,6 @@  static uint32_t burst_rx_retry_num = BURST_RX_RETRIES;
 /* Character device basename. Can be set by user. */
 static char dev_basename[MAX_BASENAME_SZ] = "vhost-net";
 
-
-/* Default configuration for rx and tx thresholds etc. */
-static struct rte_eth_rxconf rx_conf_default = {
-	.rx_thresh = {
-		.pthresh = RX_PTHRESH,
-		.hthresh = RX_HTHRESH,
-		.wthresh = RX_WTHRESH,
-	},
-	.rx_drop_en = 1,
-};
-
-/*
- * These default values are optimized for use with the Intel(R) 82599 10 GbE
- * Controller and the DPDK ixgbe/igb PMD. Consider using other values for other
- * network controllers and/or network drivers.
- */
-static struct rte_eth_txconf tx_conf_default = {
-	.tx_thresh = {
-		.pthresh = TX_PTHRESH,
-		.hthresh = TX_HTHRESH,
-		.wthresh = TX_WTHRESH,
-	},
-	.tx_free_thresh = 0, /* Use PMD default values */
-	.tx_rs_thresh = 0, /* Use PMD default values */
-};
-
 /* empty vmdq configuration structure. Filled in programatically */
 static struct rte_eth_conf vmdq_conf_default = {
 	.rxmode = {
@@ -410,7 +365,9 @@  port_init(uint8_t port)
 {
 	struct rte_eth_dev_info dev_info;
 	struct rte_eth_conf port_conf;
-	uint16_t rx_rings, tx_rings;
+	struct rte_eth_rxconf *rxconf;
+	struct rte_eth_txconf *txconf;
+	int16_t rx_rings, tx_rings;
 	uint16_t rx_ring_size, tx_ring_size;
 	int retval;
 	uint16_t q;
@@ -418,6 +375,21 @@  port_init(uint8_t port)
 	/* The max pool number from dev_info will be used to validate the pool number specified in cmd line */
 	rte_eth_dev_info_get (port, &dev_info);
 
+	rxconf = &dev_info.default_rxconf;
+	txconf = &dev_info.default_txconf;
+	rxconf->rx_drop_en = 1;
+
+	/*
+	 * Zero copy defers queue RX/TX start to the time when guest
+	 * finishes its startup and packet buffers from that guest are
+	 * available.
+	 */
+	if (zero_copy) {
+		rxconf->rx_deferred_start = 1;
+		rxconf->rx_drop_en = 0;
+		txconf->tx_deferred_start = 1;
+	}
+
 	/*configure the number of supported virtio devices based on VMDQ limits */
 	num_devices = dev_info.max_vmdq_pools;
 
@@ -460,14 +432,16 @@  port_init(uint8_t port)
 	/* Setup the queues. */
 	for (q = 0; q < rx_rings; q ++) {
 		retval = rte_eth_rx_queue_setup(port, q, rx_ring_size,
-						rte_eth_dev_socket_id(port), &rx_conf_default,
+						rte_eth_dev_socket_id(port),
+						rxconf,
 						vpool_array[q].pool);
 		if (retval < 0)
 			return retval;
 	}
 	for (q = 0; q < tx_rings; q ++) {
 		retval = rte_eth_tx_queue_setup(port, q, tx_ring_size,
-						rte_eth_dev_socket_id(port), &tx_conf_default);
+						rte_eth_dev_socket_id(port),
+						txconf);
 		if (retval < 0)
 			return retval;
 	}
@@ -2920,14 +2894,6 @@  MAIN(int argc, char *argv[])
 		char pool_name[RTE_MEMPOOL_NAMESIZE];
 		char ring_name[RTE_MEMPOOL_NAMESIZE];
 
-		/*
-		 * Zero copy defers queue RX/TX start to the time when guest
-		 * finishes its startup and packet buffers from that guest are
-		 * available.
-		 */
-		rx_conf_default.rx_deferred_start = (uint8_t)zero_copy;
-		rx_conf_default.rx_drop_en = 0;
-		tx_conf_default.tx_deferred_start = (uint8_t)zero_copy;
 		nb_mbuf = num_rx_descriptor
 			+ num_switching_cores * MBUF_CACHE_SIZE_ZCP
 			+ num_switching_cores * MAX_PKT_BURST;