From: "Chen, Jing D" <jing.d.chen@intel.com>
To: "Xie, Huawei" <huawei.xie@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: Fri, 14 Nov 2014 07:24:58 +0000 [thread overview]
Message-ID: <4341B239C0EFF9468EE453F9E9F4604D0161E382@shsmsx102.ccr.corp.intel.com> (raw)
In-Reply-To: <C37D651A908B024F974696C65296B57B0F302965@SHSMSX101.ccr.corp.intel.com>
> -----Original Message-----
> From: Xie, Huawei
> Sent: Friday, November 14, 2014 2:31 PM
> To: Chen, Jing D; dev@dpdk.org
> Subject: RE: [PATCH 1/2] examples/vhost: support new VMDQ API and new
> nic i40e
>
>
>
> > -----Original Message-----
> > From: Chen, Jing D
> > Sent: Wednesday, November 12, 2014 10:58 PM
> > To: Xie, Huawei; dev@dpdk.org
> > Subject: RE: [PATCH 1/2] examples/vhost: support new VMDQ API and
> new nic
> > i40e
> >
> > 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 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);
> > >
> > > if (port >= rte_eth_dev_count()) return -1;
> > >
> > > - rx_rings = (uint16_t)num_queues,
> > > + rx_rings = (uint16_t)dev_info.max_rx_queues;
> >
> > You removed line 'num_queues = dev_info.max_rx_queues' and calculate
> > 'num_queues'
> > with another equation. I assume you thought it may not equals.
> > So, why you assign dev_info.max_rx_queues to rx_rings again? Won't it
> better to
> > use 'num_queues'
>
> Actually they are the same here.
> We use max_rx_queues just to say that we initialize all queues rather than
> part of
> queues.
> If all PMDs(1G,10G,i40e) supports selectively initializing queues, then we
> could only initialize
> num_device queues rather than total queues, even without initializing PF
> 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;
> > > static pthread_t tid;
> > >
> > > /* init EAL */
> > > --
> > > 1.8.1.4
Acked-by : Jing Chen <jing.d.chen@intel.com>
next prev parent reply other threads:[~2014-11-14 7:15 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
2014-11-13 5:58 ` Chen, Jing D
2014-11-14 6:30 ` Xie, Huawei
2014-11-14 7:24 ` Chen, Jing D [this message]
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=4341B239C0EFF9468EE453F9E9F4604D0161E382@shsmsx102.ccr.corp.intel.com \
--to=jing.d.chen@intel.com \
--cc=dev@dpdk.org \
--cc=huawei.xie@intel.com \
/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).