From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E7940A046B for ; Mon, 22 Jul 2019 15:32:25 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B70AD1BE63; Mon, 22 Jul 2019 15:32:25 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 646361BE5C for ; Mon, 22 Jul 2019 15:32:24 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Jul 2019 06:32:23 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,295,1559545200"; d="scan'208";a="170866514" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga007.fm.intel.com with ESMTP; 22 Jul 2019 06:32:23 -0700 Received: from fmsmsx154.amr.corp.intel.com (10.18.116.70) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 22 Jul 2019 06:32:22 -0700 Received: from bgsmsx101.gar.corp.intel.com (10.223.4.170) by FMSMSX154.amr.corp.intel.com (10.18.116.70) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 22 Jul 2019 06:32:22 -0700 Received: from bgsmsx153.gar.corp.intel.com ([169.254.2.25]) by BGSMSX101.gar.corp.intel.com ([169.254.1.46]) with mapi id 14.03.0439.000; Mon, 22 Jul 2019 19:02:19 +0530 From: "Govindarajan, LavanyaX" To: Olivier Matz CC: "dev@dpdk.org" , "Pattan, Reshma" , "Richardson, Bruce" Thread-Topic: [PATCH] app/test: add unit test cases for mbuf library APIs Thread-Index: AQHU84iMQeZSZ8mPU0OyhP99YRwzh6aJjHsAgE1yWDA= Date: Mon, 22 Jul 2019 13:32:19 +0000 Message-ID: <3B7166B077BF7E42BC16647C002DC50A09DA038C@BGSMSX153.gar.corp.intel.com> References: <1555332015-31506-1-git-send-email-lavanyax.govindarajan@intel.com> <20190603083936.my6rdbsmbj2dtazk@platinum> In-Reply-To: <20190603083936.my6rdbsmbj2dtazk@platinum> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [10.223.10.10] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH] app/test: add unit test cases for mbuf library APIs 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" Hi > -----Original Message----- > From: Olivier Matz [mailto:olivier.matz@6wind.com] > Sent: Monday, June 3, 2019 2:10 PM > To: Govindarajan, LavanyaX > Cc: dev@dpdk.org; Pattan, Reshma ; Richardson, > Bruce > Subject: Re: [PATCH] app/test: add unit test cases for mbuf library APIs >=20 > Hi Lavanya, >=20 > Please find some comments inline. >=20 > On Mon, Apr 15, 2019 at 01:40:15PM +0100, Lavanya Govindarajan wrote: > > added new unit test cases for > > rte_validate_tx_offload, > > rte_pktmbuf_alloc_bulk, > > rte_pktmbuf_read, > > rte_pktmbuf_ext_shinfo_init_helper, > > rte_pktmbuf_attach_extbuf, > > rte_mbuf_ext_refcnt_read, > > rte_mbuf_ext_refcnt_update, > > rte_mbuf_ext_refcnt_set, > > rte_pktmbuf_detach_extbuf > > > > Signed-off-by: Lavanya Govindarajan > > --- > > app/test/test_mbuf.c | 820 > > ++++++++++++++++++++++++++++++++++++++++++- > > 1 file changed, 817 insertions(+), 3 deletions(-) > > > > diff --git a/app/test/test_mbuf.c b/app/test/test_mbuf.c index > > 030385ec5..74259b313 100644 > > --- a/app/test/test_mbuf.c > > +++ b/app/test/test_mbuf.c > =20 > > +/* > > + * Test for allocating a bulk of mbufs > > + * define an array with positive sizes for mbufs allocations. > > + */ > > +static int > > +test_rte_pktmbuf_alloc_bulk(struct rte_mempool *pktmbuf_pool) { > > + int ret =3D 0; > > + unsigned int idx, loop; > > + unsigned int alloc_counts[] =3D { > > + 0, > > + MEMPOOL_CACHE_SIZE - 1, > > + MEMPOOL_CACHE_SIZE, > > + MEMPOOL_CACHE_SIZE + 1, > > + MEMPOOL_CACHE_SIZE * 1.5, > > + MEMPOOL_CACHE_SIZE * 2, > > + MEMPOOL_CACHE_SIZE * 2 - 1, > > + MEMPOOL_CACHE_SIZE * 2 + 1, > > + 89, /* random number */ > > + MEMPOOL_CACHE_SIZE /* repeat cache size */ > > + }; >=20 > instead of testing these particular values, why not testing every values = between > 0 and NB_MBUF ? Testing every value from 0, 1, 2.. NB_MBUF(128 here) dilutes the purpose o= f testing bulk allocation of mbufs from the same pool. Boundary conditions and some random values are targeted which will cover ma= jor cases. The behavior is different for different set of values based on the availability of free mbufs in the cache or from the ring.=20 > > +/* > > + * Test to initialize shared data in external buffer before attaching > > +to mbuf > > + * - Allocate mbuf with no data. > > + * - Allocate external buffer with size should be large enough to > accommodate > > + * rte_mbuf_ext_shared_info. > > + * - Invoke pktmbuf_ext_shinfo_init_helper to initialize shared data. > > + * - Invoke rte_pktmbuf_attach_extbuf to attach external buffer to th= e mbuf. > > + * - Clone another mbuf and attach the same external buffer to it. > > + * - Invoke rte_pktmbuf_detach_extbuf to detach the external buffer f= rom > mbuf. > > + */ > > +static int > > +test_pktmbuf_ext_shinfo_init_helper(struct rte_mempool *pktmbuf_pool) > > +{ > > + struct rte_mbuf *m =3D NULL; > > + struct rte_mbuf *clone =3D NULL; > > + struct rte_mbuf_ext_shared_info *ret_shinfo =3D NULL; > > + rte_iova_t buf_iova; > > + void *ext_buf_addr =3D NULL; > > + uint16_t buf_len =3D EXT_BUF_TEST_DATA_LEN + > > + sizeof(struct rte_mbuf_ext_shared_info); > > + > > + /* alloc a mbuf */ > > + m =3D rte_pktmbuf_alloc(pktmbuf_pool); > > + if (m =3D=3D NULL) > > + GOTO_FAIL("%s: mbuf allocation failed!\n", __func__); > > + if (rte_pktmbuf_pkt_len(m) !=3D 0) > > + GOTO_FAIL("%s: Bad packet length\n", __func__); > > + rte_mbuf_sanity_check(m, 0); > > + > > + ext_buf_addr =3D rte_malloc("External buffer", buf_len, > > + RTE_CACHE_LINE_SIZE); > > + if (ext_buf_addr =3D=3D NULL) > > + GOTO_FAIL("%s: External buffer allocation failed\n", __func__); > > + > > + ret_shinfo =3D rte_pktmbuf_ext_shinfo_init_helper(ext_buf_addr, > &buf_len, > > + ext_buf_free_callback_fn, ext_buf_addr); > > + if (ret_shinfo =3D=3D NULL) > > + GOTO_FAIL("%s: Shared info initialization failed!\n", __func__); > > + > > + if (rte_mbuf_ext_refcnt_read(ret_shinfo) !=3D 1) > > + GOTO_FAIL("%s: External refcount is not 1\n", __func__); > > + > > + if (rte_mbuf_refcnt_read(m) !=3D 1) > > + GOTO_FAIL("%s: Invalid refcnt in mbuf\n", __func__); > > + > > + buf_iova =3D rte_mempool_virt2iova(ext_buf_addr); > > + rte_pktmbuf_attach_extbuf(m, ext_buf_addr, buf_iova, buf_len, > > + ret_shinfo); > > + if (m->ol_flags !=3D EXT_ATTACHED_MBUF) > > + GOTO_FAIL("%s: External buffer is not attached to mbuf\n", > > + __func__); > > + > > + /* allocate one more mbuf */ > > + clone =3D rte_pktmbuf_clone(m, pktmbuf_pool); > > + if (clone =3D=3D NULL) > > + GOTO_FAIL("%s: mbuf clone allocation failed!\n", __func__); > > + if (rte_pktmbuf_pkt_len(clone) !=3D 0) > > + GOTO_FAIL("%s: Bad packet length\n", __func__); > > + > > + /* attach the same external buffer to the cloned mbuf */ > > + rte_pktmbuf_attach_extbuf(clone, ext_buf_addr, buf_iova, buf_len, > > + ret_shinfo); >=20 > Instead of: >=20 > clone =3D rte_pktmbuf_clone(m, pktmbuf_pool); > rte_pktmbuf_attach_extbuf(clone, ext_buf_addr, buf_iova, buf_len, > ret_shinfo); /* << useless */ >=20 The purpose of the above lines is to test if external buffer can be attache= d to the cloned mbuf or not. > I'd prefer: > m2 =3D rte_pktmbuf_alloc(pktmbuf_pool); > rte_pktmbuf_attach_extbuf(clone, ext_buf_addr, buf_iova, buf_len, > ret_shinfo); Do you mean, m2 in the above line? >=20 > Or just: > clone =3D rte_pktmbuf_clone(m, pktmbuf_pool); >=20 Can you please provide more clarity in the above suggestion. >=20 >=20 > > + if (clone->ol_flags !=3D EXT_ATTACHED_MBUF) > > + GOTO_FAIL("%s: External buffer is not attached to mbuf\n", > > + __func__); > > + Regards Lavanya G