DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Xie, Huawei" <huawei.xie@intel.com>
To: "Ouyang, Changchun" <changchun.ouyang@intel.com>,
	"dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH 1/2] examples/vhost: support new VMDQ API and new	nic i40e
Date: Thu, 13 Nov 2014 01:20:09 +0000	[thread overview]
Message-ID: <C37D651A908B024F974696C65296B57B0F30030D@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <F52918179C57134FAEC9EA62FA2F96251189F32D@shsmsx102.ccr.corp.intel.com>



> -----Original Message-----
> From: Ouyang, Changchun
> Sent: Wednesday, November 12, 2014 5:50 PM
> To: Xie, Huawei; dev@dpdk.org
> Cc: Ouyang, Changchun
> Subject: RE: [dpdk-dev] [PATCH 1/2] examples/vhost: support new VMDQ API
> and new nic i40e
> 
> 
> 
> > -----Original Message-----
> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Huawei Xie
> > Sent: Thursday, November 13, 2014 6:34 AM
> > To: dev@dpdk.org
> > Subject: [dpdk-dev] [PATCH 1/2] examples/vhost: support new VMDQ API
> > and new nic i40e
> >
> > In Niantic, if VMDQ mode is set, all queues are allocated to VMDQ in DPDK.
> > In I40E, only configured part of continous queues are allocated to VMDQ.
> > The rte_eth_dev_info structure is extened to provide VMDQ queue base,
> > queue number, and VMDQ pool base information.
> > This patch support the new VMDQ API in vhost example.
> >
> > FIXME in PMD:
> >  * added mac address will be flushed at rte_eth_dev_start.
> >  * we don't support selectively setting up queues well.
> >
> > Signed-off-by: Huawei Xie <huawei.xie@intel.com>
> > ---
> >  examples/vhost/main.c | 25 +++++++++++++++++++------
> >  1 file changed, 19 insertions(+), 6 deletions(-)
> >
> > diff --git a/examples/vhost/main.c b/examples/vhost/main.c index
> > a93f7a0..2b1bf02 100644
> > --- a/examples/vhost/main.c
> > +++ b/examples/vhost/main.c
> > @@ -53,7 +53,7 @@
> >
> >  #include "main.h"
> >
> > -#define MAX_QUEUES 128
> > +#define MAX_QUEUES 256
> >
> >  /* the maximum number of external ports supported */  #define
> > MAX_SUP_PORTS 1 @@ -282,6 +282,9 @@ static struct rte_eth_conf
> > vmdq_conf_default = {  static unsigned lcore_ids[RTE_MAX_LCORE];  static
> > uint8_t ports[RTE_MAX_ETHPORTS];  static unsigned num_ports = 0; /**<
> > The number of ports specified in command line */
> > +static uint16_t num_pf_queues, num_vmdq_queues; static uint16_t
> > +vmdq_pool_base, vmdq_queue_base; static uint16_t queues_per_pool;
> >
> >  static const uint16_t external_pkt_default_vlan_tag = 2000;  const uint16_t
> > vlan_tags[] = { @@ -417,7 +420,6 @@ port_init(uint8_t port)
> >
> >  	/*configure the number of supported virtio devices based on VMDQ
> > limits */
> >  	num_devices = dev_info.max_vmdq_pools;
> > -	num_queues = dev_info.max_rx_queues;
> >
> >  	if (zero_copy) {
> >  		rx_ring_size = num_rx_descriptor;
> > @@ -437,10 +439,19 @@ port_init(uint8_t port)
> >  	retval = get_eth_conf(&port_conf, num_devices);
> >  	if (retval < 0)
> >  		return retval;
> > +	/* NIC queues are divided into pf queues and vmdq queues.  */
> > +	num_pf_queues = dev_info.max_rx_queues -
> > dev_info.vmdq_queue_num;
> > +	queues_per_pool = dev_info.vmdq_queue_num /
> > dev_info.max_vmdq_pools;
> > +	num_vmdq_queues = num_devices * queues_per_pool;
> > +	num_queues = num_pf_queues + num_vmdq_queues;
> > +	vmdq_queue_base = dev_info.vmdq_queue_base;
> > +	vmdq_pool_base  = dev_info.vmdq_pool_base;
> > +	printf("pf queue num: %u, configured vmdq pool num: %u, each
> > vmdq pool has %u queues\n",
> > +		num_pf_queues, num_devices, queues_per_pool);
> >
> 
> Better to use RTE_LOG to replace printf.
> 
> >  	if (port >= rte_eth_dev_count()) return -1;
> >
> > -	rx_rings = (uint16_t)num_queues,
> > +	rx_rings = (uint16_t)dev_info.max_rx_queues;
> >  	/* Configure ethernet device. */
> >  	retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
> >  	if (retval != 0)
> > @@ -931,7 +942,8 @@ link_vmdq(struct vhost_dev *vdev, struct rte_mbuf
> > *m)
> >  		vdev->vlan_tag);
> >
> >  	/* Register the MAC address. */
> > -	ret = rte_eth_dev_mac_addr_add(ports[0], &vdev->mac_address,
> > (uint32_t)dev->device_fh);
> > +	ret = rte_eth_dev_mac_addr_add(ports[0], &vdev->mac_address,
> > +				(uint32_t)dev->device_fh +
> > vmdq_pool_base);
> >  	if (ret)
> >  		RTE_LOG(ERR, VHOST_DATA, "(%"PRIu64") Failed to add
> > device MAC address to VMDQ\n",
> >  					dev->device_fh);
> > @@ -2602,7 +2614,7 @@ new_device (struct virtio_net *dev)
> >  	ll_dev->vdev = vdev;
> >  	add_data_ll_entry(&ll_root_used, ll_dev);
> >  	vdev->vmdq_rx_q
> > -		= dev->device_fh * (num_queues / num_devices);
> > +		= dev->device_fh * queues_per_pool + vmdq_queue_base;
> >
> >  	if (zero_copy) {
> >  		uint32_t index = vdev->vmdq_rx_q;
> > @@ -2837,7 +2849,8 @@ MAIN(int argc, char *argv[])
> >  	unsigned lcore_id, core_id = 0;
> >  	unsigned nb_ports, valid_num_ports;
> >  	int ret;
> > -	uint8_t portid, queue_id = 0;
> > +	uint8_t portid;
> > +	uint16_t queue_id;
> 
> If max queue is 256, and queue_id vary from 0 to 255, then uint8_t is enough to
> denote it.
> Any other consideration here to change it to uint16_t?
queue_id is compared with MAX_QUEUE + 1 which will be always false.
check the patch, I couldn't copy the code to here.
> 
> >  	static pthread_t tid;
> >
> >  	/* init EAL */
> > --
> > 1.8.1.4

  reply	other threads:[~2014-11-13  1:13 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-12 22:34 [dpdk-dev] [PATCH 0/2] examples/vhost: support new VMDQ api and new nic i40e in vhost example Huawei Xie
2014-11-12 22:34 ` [dpdk-dev] [PATCH 1/2] examples/vhost: support new VMDQ API and new nic i40e Huawei Xie
2014-11-13  0:49   ` Ouyang, Changchun
2014-11-13  1:20     ` Xie, Huawei [this message]
2014-11-13  5:58   ` Chen, Jing D
2014-11-14  6:30     ` Xie, Huawei
2014-11-14  7:24       ` Chen, Jing D
2014-11-12 22:34 ` [dpdk-dev] [PATCH 2/2] examples/vhost: use factorized default Rx/Tx configuration Huawei Xie
2014-11-13  6:02   ` Chen, Jing D
2014-11-14  2:17     ` Xie, Huawei
2014-11-12 22:52 ` [dpdk-dev] [PATCH 0/2] examples/vhost: support new VMDQ api and new nic i40e in vhost example Xie, Huawei
2014-12-06 10:16   ` Thomas Monjalon
2014-12-05 10:51 ` Fu, JingguoX

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=C37D651A908B024F974696C65296B57B0F30030D@SHSMSX101.ccr.corp.intel.com \
    --to=huawei.xie@intel.com \
    --cc=changchun.ouyang@intel.com \
    --cc=dev@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).