From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 4FFAFA0096 for ; Tue, 9 Apr 2019 14:24:11 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A41F24F90; Tue, 9 Apr 2019 14:24:09 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 4ED634CC3 for ; Tue, 9 Apr 2019 14:24:07 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Apr 2019 05:24:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,329,1549958400"; d="scan'208";a="149316526" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga002.jf.intel.com with ESMTP; 09 Apr 2019 05:24:05 -0700 Received: from fmsmsx115.amr.corp.intel.com (10.18.116.19) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 9 Apr 2019 05:24:04 -0700 Received: from shsmsx107.ccr.corp.intel.com (10.239.4.96) by fmsmsx115.amr.corp.intel.com (10.18.116.19) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 9 Apr 2019 05:24:04 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.206]) by SHSMSX107.ccr.corp.intel.com ([169.254.9.153]) with mapi id 14.03.0415.000; Tue, 9 Apr 2019 20:24:02 +0800 From: "Yao, Lei A" To: Pavan Nikhilesh Bhagavatula , "Lin, Xueqin" , "Yigit, Ferruh" CC: "dev@dpdk.org" , "Xu, Qian Q" , "Li, WenjieX A" , "Wang, FengqinX" , "Wang, Yinan" , "Jerin Jacob Kollanukkaran" , "thomas@monjalon.net" , "arybchenko@solarflare.com" , "Iremonger, Bernard" , "alialnu@mellanox.com" , "Zhang, Qi Z" Thread-Topic: [dpdk-dev] [PATCH v6 3/4] app/testpmd: move pkt prepare logic into a separate function Thread-Index: AQHU6ToaztSMft2Yk0KjpKh+qAO+J6YzFJ6AgAABPgCAALV7MA== Date: Tue, 9 Apr 2019 12:24:01 +0000 Message-ID: <2DBBFF226F7CF64BAFCA79B681719D954969777A@shsmsx102.ccr.corp.intel.com> References: <20190228194128.14236-1-pbhagavatula@marvell.com> <20190402095255.848-1-pbhagavatula@marvell.com> <20190402095255.848-3-pbhagavatula@marvell.com> <0D300480287911409D9FF92C1FA2A3355B4D2DE1@SHSMSX104.ccr.corp.intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYmE4YjUwMGMtY2VmZC00YWY4LTljZDEtMzRlYWM3NTgyZWMyIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiVlRUZDBUWmRYUkppRFRCYklNYkVmcUwxblFaOUc5MmdnKys1S0F6R3oxOXN0XC83YTZ6TmVjSk43MklIMU5pdHQifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v6 3/4] app/testpmd: move pkt prepare logic into a separate function X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Message-ID: <20190409122401.g03KUGTnGGnIcQmSthCXoG9p__TYaHOH0BapRQKxQX0@z> > -----Original Message----- > From: Pavan Nikhilesh Bhagavatula [mailto:pbhagavatula@marvell.com] > Sent: Tuesday, April 9, 2019 5:33 PM > To: Lin, Xueqin ; Yigit, Ferruh > Cc: dev@dpdk.org; Xu, Qian Q ; Li, WenjieX A > ; Wang, FengqinX ; > Yao, Lei A ; Wang, Yinan ; > Jerin Jacob Kollanukkaran ; thomas@monjalon.net; > arybchenko@solarflare.com; Iremonger, Bernard > ; alialnu@mellanox.com; Zhang, Qi Z > > Subject: RE: [dpdk-dev] [PATCH v6 3/4] app/testpmd: move pkt prepare logi= c > into a separate function >=20 > Hi Lin, >=20 > Can you check if the following patch fixes the issue? > http://patches.dpdk.org/patch/52395/ >=20 > I wasn't able to catch this earlier. >=20 > Regards, > Pavan Hi, Pavan With this patch, testpmd can generate packets with correct src mac address at my side now. Thanks BRs Lei >=20 > >-----Original Message----- > >From: Lin, Xueqin > >Sent: Tuesday, April 9, 2019 2:58 PM > >To: Pavan Nikhilesh Bhagavatula ; Yigit, > Ferruh > > > >Cc: dev@dpdk.org; Xu, Qian Q ; Li, WenjieX A > >; Wang, FengqinX ; > Yao, > >Lei A ; Wang, Yinan ; Jerin > Jacob > >Kollanukkaran ; thomas@monjalon.net; > >arybchenko@solarflare.com; Iremonger, Bernard > >; alialnu@mellanox.com; Zhang, Qi Z > > > >Subject: [EXT] RE: [dpdk-dev] [PATCH v6 3/4] app/testpmd: move pkt > prepare > >logic into a separate function > > > >External Email > > > >---------------------------------------------------------------------- > >Hi NIkhilesh, > > > >This patchset impacts some of 19.05 rc1 txonly/burst tests on Intel NIC.= If > set > >txonly fwd, IXIA or tester peer can't receive packets that sent from app > >generated. > >This is high issue, block some cases test. Detailed information as below= , > need > >you to check it soon. > > > >*DPDK version: 19.05.0-rc1 > >*NIC hardware: Fortville_eagle/Fortville_spirit/Niantic > >Environment: one NIC port connect with another NIC port, or one NIC port > >connect with IXIA > > > >Test Setup > >1. Bind port to igb_uio or vfio > >2. On DUT, setup testpmd: > > ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x1e -n 4 -- -i --rxq= =3D4 -- > txq=3D4 -- > >port-topology=3Dloop 3. Set txonly forward, start testpmd > >testpmd>set fwd txonly > >testpmd>start > >4. Dump packets from tester NIC port or IXIA, find no packets were > received on > >the PORT0. > >tcpdump -i -v > > > >Best regards, > >Xueqin > > > >> -----Original Message----- > >> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Pavan Nikhilesh > >> Bhagavatula > >> Sent: Tuesday, April 2, 2019 5:54 PM > >> To: Jerin Jacob Kollanukkaran ; > >> thomas@monjalon.net; arybchenko@solarflare.com; Yigit, Ferruh > >> ; Iremonger, Bernard > >> ; alialnu@mellanox.com > >> Cc: dev@dpdk.org; Pavan Nikhilesh Bhagavatula > >> > >> Subject: [dpdk-dev] [PATCH v6 3/4] app/testpmd: move pkt prepare logic > >> into a separate function > >> > >> From: Pavan Nikhilesh > >> > >> Move the packet prepare logic into a separate function so that it can > >> be reused later. > >> > >> Signed-off-by: Pavan Nikhilesh > >> --- > >> app/test-pmd/txonly.c | 163 > >> +++++++++++++++++++++--------------------- > >> 1 file changed, 83 insertions(+), 80 deletions(-) > >> > >> diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c index > >> 65171c1d1..56ca0ad24 100644 > >> --- a/app/test-pmd/txonly.c > >> +++ b/app/test-pmd/txonly.c > >> @@ -148,6 +148,80 @@ setup_pkt_udp_ip_headers(struct ipv4_hdr > *ip_hdr, > >> ip_hdr->hdr_checksum =3D (uint16_t) ip_cksum; } > >> > >> +static inline bool > >> +pkt_burst_prepare(struct rte_mbuf *pkt, struct rte_mempool *mbp, > >> + struct ether_hdr *eth_hdr, const uint16_t vlan_tci, > >> + const uint16_t vlan_tci_outer, const uint64_t ol_flags) { > >> + struct rte_mbuf *pkt_segs[RTE_MAX_SEGS_PER_PKT]; > >> + uint8_t ip_var =3D RTE_PER_LCORE(_ip_var); > >> + struct rte_mbuf *pkt_seg; > >> + uint32_t nb_segs, pkt_len; > >> + uint8_t i; > >> + > >> + if (unlikely(tx_pkt_split =3D=3D TX_PKT_SPLIT_RND)) > >> + nb_segs =3D random() % tx_pkt_nb_segs + 1; > >> + else > >> + nb_segs =3D tx_pkt_nb_segs; > >> + > >> + if (nb_segs > 1) { > >> + if (rte_mempool_get_bulk(mbp, (void **)pkt_segs, > nb_segs)) > >> + return false; > >> + } > >> + > >> + rte_pktmbuf_reset_headroom(pkt); > >> + pkt->data_len =3D tx_pkt_seg_lengths[0]; > >> + pkt->ol_flags =3D ol_flags; > >> + pkt->vlan_tci =3D vlan_tci; > >> + pkt->vlan_tci_outer =3D vlan_tci_outer; > >> + pkt->l2_len =3D sizeof(struct ether_hdr); > >> + pkt->l3_len =3D sizeof(struct ipv4_hdr); > >> + > >> + pkt_len =3D pkt->data_len; > >> + pkt_seg =3D pkt; > >> + for (i =3D 1; i < nb_segs; i++) { > >> + pkt_seg->next =3D pkt_segs[i - 1]; > >> + pkt_seg =3D pkt_seg->next; > >> + pkt_seg->data_len =3D tx_pkt_seg_lengths[i]; > >> + pkt_len +=3D pkt_seg->data_len; > >> + } > >> + pkt_seg->next =3D NULL; /* Last segment of packet. */ > >> + /* > >> + * Copy headers in first packet segment(s). > >> + */ > >> + copy_buf_to_pkt(eth_hdr, sizeof(eth_hdr), pkt, 0); > >> + copy_buf_to_pkt(&pkt_ip_hdr, sizeof(pkt_ip_hdr), pkt, > >> + sizeof(struct ether_hdr)); > >> + if (txonly_multi_flow) { > >> + struct ipv4_hdr *ip_hdr; > >> + uint32_t addr; > >> + > >> + ip_hdr =3D rte_pktmbuf_mtod_offset(pkt, > >> + struct ipv4_hdr *, > >> + sizeof(struct ether_hdr)); > >> + /* > >> + * Generate multiple flows by varying IP src addr. This > >> + * enables packets are well distributed by RSS in > >> + * receiver side if any and txonly mode can be a decent > >> + * packet generator for developer's quick performance > >> + * regression test. > >> + */ > >> + addr =3D (IP_DST_ADDR | (ip_var++ << 8)) + rte_lcore_id(); > >> + ip_hdr->src_addr =3D rte_cpu_to_be_32(addr); > >> + } > >> + copy_buf_to_pkt(&pkt_udp_hdr, sizeof(pkt_udp_hdr), pkt, > >> + sizeof(struct ether_hdr) + > >> + sizeof(struct ipv4_hdr)); > >> + /* > >> + * Complete first mbuf of packet and append it to the > >> + * burst of packets to be transmitted. > >> + */ > >> + pkt->nb_segs =3D nb_segs; > >> + pkt->pkt_len =3D pkt_len; > >> + > >> + return true; > >> +} > >> + > >> /* > >> * Transmit a burst of multi-segments packets. > >> */ > >> @@ -155,10 +229,8 @@ static void > >> pkt_burst_transmit(struct fwd_stream *fs) { > >> struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; > >> - struct rte_mbuf *pkt_segs[RTE_MAX_SEGS_PER_PKT]; > >> struct rte_port *txp; > >> struct rte_mbuf *pkt; > >> - struct rte_mbuf *pkt_seg; > >> struct rte_mempool *mbp; > >> struct ether_hdr eth_hdr; > >> uint16_t nb_tx; > >> @@ -166,15 +238,12 @@ pkt_burst_transmit(struct fwd_stream *fs) > >> uint16_t vlan_tci, vlan_tci_outer; > >> uint32_t retry; > >> uint64_t ol_flags =3D 0; > >> - uint8_t ip_var =3D RTE_PER_LCORE(_ip_var); > >> - uint8_t i; > >> uint64_t tx_offloads; > >> #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES > >> uint64_t start_tsc; > >> uint64_t end_tsc; > >> uint64_t core_cycles; > >> #endif > >> - uint32_t nb_segs, pkt_len; > >> > >> #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES > >> start_tsc =3D rte_rdtsc(); > >> @@ -201,85 +270,19 @@ pkt_burst_transmit(struct fwd_stream *fs) > >> > >> for (nb_pkt =3D 0; nb_pkt < nb_pkt_per_burst; nb_pkt++) { > >> pkt =3D rte_mbuf_raw_alloc(mbp); > >> - if (pkt =3D=3D NULL) { > >> - nomore_mbuf: > >> - if (nb_pkt =3D=3D 0) > >> - return; > >> + if (pkt =3D=3D NULL) > >> + break; > >> + if (unlikely(!pkt_burst_prepare(pkt, mbp, ð_hdr, vlan_tci, > >> + vlan_tci_outer, ol_flags))) { > >> + rte_pktmbuf_free(pkt); > >> break; > >> } > >> - > >> - /* > >> - * Using raw alloc is good to improve performance, > >> - * but some consumers may use the headroom and so > >> - * decrement data_off. We need to make sure it is > >> - * reset to default value. > >> - */ > >> - rte_pktmbuf_reset_headroom(pkt); > >> - pkt->data_len =3D tx_pkt_seg_lengths[0]; > >> - pkt_seg =3D pkt; > >> - > >> - if (tx_pkt_split =3D=3D TX_PKT_SPLIT_RND) > >> - nb_segs =3D random() % tx_pkt_nb_segs + 1; > >> - else > >> - nb_segs =3D tx_pkt_nb_segs; > >> - > >> - if (nb_segs > 1) { > >> - if (rte_mempool_get_bulk(mbp, (void **)pkt_segs, > >> - nb_segs)) { > >> - rte_pktmbuf_free(pkt); > >> - goto nomore_mbuf; > >> - } > >> - } > >> - > >> - pkt_len =3D pkt->data_len; > >> - for (i =3D 1; i < nb_segs; i++) { > >> - pkt_seg->next =3D pkt_segs[i - 1]; > >> - pkt_seg =3D pkt_seg->next; > >> - pkt_seg->data_len =3D tx_pkt_seg_lengths[i]; > >> - pkt_len +=3D pkt_seg->data_len; > >> - } > >> - pkt_seg->next =3D NULL; /* Last segment of packet. */ > >> - > >> - /* > >> - * Copy headers in first packet segment(s). > >> - */ > >> - copy_buf_to_pkt(ð_hdr, sizeof(eth_hdr), pkt, 0); > >> - copy_buf_to_pkt(&pkt_ip_hdr, sizeof(pkt_ip_hdr), pkt, > >> - sizeof(struct ether_hdr)); > >> - if (txonly_multi_flow) { > >> - struct ipv4_hdr *ip_hdr; > >> - uint32_t addr; > >> - > >> - ip_hdr =3D rte_pktmbuf_mtod_offset(pkt, > >> - struct ipv4_hdr *, > >> - sizeof(struct ether_hdr)); > >> - /* > >> - * Generate multiple flows by varying IP src addr. This > >> - * enables packets are well distributed by RSS in > >> - * receiver side if any and txonly mode can be a > >> decent > >> - * packet generator for developer's quick > >> performance > >> - * regression test. > >> - */ > >> - addr =3D (IP_DST_ADDR | (ip_var++ << 8)) + > >> rte_lcore_id(); > >> - ip_hdr->src_addr =3D rte_cpu_to_be_32(addr); > >> - } > >> - copy_buf_to_pkt(&pkt_udp_hdr, sizeof(pkt_udp_hdr), pkt, > >> - sizeof(struct ether_hdr) + > >> - sizeof(struct ipv4_hdr)); > >> - > >> - /* > >> - * Complete first mbuf of packet and append it to the > >> - * burst of packets to be transmitted. > >> - */ > >> - pkt->nb_segs =3D nb_segs; > >> - pkt->pkt_len =3D pkt_len; > >> - pkt->ol_flags =3D ol_flags; > >> - pkt->vlan_tci =3D vlan_tci; > >> - pkt->vlan_tci_outer =3D vlan_tci_outer; > >> - pkt->l2_len =3D sizeof(struct ether_hdr); > >> - pkt->l3_len =3D sizeof(struct ipv4_hdr); > >> pkts_burst[nb_pkt] =3D pkt; > >> } > >> + > >> + if (nb_pkt =3D=3D 0) > >> + return; > >> + > >> nb_tx =3D rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, > >> nb_pkt); > >> /* > >> * Retry if necessary > >> -- > >> 2.21.0