Hi, > -----Original Message----- > From: Xie, Huawei > Sent: Thursday, November 13, 2014 6:34 AM > To: dev at 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 at 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