From: Andrew Rybchenko <arybchenko@solarflare.com> To: Slava Ovsiienko <viacheslavo@nvidia.com>, "dev@dpdk.org" <dev@dpdk.org> Cc: Thomas Monjalon <thomasm@mellanox.com>, "stephen@networkplumber.org" <stephen@networkplumber.org>, "ferruh.yigit@intel.com" <ferruh.yigit@intel.com>, Shahaf Shuler <shahafs@nvidia.com>, "olivier.matz@6wind.com" <olivier.matz@6wind.com>, "jerinjacobk@gmail.com" <jerinjacobk@gmail.com>, "maxime.coquelin@redhat.com" <maxime.coquelin@redhat.com>, "david.marchand@redhat.com" <david.marchand@redhat.com>, Asaf Penso <asafp@nvidia.com> Subject: Re: [dpdk-dev] [RFC] ethdev: introduce Rx buffer split Date: Thu, 17 Sep 2020 19:55:07 +0300 Message-ID: <1870d31a-0ec1-4198-fcee-03646c009458@solarflare.com> (raw) In-Reply-To: <MWHPR12MB136076E652230CEBD6EE6562DF5F0@MWHPR12MB1360.namprd12.prod.outlook.com> On 8/17/20 8:49 PM, Slava Ovsiienko wrote: >>From 7f7052d8b85ff3ff7011bd844b6d3169c6e51923 Mon Sep 17 00:00:00 2001 > From: Viacheslav Ovsiienko <viacheslavo@nvidia.com> > Date: Mon, 17 Aug 2020 16:57:43 +0000 > Subject: [RFC] ethdev: introduce Rx buffer split > > The DPDK datapath in the transmit direction is very flexible. > An application can build the multisegment packet and manages > almost all data aspects - the memory pools where segments > are allocated from, the segment lengths, the memory attributes > like external buffers, registered for DMA, etc. > > In the receiving direction, the datapath is much less flexible, > an application can only specify the memory pool to configure the > receiving queue and nothing more. In order to extend receiving > datapath capabilities it is proposed to add the way to provide > extended infoirmation how to split the packets being received. infoirmation -> information > > The following structure is introduced to specify the Rx packet > segment: > > struct rte_eth_rxseg { > struct rte_mempool *mp; /* memory pools to allocate segment from */ > uint16_t length; /* segment maximal data length */ > uint16_t offset; /* data offset from beginning of mbuf data buffer */ > uint32_t reserved; /* reserved field */ > }; > > The new routine rte_eth_rx_queue_setup_ex() is introduced to > setup the given Rx queue using the new extended Rx packet segment > description: > > int > rte_eth_rx_queue_setup_ex(uint16_t port_id, uint16_t rx_queue_id, > uint16_t nb_rx_desc, unsigned int socket_id, > const struct rte_eth_rxconf *rx_conf, > const struct rte_eth_rxseg *rx_seg, > uint16_t n_seg) > > This routine presents the two new parameters: > rx_seg - pointer the array of segment descriptions, each element > describes the memory pool, maximal data length, initial > data offset from the beginning of data buffer in mbuf > n_seg - number of elements in the array > > The new offload flag DEV_RX_OFFLOAD_BUFFER_SPLIT in device > capabilities is introduced to present the way for PMD to report to > application about supporting Rx packet split to configurable > segments. Prior invoking the rte_eth_rx_queue_setup_ex() routine > application should check DEV_RX_OFFLOAD_BUFFER_SPLIT flag. > > If the Rx queue is configured with new routine the packets being > received will be split into multiple segments pushed to the mbufs > with specified attributes. The PMD will allocate the first mbuf > from the pool specified in the first segment descriptor and puts > the data staring at specified offeset in the allocated mbuf data offeset -> offset > buffer. If packet length exceeds the specified segment length > the next mbuf will be allocated according to the next segment > descriptor (if any) and data will be put in its data buffer at > specified offset and not exceeding specified length. If there is > no next descriptor the next mbuf will be allocated and filled in the > same way (from the same pool and with the same buffer offset/length) > as the current one. > > For example, let's suppose we configured the Rx queue with the > following segments: > seg0 - pool0, len0=14B, off0=RTE_PKTMBUF_HEADROOM > seg1 - pool1, len1=20B, off1=0B > seg2 - pool2, len2=20B, off2=0B > seg3 - pool3, len3=512B, off3=0B > > The packet 46 bytes long will look like the following: > seg0 - 14B long @ RTE_PKTMBUF_HEADROOM in mbuf from pool0 > seg1 - 20B long @ 0 in mbuf from pool1 > seg2 - 12B long @ 0 in mbuf from pool2 > > The packet 1500 bytes long will look like the following: > seg0 - 14B @ RTE_PKTMBUF_HEADROOM in mbuf from pool0 > seg1 - 20B @ 0 in mbuf from pool1 > seg2 - 20B @ 0 in mbuf from pool2 > seg3 - 512B @ 0 in mbuf from pool3 > seg4 - 512B @ 0 in mbuf from pool3 > seg5 - 422B @ 0 in mbuf from pool3 The behaviour is logical, but what to do if HW can't do it, i.e. use the last segment many times. Should it reject configuration if provided segments are insufficient to fit MTU packet? How to report the limitation? (I'm still trying to convince that SCATTER and BUFFER_SPLIT should be independent). > > The offload DEV_RX_OFFLOAD_SCATTER must be present and > configured to support new buffer spllit feature (if n_seg spllit -> split > is greater than one). > > The new approach would allow splitting the ingress packets into > multiple parts pushed to the memory with different attributes. > For example, the packet headers can be pushed to the embedded > data buffers within mbufs and the application data into > the external buffers attached to mbufs allocated from the > different memory pools. The memory attributes for the split > parts may differ either - for example the application data > may be pushed into the external memory located on the dedicated > physical device, say GPU or NVMe. This would improve the DPDK > receiving datapath flexibility with preserving compatibility > with existing API. > > Also, the proposed segment description might be used to specify > Rx packet split for some other features. For example, provide > the way to specify the extra memory pool for the Header Split > feature of some Intel PMD. > > Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com> > --- > lib/librte_ethdev/rte_ethdev.c | 166 ++++++++++++++++++++++++++++++++++++ > lib/librte_ethdev/rte_ethdev.h | 15 ++++ > lib/librte_ethdev/rte_ethdev_core.h | 10 +++ > 3 files changed, 191 insertions(+) > > diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c > index 7858ad5..638e42d 100644 > --- a/lib/librte_ethdev/rte_ethdev.c > +++ b/lib/librte_ethdev/rte_ethdev.c > @@ -1933,6 +1933,172 @@ struct rte_eth_dev * > } > > int > +rte_eth_rx_queue_setup_ex(uint16_t port_id, uint16_t rx_queue_id, > + uint16_t nb_rx_desc, unsigned int socket_id, > + const struct rte_eth_rxconf *rx_conf, > + const struct rte_eth_rxseg *rx_seg, uint16_t n_seg) > +{ > + int ret; > + uint16_t seg_idx; > + uint32_t mbp_buf_size; > + struct rte_eth_dev *dev; > + struct rte_eth_dev_info dev_info; > + struct rte_eth_rxconf local_conf; > + void **rxq; > + > + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL); > + > + dev = &rte_eth_devices[port_id]; > + if (rx_queue_id >= dev->data->nb_rx_queues) { > + RTE_ETHDEV_LOG(ERR, "Invalid RX queue_id=%u\n", rx_queue_id); > + return -EINVAL; > + } > + > + if (rx_seg == NULL) { > + RTE_ETHDEV_LOG(ERR, "Invalid null description pointer\n"); > + return -EINVAL; > + } > + > + if (n_seg == 0) { > + RTE_ETHDEV_LOG(ERR, "Invalid zero description number\n"); > + return -EINVAL; > + } > + > + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_setup_ex, -ENOTSUP); > + > + /* > + * Check the size of the mbuf data buffer. > + * This value must be provided in the private data of the memory pool. > + * First check that the memory pool has a valid private data. > + */ > + ret = rte_eth_dev_info_get(port_id, &dev_info); > + if (ret != 0) > + return ret; > + > + for (seg_idx = 0; seg_idx < n_seg; seg_idx++) { > + struct rte_mempool *mp = rx_seg[seg_idx].mp; > + > + if (mp->private_data_size < sizeof(struct rte_pktmbuf_pool_private)) { > + RTE_ETHDEV_LOG(ERR, "%s private_data_size %d < %d\n", > + mp->name, (int)mp->private_data_size, > + (int)sizeof(struct rte_pktmbuf_pool_private)); > + return -ENOSPC; > + } > + > + mbp_buf_size = rte_pktmbuf_data_room_size(mp); > + if (mbp_buf_size < rx_seg[seg_idx].length + rx_seg[seg_idx].offset) { > + RTE_ETHDEV_LOG(ERR, > + "%s mbuf_data_room_size %d < %d" > + " (segment length=%d + segment offset=%d)\n", > + mp->name, (int)mbp_buf_size, > + (int)(rx_seg[seg_idx].length + rx_seg[seg_idx].offset), > + (int)rx_seg[seg_idx].length, > + (int)rx_seg[seg_idx].offset); > + return -EINVAL; > + } > + } > + > + /* Use default specified by driver, if nb_rx_desc is zero */ > + if (nb_rx_desc == 0) { > + nb_rx_desc = dev_info.default_rxportconf.ring_size; > + /* If driver default is also zero, fall back on EAL default */ > + if (nb_rx_desc == 0) > + nb_rx_desc = RTE_ETH_DEV_FALLBACK_RX_RINGSIZE; > + } > + > + if (nb_rx_desc > dev_info.rx_desc_lim.nb_max || > + nb_rx_desc < dev_info.rx_desc_lim.nb_min || > + nb_rx_desc % dev_info.rx_desc_lim.nb_align != 0) { > + > + RTE_ETHDEV_LOG(ERR, > + "Invalid value for nb_rx_desc(=%hu), should be: <= %hu, >= %hu, and a product of %hu\n", > + nb_rx_desc, dev_info.rx_desc_lim.nb_max, > + dev_info.rx_desc_lim.nb_min, > + dev_info.rx_desc_lim.nb_align); > + return -EINVAL; > + } > + > + if (dev->data->dev_started && > + !(dev_info.dev_capa & > + RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP)) > + return -EBUSY; > + > + if (dev->data->dev_started && > + (dev->data->rx_queue_state[rx_queue_id] != > + RTE_ETH_QUEUE_STATE_STOPPED)) > + return -EBUSY; > + > + rxq = dev->data->rx_queues; > + if (rxq[rx_queue_id]) { > + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_release, > + -ENOTSUP); > + (*dev->dev_ops->rx_queue_release)(rxq[rx_queue_id]); > + rxq[rx_queue_id] = NULL; > + } > + > + if (rx_conf == NULL) > + rx_conf = &dev_info.default_rxconf; > + > + local_conf = *rx_conf; > + > + /* > + * If an offloading has already been enabled in > + * rte_eth_dev_configure(), it has been enabled on all queues, > + * so there is no need to enable it in this queue again. > + * The local_conf.offloads input to underlying PMD only carries > + * those offloadings which are only enabled on this queue and > + * not enabled on all queues. > + */ > + local_conf.offloads &= ~dev->data->dev_conf.rxmode.offloads; > + > + /* > + * New added offloadings for this queue are those not enabled in > + * rte_eth_dev_configure() and they must be per-queue type. > + * A pure per-port offloading can't be enabled on a queue while > + * disabled on another queue. A pure per-port offloading can't > + * be enabled for any queue as new added one if it hasn't been > + * enabled in rte_eth_dev_configure(). > + */ > + if ((local_conf.offloads & dev_info.rx_queue_offload_capa) != > + local_conf.offloads) { > + RTE_ETHDEV_LOG(ERR, > + "Ethdev port_id=%d rx_queue_id=%d, new added offloads 0x%"PRIx64" must be " > + "within per-queue offload capabilities 0x%"PRIx64" in %s()\n", > + port_id, rx_queue_id, local_conf.offloads, > + dev_info.rx_queue_offload_capa, > + __func__); > + return -EINVAL; > + } > + > + /* > + * If LRO is enabled, check that the maximum aggregated packet > + * size is supported by the configured device. > + */ > + if (local_conf.offloads & DEV_RX_OFFLOAD_TCP_LRO) { > + if (dev->data->dev_conf.rxmode.max_lro_pkt_size == 0) > + dev->data->dev_conf.rxmode.max_lro_pkt_size = > + dev->data->dev_conf.rxmode.max_rx_pkt_len; > + int ret = check_lro_pkt_size(port_id, > + dev->data->dev_conf.rxmode.max_lro_pkt_size, > + dev->data->dev_conf.rxmode.max_rx_pkt_len, > + dev_info.max_lro_pkt_size); > + if (ret != 0) > + return ret; > + } > + > + ret = (*dev->dev_ops->rx_queue_setup_ex)(dev, rx_queue_id, nb_rx_desc, > + socket_id, &local_conf, > + rx_seg, n_seg); > + if (!ret) { > + if (!dev->data->min_rx_buf_size || > + dev->data->min_rx_buf_size > mbp_buf_size) > + dev->data->min_rx_buf_size = mbp_buf_size; > + } > + > + return eth_err(port_id, ret); > +} > + > +int > rte_eth_rx_hairpin_queue_setup(uint16_t port_id, uint16_t rx_queue_id, > uint16_t nb_rx_desc, > const struct rte_eth_hairpin_conf *conf) I dislike the idea to introduce new device operation. rte_eth_rxconf has reserved space and BUFFER_SPLIT offload will mean that PMD looks at the split configuration location there. Above duplication is simply not acceptable, but even if we factor our shared code into helper function, I still see no point to introduce new device operation. [snip]
next prev parent reply other threads:[~2020-09-17 16:55 UTC|newest] Thread overview: 172+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-08-17 17:49 Slava Ovsiienko 2020-09-17 16:55 ` Andrew Rybchenko [this message] 2020-10-01 8:54 ` Slava Ovsiienko 2020-10-12 8:45 ` Andrew Rybchenko 2020-10-12 9:56 ` Slava Ovsiienko 2020-10-12 15:14 ` Thomas Monjalon 2020-10-12 15:28 ` Ananyev, Konstantin 2020-10-12 15:34 ` Slava Ovsiienko 2020-10-12 15:56 ` Ananyev, Konstantin 2020-10-12 15:59 ` Slava Ovsiienko 2020-10-12 16:52 ` Thomas Monjalon 2020-10-12 16:03 ` Andrew Rybchenko 2020-10-12 16:10 ` Slava Ovsiienko 2020-10-13 21:59 ` Ferruh Yigit 2020-10-14 7:17 ` Thomas Monjalon 2020-10-14 7:37 ` Slava Ovsiienko 2020-10-05 6:26 ` [dpdk-dev] [PATCH 0/5] " Viacheslav Ovsiienko 2020-10-05 6:26 ` [dpdk-dev] [PATCH 1/5] " Viacheslav Ovsiienko 2020-10-05 6:26 ` [dpdk-dev] [PATCH 2/5] app/testpmd: add multiple pools per core creation Viacheslav Ovsiienko 2020-10-05 6:26 ` [dpdk-dev] [PATCH 3/5] app/testpmd: add buffer split offload configuration Viacheslav Ovsiienko 2020-10-05 6:26 ` [dpdk-dev] [PATCH 4/5] app/testpmd: add rxpkts commands and parameters Viacheslav Ovsiienko 2020-10-05 6:26 ` [dpdk-dev] [PATCH 5/5] app/testpmd: add extended Rx queue setup Viacheslav Ovsiienko 2020-10-07 15:06 ` [dpdk-dev] [PATCH v2 0/9] ethdev: introduce Rx buffer split Viacheslav Ovsiienko 2020-10-07 15:06 ` [dpdk-dev] [PATCH v2 1/9] " Viacheslav Ovsiienko 2020-10-11 22:17 ` Thomas Monjalon 2020-10-12 9:40 ` Slava Ovsiienko 2020-10-12 10:09 ` Thomas Monjalon 2020-10-07 15:06 ` [dpdk-dev] [PATCH v2 2/9] app/testpmd: add multiple pools per core creation Viacheslav Ovsiienko 2020-10-07 15:06 ` [dpdk-dev] [PATCH v2 3/9] app/testpmd: add buffer split offload configuration Viacheslav Ovsiienko 2020-10-07 15:06 ` [dpdk-dev] [PATCH v2 4/9] app/testpmd: add rxpkts commands and parameters Viacheslav Ovsiienko 2020-10-07 15:06 ` [dpdk-dev] [PATCH v2 5/9] app/testpmd: add extended Rx queue setup Viacheslav Ovsiienko 2020-10-07 15:06 ` [dpdk-dev] [PATCH v2 6/9] net/mlx5: add extended Rx queue setup routine Viacheslav Ovsiienko 2020-10-07 15:06 ` [dpdk-dev] [PATCH v2 7/9] net/mlx5: configure Rx queue to support split Viacheslav Ovsiienko 2020-10-07 15:06 ` [dpdk-dev] [PATCH v2 8/9] net/mlx5: register multiple pool for Rx queue Viacheslav Ovsiienko 2020-10-07 15:06 ` [dpdk-dev] [PATCH v2 9/9] net/mlx5: update Rx datapath to support split Viacheslav Ovsiienko 2020-10-12 16:19 ` [dpdk-dev] [PATCH v3 0/9] ethdev: introduce Rx buffer split Viacheslav Ovsiienko 2020-10-12 16:19 ` [dpdk-dev] [PATCH v3 1/9] " Viacheslav Ovsiienko 2020-10-12 16:38 ` Andrew Rybchenko 2020-10-12 17:03 ` Thomas Monjalon 2020-10-12 17:11 ` Andrew Rybchenko 2020-10-12 20:22 ` Slava Ovsiienko 2020-10-12 17:11 ` Slava Ovsiienko 2020-10-12 16:19 ` [dpdk-dev] [PATCH v3 2/9] app/testpmd: add multiple pools per core creation Viacheslav Ovsiienko 2020-10-12 16:19 ` [dpdk-dev] [PATCH v3 3/9] app/testpmd: add buffer split offload configuration Viacheslav Ovsiienko 2020-10-12 16:19 ` [dpdk-dev] [PATCH v3 4/9] app/testpmd: add rxpkts commands and parameters Viacheslav Ovsiienko 2020-10-12 16:19 ` [dpdk-dev] [PATCH v3 5/9] app/testpmd: add extended Rx queue setup Viacheslav Ovsiienko 2020-10-12 16:19 ` [dpdk-dev] [PATCH v3 6/9] net/mlx5: add extended Rx queue setup routine Viacheslav Ovsiienko 2020-10-12 16:19 ` [dpdk-dev] [PATCH v3 7/9] net/mlx5: configure Rx queue to support split Viacheslav Ovsiienko 2020-10-12 16:19 ` [dpdk-dev] [PATCH v3 8/9] net/mlx5: register multiple pool for Rx queue Viacheslav Ovsiienko 2020-10-12 16:19 ` [dpdk-dev] [PATCH v3 9/9] net/mlx5: update Rx datapath to support split Viacheslav Ovsiienko 2020-10-12 20:09 ` [dpdk-dev] [PATCH v4 0/9] ethdev: introduce Rx buffer split Viacheslav Ovsiienko 2020-10-12 20:09 ` [dpdk-dev] [PATCH v4 1/9] " Viacheslav Ovsiienko 2020-10-12 20:09 ` [dpdk-dev] [PATCH v4 2/9] app/testpmd: add multiple pools per core creation Viacheslav Ovsiienko 2020-10-12 20:09 ` [dpdk-dev] [PATCH v4 3/9] app/testpmd: add buffer split offload configuration Viacheslav Ovsiienko 2020-10-12 20:09 ` [dpdk-dev] [PATCH v4 4/9] app/testpmd: add rxpkts commands and parameters Viacheslav Ovsiienko 2020-10-12 20:09 ` [dpdk-dev] [PATCH v4 5/9] app/testpmd: add extended Rx queue setup Viacheslav Ovsiienko 2020-10-12 20:09 ` [dpdk-dev] [PATCH v4 6/9] net/mlx5: add extended Rx queue setup routine Viacheslav Ovsiienko 2020-10-12 20:10 ` [dpdk-dev] [PATCH v4 7/9] net/mlx5: configure Rx queue to support split Viacheslav Ovsiienko 2020-10-12 20:10 ` [dpdk-dev] [PATCH v4 8/9] net/mlx5: register multiple pool for Rx queue Viacheslav Ovsiienko 2020-10-12 20:10 ` [dpdk-dev] [PATCH v4 9/9] net/mlx5: update Rx datapath to support split Viacheslav Ovsiienko 2020-10-13 19:21 ` [dpdk-dev] [PATCH v5 0/6] ethdev: introduce Rx buffer split Viacheslav Ovsiienko 2020-10-13 19:21 ` [dpdk-dev] [PATCH v5 1/6] " Viacheslav Ovsiienko 2020-10-13 22:34 ` Ferruh Yigit 2020-10-14 13:31 ` Olivier Matz 2020-10-14 14:42 ` Slava Ovsiienko 2020-10-13 19:21 ` [dpdk-dev] [PATCH v5 2/6] app/testpmd: add multiple pools per core creation Viacheslav Ovsiienko 2020-10-13 19:21 ` [dpdk-dev] [PATCH v5 3/6] app/testpmd: add buffer split offload configuration Viacheslav Ovsiienko 2020-10-13 19:21 ` [dpdk-dev] [PATCH v5 4/6] app/testpmd: add rxpkts commands and parameters Viacheslav Ovsiienko 2020-10-13 19:21 ` [dpdk-dev] [PATCH v5 5/6] app/testpmd: add rxoffs " Viacheslav Ovsiienko 2020-10-13 19:21 ` [dpdk-dev] [PATCH v5 6/6] app/testpmd: add extended Rx queue setup Viacheslav Ovsiienko 2020-10-14 18:11 ` [dpdk-dev] [PATCH v6 0/6] ethdev: introduce Rx buffer split Viacheslav Ovsiienko 2020-10-14 18:11 ` [dpdk-dev] [PATCH v6 1/6] " Viacheslav Ovsiienko 2020-10-14 18:57 ` Jerin Jacob 2020-10-15 7:43 ` Slava Ovsiienko 2020-10-15 9:27 ` Jerin Jacob 2020-10-15 10:27 ` Jerin Jacob 2020-10-15 10:51 ` Slava Ovsiienko 2020-10-15 11:26 ` Jerin Jacob 2020-10-15 11:36 ` Ferruh Yigit 2020-10-15 11:49 ` Slava Ovsiienko 2020-10-15 12:49 ` Thomas Monjalon 2020-10-15 13:07 ` Andrew Rybchenko 2020-10-15 13:57 ` Slava Ovsiienko 2020-10-15 20:22 ` Slava Ovsiienko 2020-10-15 9:49 ` Andrew Rybchenko 2020-10-15 10:34 ` Slava Ovsiienko 2020-10-15 11:09 ` Andrew Rybchenko 2020-10-15 14:39 ` Slava Ovsiienko 2020-10-14 22:13 ` Thomas Monjalon 2020-10-14 22:50 ` Ajit Khaparde 2020-10-15 10:11 ` Andrew Rybchenko 2020-10-15 10:19 ` Thomas Monjalon 2020-10-14 18:11 ` [dpdk-dev] [PATCH v6 2/6] app/testpmd: add multiple pools per core creation Viacheslav Ovsiienko 2020-10-14 18:11 ` [dpdk-dev] [PATCH v6 3/6] app/testpmd: add buffer split offload configuration Viacheslav Ovsiienko 2020-10-14 18:12 ` [dpdk-dev] [PATCH v6 4/6] app/testpmd: add rxpkts commands and parameters Viacheslav Ovsiienko 2020-10-14 18:12 ` [dpdk-dev] [PATCH v6 5/6] app/testpmd: add rxoffs " Viacheslav Ovsiienko 2020-10-14 18:12 ` [dpdk-dev] [PATCH v6 6/6] app/testpmd: add extended Rx queue setup Viacheslav Ovsiienko 2020-10-15 0:55 ` [dpdk-dev] [PATCH v2] eal/rte_malloc: add alloc_size() attribute to allocation functions Stephen Hemminger 2020-10-19 14:13 ` Thomas Monjalon 2020-10-19 14:22 ` Thomas Monjalon 2020-10-15 20:17 ` [dpdk-dev] [PATCH v7 0/6] ethdev: introduce Rx buffer split Viacheslav Ovsiienko 2020-10-15 20:17 ` [dpdk-dev] [PATCH v7 1/6] " Viacheslav Ovsiienko 2020-10-15 20:30 ` Jerin Jacob 2020-10-15 20:33 ` Thomas Monjalon 2020-10-15 22:01 ` Ajit Khaparde 2020-10-15 20:17 ` [dpdk-dev] [PATCH v7 2/6] app/testpmd: add multiple pools per core creation Viacheslav Ovsiienko 2020-10-15 20:17 ` [dpdk-dev] [PATCH v7 3/6] app/testpmd: add buffer split offload configuration Viacheslav Ovsiienko 2020-10-15 20:17 ` [dpdk-dev] [PATCH v7 4/6] app/testpmd: add rxpkts commands and parameters Viacheslav Ovsiienko 2020-10-15 20:17 ` [dpdk-dev] [PATCH v7 5/6] app/testpmd: add rxoffs " Viacheslav Ovsiienko 2020-10-15 20:17 ` [dpdk-dev] [PATCH v7 6/6] app/testpmd: add extended Rx queue setup Viacheslav Ovsiienko 2020-10-16 7:48 ` [dpdk-dev] [PATCH v8 0/6] ethdev: introduce Rx buffer split Viacheslav Ovsiienko 2020-10-16 7:48 ` [dpdk-dev] [PATCH v8 1/6] " Viacheslav Ovsiienko 2020-10-16 8:51 ` Andrew Rybchenko 2020-10-16 8:58 ` Andrew Rybchenko 2020-10-16 9:15 ` Slava Ovsiienko 2020-10-16 9:27 ` Andrew Rybchenko 2020-10-16 9:34 ` Slava Ovsiienko 2020-10-16 9:37 ` Thomas Monjalon 2020-10-16 9:38 ` Slava Ovsiienko 2020-10-16 9:19 ` Ferruh Yigit 2020-10-16 9:21 ` Andrew Rybchenko 2020-10-16 9:22 ` Slava Ovsiienko 2020-10-16 7:48 ` [dpdk-dev] [PATCH v8 2/6] app/testpmd: add multiple pools per core creation Viacheslav Ovsiienko 2020-10-16 7:48 ` [dpdk-dev] [PATCH v8 3/6] app/testpmd: add buffer split offload configuration Viacheslav Ovsiienko 2020-10-16 7:48 ` [dpdk-dev] [PATCH v8 4/6] app/testpmd: add rxpkts commands and parameters Viacheslav Ovsiienko 2020-10-16 7:48 ` [dpdk-dev] [PATCH v8 5/6] app/testpmd: add rxoffs " Viacheslav Ovsiienko 2020-10-16 7:48 ` [dpdk-dev] [PATCH v8 6/6] app/testpmd: add extended Rx queue setup Viacheslav Ovsiienko 2020-10-16 10:22 ` [dpdk-dev] [PATCH v9 0/6] ethdev: introduce Rx buffer split Viacheslav Ovsiienko 2020-10-16 10:22 ` [dpdk-dev] [PATCH v9 1/6] " Viacheslav Ovsiienko 2020-10-16 11:21 ` Ferruh Yigit 2020-10-16 13:08 ` Slava Ovsiienko 2020-10-16 10:22 ` [dpdk-dev] [PATCH v9 2/6] app/testpmd: add multiple pools per core creation Viacheslav Ovsiienko 2020-10-16 10:22 ` [dpdk-dev] [PATCH v9 3/6] app/testpmd: add buffer split offload configuration Viacheslav Ovsiienko 2020-10-16 10:22 ` [dpdk-dev] [PATCH v9 4/6] app/testpmd: add rxpkts commands and parameters Viacheslav Ovsiienko 2020-10-16 10:22 ` [dpdk-dev] [PATCH v9 5/6] app/testpmd: add rxoffs " Viacheslav Ovsiienko 2020-10-16 10:22 ` [dpdk-dev] [PATCH v9 6/6] app/testpmd: add extended Rx queue setup Viacheslav Ovsiienko 2020-10-16 12:41 ` [dpdk-dev] [PATCH v10 0/6] ethdev: introduce Rx buffer split Viacheslav Ovsiienko 2020-10-16 12:41 ` [dpdk-dev] [PATCH v10 1/6] " Viacheslav Ovsiienko 2020-10-16 12:41 ` [dpdk-dev] [PATCH v10 2/6] app/testpmd: add multiple pools per core creation Viacheslav Ovsiienko 2020-10-16 12:41 ` [dpdk-dev] [PATCH v10 3/6] app/testpmd: add buffer split offload configuration Viacheslav Ovsiienko 2020-10-16 12:41 ` [dpdk-dev] [PATCH v10 4/6] app/testpmd: add rxpkts commands and parameters Viacheslav Ovsiienko 2020-10-16 12:41 ` [dpdk-dev] [PATCH v10 5/6] app/testpmd: add rxoffs " Viacheslav Ovsiienko 2020-10-16 12:41 ` [dpdk-dev] [PATCH v10 6/6] app/testpmd: add extended Rx queue setup Viacheslav Ovsiienko 2020-10-16 13:39 ` [dpdk-dev] [PATCH v11 0/6] ethdev: introduce Rx buffer split Viacheslav Ovsiienko 2020-10-16 13:39 ` [dpdk-dev] [PATCH v11 1/6] " Viacheslav Ovsiienko 2020-10-16 15:14 ` Thomas Monjalon 2020-10-16 16:18 ` Slava Ovsiienko 2020-10-16 15:47 ` Ferruh Yigit 2020-10-16 16:05 ` Thomas Monjalon 2020-10-16 16:06 ` Ferruh Yigit 2020-10-16 13:39 ` [dpdk-dev] [PATCH v11 2/6] app/testpmd: add multiple pools per core creation Viacheslav Ovsiienko 2020-10-16 15:05 ` Ferruh Yigit 2020-10-16 15:38 ` Ferruh Yigit 2020-10-16 15:48 ` Slava Ovsiienko 2020-10-16 15:52 ` Ferruh Yigit 2020-10-16 15:55 ` Slava Ovsiienko 2020-10-16 15:57 ` Ferruh Yigit 2020-10-16 13:39 ` [dpdk-dev] [PATCH v11 3/6] app/testpmd: add buffer split offload configuration Viacheslav Ovsiienko 2020-10-16 13:39 ` [dpdk-dev] [PATCH v11 4/6] app/testpmd: add rxpkts commands and parameters Viacheslav Ovsiienko 2020-10-16 13:39 ` [dpdk-dev] [PATCH v11 5/6] app/testpmd: add rxoffs " Viacheslav Ovsiienko 2020-10-16 13:39 ` [dpdk-dev] [PATCH v11 6/6] app/testpmd: add extended Rx queue setup Viacheslav Ovsiienko 2020-10-16 16:44 ` [dpdk-dev] [PATCH v12 0/6] ethdev: introduce Rx buffer split Viacheslav Ovsiienko 2020-10-16 16:44 ` [dpdk-dev] [PATCH v12 1/6] " Viacheslav Ovsiienko 2020-10-16 19:22 ` Ferruh Yigit 2020-10-16 21:36 ` Ferruh Yigit 2020-10-16 16:44 ` [dpdk-dev] [PATCH v12 2/6] app/testpmd: add multiple pools per core creation Viacheslav Ovsiienko 2020-10-16 16:44 ` [dpdk-dev] [PATCH v12 3/6] app/testpmd: add buffer split offload configuration Viacheslav Ovsiienko 2020-10-16 16:44 ` [dpdk-dev] [PATCH v12 4/6] app/testpmd: add rxpkts commands and parameters Viacheslav Ovsiienko 2020-10-16 16:44 ` [dpdk-dev] [PATCH v12 5/6] app/testpmd: add rxoffs " Viacheslav Ovsiienko 2020-10-16 16:44 ` [dpdk-dev] [PATCH v12 6/6] app/testpmd: add extended Rx queue setup Viacheslav Ovsiienko 2020-10-16 17:05 ` [dpdk-dev] [PATCH v12 0/6] ethdev: introduce Rx buffer split Ferruh Yigit 2020-10-16 17:07 ` Slava Ovsiienko
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=1870d31a-0ec1-4198-fcee-03646c009458@solarflare.com \ --to=arybchenko@solarflare.com \ --cc=asafp@nvidia.com \ --cc=david.marchand@redhat.com \ --cc=dev@dpdk.org \ --cc=ferruh.yigit@intel.com \ --cc=jerinjacobk@gmail.com \ --cc=maxime.coquelin@redhat.com \ --cc=olivier.matz@6wind.com \ --cc=shahafs@nvidia.com \ --cc=stephen@networkplumber.org \ --cc=thomasm@mellanox.com \ --cc=viacheslavo@nvidia.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
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ http://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git