[dpdk-dev] [PATCH v2 05/39] examples/l3fwd: move to ethdev offloads API

Shahaf Shuler shahafs at mellanox.com
Wed Dec 13 08:21:01 CET 2017


Tuesday, December 12, 2017 7:12 PM, Ananyev, Konstantin:
> > -----Original Message-----
> > From: Shahaf Shuler [mailto:shahafs at mellanox.com]
> > Sent: Tuesday, December 12, 2017 12:26 PM
> > To: dev at dpdk.org; Ananyev, Konstantin
> <konstantin.ananyev at intel.com>;
> > Nicolau, Radu <radu.nicolau at intel.com>; arybchenko at solarflare.com
> > Subject: [PATCH v2 05/39] examples/l3fwd: move to ethdev offloads API
> >
> > Ethdev offloads API has changed since:
> >
> > commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API") commit
> > cba7f53b717d ("ethdev: introduce Tx queue offloads API")
> >
> > This commit support the new API.
> >
> > Signed-off-by: Shahaf Shuler <shahafs at mellanox.com>
> > ---
> >  examples/l3fwd/main.c | 40 ++++++++++++++++++++++++++++++--------
> --
> >  1 file changed, 30 insertions(+), 10 deletions(-)
> >
> > diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c index
> > 6229568..3bdf4d5 100644
> > --- a/examples/l3fwd/main.c
> > +++ b/examples/l3fwd/main.c
> > @@ -149,11 +149,9 @@ struct lcore_params {
> >  		.mq_mode = ETH_MQ_RX_RSS,
> >  		.max_rx_pkt_len = ETHER_MAX_LEN,
> >  		.split_hdr_size = 0,
> > -		.header_split   = 0, /**< Header Split disabled */
> > -		.hw_ip_checksum = 1, /**< IP checksum offload enabled */
> > -		.hw_vlan_filter = 0, /**< VLAN filtering disabled */
> > -		.jumbo_frame    = 0, /**< Jumbo Frame Support disabled */
> > -		.hw_strip_crc   = 1, /**< CRC stripped by hardware */
> > +		.ignore_offload_bitfield = 1,
> > +		.offloads = (DEV_RX_OFFLOAD_CRC_STRIP |
> > +			     DEV_RX_OFFLOAD_CHECKSUM),
> >  	},
> >  	.rx_adv_conf = {
> >  		.rss_conf = {
> > @@ -163,6 +161,7 @@ struct lcore_params {
> >  	},
> >  	.txmode = {
> >  		.mq_mode = ETH_MQ_TX_NONE,
> > +		.offloads = DEV_TX_OFFLOAD_MBUF_FAST_FREE,
> 
> Hmm, does it mean a new warning for all PMDs (majority) which don't
> support DEV_TX_OFFLOAD_MBUF_FAST_FREE?

Good point.
Unlike other offloads which are must for the application proper run, this one it only for optimizing the performance and should be set only if PMD supports. 
Am continuing to aggregate reasons why the DEV_TX_OFFLOAD_MBUF_FAST_FREE should not be defined as an offload. Anyway we passed that... 

I will fix on v3.

> Konstantin
> 
> >  	},
> >  };
> >
> > @@ -612,7 +611,8 @@ enum {
> >  			};
> >
> >  			printf("%s\n", str8);
> > -			port_conf.rxmode.jumbo_frame = 1;
> > +			port_conf.rxmode.offloads |=
> DEV_RX_OFFLOAD_JUMBO_FRAME;
> > +			port_conf.txmode.offloads |=
> DEV_TX_OFFLOAD_MULTI_SEGS;
> >
> >  			/*
> >  			 * if no max-pkt-len set, use the default @@ -908,6
> +908,22 @@
> > enum {
> >  			n_tx_queue = MAX_TX_QUEUE_PER_PORT;
> >  		printf("Creating queues: nb_rxq=%d nb_txq=%u... ",
> >  			nb_rx_queue, (unsigned)n_tx_queue );
> > +
> > +		rte_eth_dev_info_get(portid, &dev_info);
> > +		if ((dev_info.rx_offload_capa & port_conf.rxmode.offloads)
> !=
> > +		    port_conf.rxmode.offloads) {
> > +			printf("Some Rx offloads are not supported "
> > +			       "by port %d: requested 0x%lx supported
> 0x%lx\n",
> > +			       portid, port_conf.rxmode.offloads,
> > +			       dev_info.rx_offload_capa);
> > +		}
> > +		if ((dev_info.tx_offload_capa & port_conf.txmode.offloads)
> !=
> > +		    port_conf.txmode.offloads) {
> > +			printf("Some Tx offloads are not supported "
> > +			       "by port %d: requested 0x%lx supported
> 0x%lx\n",
> > +			       portid, port_conf.txmode.offloads,
> > +			       dev_info.tx_offload_capa);
> > +		}
> >  		ret = rte_eth_dev_configure(portid, nb_rx_queue,
> >  					(uint16_t)n_tx_queue, &port_conf);
> >  		if (ret < 0)
> > @@ -955,10 +971,9 @@ enum {
> >  			printf("txq=%u,%d,%d ", lcore_id, queueid,
> socketid);
> >  			fflush(stdout);
> >
> > -			rte_eth_dev_info_get(portid, &dev_info);
> >  			txconf = &dev_info.default_txconf;
> > -			if (port_conf.rxmode.jumbo_frame)
> > -				txconf->txq_flags = 0;
> > +			txconf->txq_flags = ETH_TXQ_FLAGS_IGNORE;
> > +			txconf->offloads = port_conf.txmode.offloads;
> >  			ret = rte_eth_tx_queue_setup(portid, queueid,
> nb_txd,
> >  						     socketid, txconf);
> >  			if (ret < 0)
> > @@ -984,6 +999,8 @@ enum {
> >  		fflush(stdout);
> >  		/* init RX queues */
> >  		for(queue = 0; queue < qconf->n_rx_queue; ++queue) {
> > +			struct rte_eth_rxconf rxq_conf;
> > +
> >  			portid = qconf->rx_queue_list[queue].port_id;
> >  			queueid = qconf->rx_queue_list[queue].queue_id;
> >
> > @@ -996,9 +1013,12 @@ enum {
> >  			printf("rxq=%d,%d,%d ", portid, queueid, socketid);
> >  			fflush(stdout);
> >
> > +			rte_eth_dev_info_get(portid, &dev_info);
> > +			rxq_conf = dev_info.default_rxconf;
> > +			rxq_conf.offloads = port_conf.rxmode.offloads;
> >  			ret = rte_eth_rx_queue_setup(portid, queueid,
> nb_rxd,
> >  					socketid,
> > -					NULL,
> > +					&rxq_conf,
> >  					pktmbuf_pool[socketid]);
> >  			if (ret < 0)
> >  				rte_exit(EXIT_FAILURE,
> > --
> > 1.8.3.1



More information about the dev mailing list