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 8996AA0530; Sun, 26 Jan 2020 11:53:24 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7A7E61BE8E; Sun, 26 Jan 2020 11:53:23 +0100 (CET) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40063.outbound.protection.outlook.com [40.107.4.63]) by dpdk.org (Postfix) with ESMTP id B793F1BE8A for ; Sun, 26 Jan 2020 11:53:21 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EKUDIE6yLbg7LVehB5pShO+EirIDY6l4R5fGxS51Njh8338NcGOcqDeT0ow3cwD+2oRIXoJWGirrYA+JSez3xQmElFgn5YBRPRsOxVpkGf9XOdmIXECHIT7MqqFJ7RuHNOc0rjzNjY0vNc2MCeEXLOsSXI9Q7jRbxy+o7KOp/liPMwKReHsp7FKyVng8tbHvR4CIN7GDIHVkx/8UzjShDaeGjtL4RbCRw50SCJVvTYG5ZEwPSuvbuHmdlsj4SdWdSK7LUI88NkIdDQfb6HVFsgjrQ9G+HK71QGbJ5LDpYcO1Ba8eq1YPW8liD3O86BIkCNN4Epmm+EMGVGPr22B6EA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CQTMOvQloggWu2hoq3/1fIVLp8Fm1370iTPRcCESZn4=; b=OSu5GWB9Ce5NHJakwAHClbRg+Rsz0HwDKl6M1QUaKjs+8Fv9+TUBT/g7yHs/N2yAAgayD/E/chqJrBNtTdUyBi/faLxmQYNyG1aZDiDvUUeeX3FZxVBLyBlXTA+IZQCCCutJDgrWZZV8yBDa6icJYyQkszKIds6sQp/IHnOBoE0BcMgcL9pw+keI56e7HnDqDsFCzROAUecWXcx53hOsc1ONPbNmVc4EmHrafgUwo9+Vw60XOeAuEqSzUfAtJlS3nns0azMJw387GP1OhebBvcdV/JUjDQb50Lw5gZwHaAg+wl+cx8m+c33Kr/CbW4KYtLziPwwyp8di9eTd4PiFDA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CQTMOvQloggWu2hoq3/1fIVLp8Fm1370iTPRcCESZn4=; b=l+FdP4kB9ZCgZZUzYGCWjAPlNdiUqJHyvbYGOrqZpHxds2bT1wWdmB7dTrMBcsGcVjrZhLjYZxtA50DgJG2dgdfABi0ssex4nUo48XMqkXi946m/RIFvR88ybTOIKPzJbgECuWRTPBa7Q/4bSMh11d0eO8iusBKFw4IhxC+HXXs= Received: from AM4PR05MB3265.eurprd05.prod.outlook.com (10.171.188.154) by AM4PR05MB3298.eurprd05.prod.outlook.com (10.171.187.155) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2665.22; Sun, 26 Jan 2020 10:53:20 +0000 Received: from AM4PR05MB3265.eurprd05.prod.outlook.com ([fe80::68eb:ad79:71f4:110f]) by AM4PR05MB3265.eurprd05.prod.outlook.com ([fe80::68eb:ad79:71f4:110f%3]) with mapi id 15.20.2665.017; Sun, 26 Jan 2020 10:53:20 +0000 From: Slava Ovsiienko To: Slava Ovsiienko , "dev@dpdk.org" CC: Matan Azrad , Raslan Darawsheh , Ori Kam , Shahaf Shuler , "olivier.matz@6wind.com" , "stephen@networkplumber.org" , "thomas@mellanox.net" Thread-Topic: [dpdk-dev] [PATCH] app/test: add test for mbuf with pinned external buffer Thread-Index: AQHV0vRtioHCYlrq+kySBlM3nwWrq6f8x25w Date: Sun, 26 Jan 2020 10:53:20 +0000 Message-ID: References: <20191118094938.192850-1-shahafs@mellanox.com> <1579897518-29362-1-git-send-email-viacheslavo@mellanox.com> In-Reply-To: <1579897518-29362-1-git-send-email-viacheslavo@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=viacheslavo@mellanox.com; x-originating-ip: [95.164.10.10] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 968f25b3-301c-4cff-4798-08d7a24df53c x-ms-traffictypediagnostic: AM4PR05MB3298:|AM4PR05MB3298: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtFwd x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2201; x-forefront-prvs: 02945962BD x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(39860400002)(136003)(346002)(376002)(396003)(199004)(189003)(316002)(81156014)(4326008)(81166006)(110136005)(54906003)(55016002)(8936002)(5660300002)(9686003)(26005)(52536014)(186003)(7696005)(2906002)(478600001)(66556008)(66476007)(66946007)(53546011)(6506007)(66446008)(76116006)(86362001)(71200400001)(64756008)(33656002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3298; H:AM4PR05MB3265.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: u3v5eWXKWFqQCvhabucz0besKvE06Oma/gKln4mv2GFS9vpqAeS8BVNQKvj+CkMA2Bqeu0YNnDCa7t8RfZIfcpCjBilQ8m4NCEEiTxCv9/C4DZMs84AMVJLGib/QXnFG3ys3eEyNsU+SQ/zGYxh1zq6N6cTD3Dmj0+i7xLMDlup5D1D9IVyLk44E7iDV2Er3ipSkU6c4KeRmzHUeZlm4EyYWins4Onyesuko1XTA0NiHE1CHXkfA2a0Z4P3OuouCtvnME6YaGungrSFctTnN0z/dc5JD2o8k/fyUxDZoEGhKk2wgAQYlHn+0o8pZyA/5pgzyrToaf7SSG/gK8AE/eCqFOvfQkpsJTrwlv/qFpzjsNLk+WT5alXHfHoz3u7V3w+Ig5Vv3nPoDPt//TN7blzlyobb+6wNnaWOrYHOhA5XkQ/8PL6Dmn+SRlFJ/wfmI x-ms-exchange-antispam-messagedata: 1UxmyECDQyHLBnLITVJ7ztwOBbpgVAdc+Tuy4PpeuC0cDQIVMWGIWqQ7YLqP6egUd9ucU/JmyICSR9eEGqUmuvt/0Sarvf1hPk4fOK3WH4gRwQxqcFtHkbB/z4SsCdOVndEd8chdrXWnEOtZ+cq4/w== Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 968f25b3-301c-4cff-4798-08d7a24df53c X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Jan 2020 10:53:20.6104 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Y98VoSNlCrtCY0zgXNh6snYMS+uXt/giGTmIxr4ALSaxrZPTsupQMYrFDA1r/oxbgxI5JblYQ8kiQ19FDF1bbFs257M29iMOUhRFXsbMLLA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3298 Subject: Re: [dpdk-dev] [PATCH] app/test: add test for mbuf with pinned external buffer 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" verify_mbuf_check_panics() is left commented out to test the patch (verify_mbuf_check_panics() fails on my setup), will be removed in v2. With best regards, Slava > -----Original Message----- > From: dev On Behalf Of Viacheslav Ovsiienko > Sent: Friday, January 24, 2020 22:25 > To: dev@dpdk.org > Cc: Matan Azrad ; Raslan Darawsheh > ; Ori Kam ; Shahaf Shuler > ; olivier.matz@6wind.com; > stephen@networkplumber.org; thomas@mellanox.net > Subject: [dpdk-dev] [PATCH] app/test: add test for mbuf with pinned exter= nal > buffer >=20 > This patch adds unit test for the mbufs allocated from the special pool w= ith > pinned external data buffers. >=20 > The pinned buffer mbufs are tested in the same way as regular ones with > taking into account some specifics of cloning/attaching. >=20 > Signed-off-by: Viacheslav Ovsiienko > --- > app/test/test_mbuf.c | 165 > ++++++++++++++++++++++++++++++++++++++++++++++----- > 1 file changed, 150 insertions(+), 15 deletions(-) >=20 > diff --git a/app/test/test_mbuf.c b/app/test/test_mbuf.c index > 61ecffc..ee2f2f0 100644 > --- a/app/test/test_mbuf.c > +++ b/app/test/test_mbuf.c > @@ -310,8 +310,17 @@ > return -1; > } >=20 > +static uint16_t > +testclone_refcnt_read(struct rte_mbuf *m) { > + return RTE_MBUF_HAS_PINNED_EXTBUF(m) ? > + rte_mbuf_ext_refcnt_read(m->shinfo) : > + rte_mbuf_refcnt_read(m); > +} > + > static int > -testclone_testupdate_testdetach(struct rte_mempool *pktmbuf_pool) > +testclone_testupdate_testdetach(struct rte_mempool *pktmbuf_pool, > + struct rte_mempool *clone_pool) > { > struct rte_mbuf *m =3D NULL; > struct rte_mbuf *clone =3D NULL; > @@ -331,7 +340,7 @@ > *data =3D MAGIC_DATA; >=20 > /* clone the allocated mbuf */ > - clone =3D rte_pktmbuf_clone(m, pktmbuf_pool); > + clone =3D rte_pktmbuf_clone(m, clone_pool); > if (clone =3D=3D NULL) > GOTO_FAIL("cannot clone data\n"); >=20 > @@ -339,7 +348,7 @@ > if (*data !=3D MAGIC_DATA) > GOTO_FAIL("invalid data in clone\n"); >=20 > - if (rte_mbuf_refcnt_read(m) !=3D 2) > + if (testclone_refcnt_read(m) !=3D 2) > GOTO_FAIL("invalid refcnt in m\n"); >=20 > /* free the clone */ > @@ -358,7 +367,7 @@ > data =3D rte_pktmbuf_mtod(m->next, unaligned_uint32_t *); > *data =3D MAGIC_DATA; >=20 > - clone =3D rte_pktmbuf_clone(m, pktmbuf_pool); > + clone =3D rte_pktmbuf_clone(m, clone_pool); > if (clone =3D=3D NULL) > GOTO_FAIL("cannot clone data\n"); >=20 > @@ -370,15 +379,15 @@ > if (*data !=3D MAGIC_DATA) > GOTO_FAIL("invalid data in clone->next\n"); >=20 > - if (rte_mbuf_refcnt_read(m) !=3D 2) > + if (testclone_refcnt_read(m) !=3D 2) > GOTO_FAIL("invalid refcnt in m\n"); >=20 > - if (rte_mbuf_refcnt_read(m->next) !=3D 2) > + if (testclone_refcnt_read(m->next) !=3D 2) > GOTO_FAIL("invalid refcnt in m->next\n"); >=20 > /* try to clone the clone */ >=20 > - clone2 =3D rte_pktmbuf_clone(clone, pktmbuf_pool); > + clone2 =3D rte_pktmbuf_clone(clone, clone_pool); > if (clone2 =3D=3D NULL) > GOTO_FAIL("cannot clone the clone\n"); >=20 > @@ -390,10 +399,10 @@ > if (*data !=3D MAGIC_DATA) > GOTO_FAIL("invalid data in clone2->next\n"); >=20 > - if (rte_mbuf_refcnt_read(m) !=3D 3) > + if (testclone_refcnt_read(m) !=3D 3) > GOTO_FAIL("invalid refcnt in m\n"); >=20 > - if (rte_mbuf_refcnt_read(m->next) !=3D 3) > + if (testclone_refcnt_read(m->next) !=3D 3) > GOTO_FAIL("invalid refcnt in m->next\n"); >=20 > /* free mbuf */ > @@ -418,7 +427,8 @@ > } >=20 > static int > -test_pktmbuf_copy(struct rte_mempool *pktmbuf_pool) > +test_pktmbuf_copy(struct rte_mempool *pktmbuf_pool, > + struct rte_mempool *clone_pool) > { > struct rte_mbuf *m =3D NULL; > struct rte_mbuf *copy =3D NULL; > @@ -458,11 +468,14 @@ > copy =3D NULL; >=20 > /* same test with a cloned mbuf */ > - clone =3D rte_pktmbuf_clone(m, pktmbuf_pool); > + clone =3D rte_pktmbuf_clone(m, clone_pool); > if (clone =3D=3D NULL) > GOTO_FAIL("cannot clone data\n"); >=20 > - if (!RTE_MBUF_CLONED(clone)) > + if ((!RTE_MBUF_HAS_PINNED_EXTBUF(m) && > + !RTE_MBUF_CLONED(clone)) || > + (RTE_MBUF_HAS_PINNED_EXTBUF(m) && > + !RTE_MBUF_HAS_EXTBUF(clone))) > GOTO_FAIL("clone did not give a cloned mbuf\n"); >=20 > copy =3D rte_pktmbuf_copy(clone, pktmbuf_pool, 0, UINT32_MAX); @@ > -1199,10 +1212,11 @@ > buf =3D rte_pktmbuf_alloc(pktmbuf_pool); > if (buf =3D=3D NULL) > return -1; > + /* > printf("Checking good mbuf initially\n"); > if (verify_mbuf_check_panics(buf) !=3D -1) > return -1; > - > + */ > printf("Now checking for error conditions\n"); >=20 > if (verify_mbuf_check_panics(NULL)) { > @@ -2411,6 +2425,120 @@ struct test_case { > return -1; > } >=20 > +/* > + * Test the mbuf pool with pinned external data buffers > + * - Allocate memory zone for external buffer > + * - Create the mbuf pool with pinned external buffer > + * - Check the created pool with relevant mbuf pool unit tests */ > +static int test_pktmbuf_ext_pinned_buffer(struct rte_mempool *std_pool) > +{ > + > + struct rte_pktmbuf_extmem ext_mem; > + struct rte_mempool *pinned_pool =3D NULL; > + const struct rte_memzone *mz =3D NULL; > + > + printf("Test mbuf pool with external pinned data buffers\n"); > + > + /* Allocate memzone for the external data buffer */ > + mz =3D rte_memzone_reserve("pinned_pool", > + NB_MBUF * MBUF_DATA_SIZE, > + SOCKET_ID_ANY, > + RTE_MEMZONE_2MB | > RTE_MEMZONE_SIZE_HINT_ONLY); > + if (mz =3D=3D NULL) > + GOTO_FAIL("%s: Memzone allocation failed\n", __func__); > + > + /* Create the mbuf pool with pinned external data buffer */ > + ext_mem.buf_ptr =3D mz->addr; > + ext_mem.buf_iova =3D mz->iova; > + ext_mem.buf_len =3D mz->len; > + ext_mem.elt_size =3D MBUF_DATA_SIZE; > + > + pinned_pool =3D rte_pktmbuf_pool_create_extbuf("test_pinned_pool", > + NB_MBUF, MEMPOOL_CACHE_SIZE, 0, > + MBUF_DATA_SIZE, SOCKET_ID_ANY, > + &ext_mem, 1); > + if (pinned_pool =3D=3D NULL) > + GOTO_FAIL("%s: Mbuf pool with pinned external" > + " buffer creation failed\n", __func__); > + /* test multiple mbuf alloc */ > + if (test_pktmbuf_pool(pinned_pool) < 0) > + GOTO_FAIL("%s: test_mbuf_pool(pinned) failed\n", > + __func__); > + > + /* do it another time to check that all mbufs were freed */ > + if (test_pktmbuf_pool(pinned_pool) < 0) > + GOTO_FAIL("%s: test_mbuf_pool(pinned) failed (2)\n", > + __func__); > + > + /* test that the data pointer on a packet mbuf is set properly */ > + if (test_pktmbuf_pool_ptr(pinned_pool) < 0) > + GOTO_FAIL("%s: test_pktmbuf_pool_ptr(pinned) failed\n", > + __func__); > + > + /* test data manipulation in mbuf with non-ascii data */ > + if (test_pktmbuf_with_non_ascii_data(pinned_pool) < 0) > + GOTO_FAIL("%s: test_pktmbuf_with_non_ascii_data(pinned)" > + " failed\n", __func__); > + > + /* test free pktmbuf segment one by one */ > + if (test_pktmbuf_free_segment(pinned_pool) < 0) > + GOTO_FAIL("%s: test_pktmbuf_free_segment(pinned) > failed\n", > + __func__); > + > + if (testclone_testupdate_testdetach(pinned_pool, std_pool) < 0) > + GOTO_FAIL("%s: testclone_and_testupdate(pinned) failed\n", > + __func__); > + > + if (test_pktmbuf_copy(pinned_pool, std_pool) < 0) > + GOTO_FAIL("%s: test_pktmbuf_copy(pinned) failed\n", > + __func__); > + > + if (test_failing_mbuf_sanity_check(pinned_pool) < 0) > + GOTO_FAIL("%s: test_failing_mbuf_sanity_check(pinned)" > + " failed\n", __func__); > + > + if (test_mbuf_linearize_check(pinned_pool) < 0) > + GOTO_FAIL("%s: test_mbuf_linearize_check(pinned) failed\n", > + __func__); > + > + /* test for allocating a bulk of mbufs with various sizes */ > + if (test_pktmbuf_alloc_bulk(pinned_pool) < 0) > + GOTO_FAIL("%s: test_rte_pktmbuf_alloc_bulk(pinned) > failed\n", > + __func__); > + > + /* test for allocating a bulk of mbufs with various sizes */ > + if (test_neg_pktmbuf_alloc_bulk(pinned_pool) < 0) > + GOTO_FAIL("%s: test_neg_rte_pktmbuf_alloc_bulk(pinned)" > + " failed\n", __func__); > + > + /* test to read mbuf packet */ > + if (test_pktmbuf_read(pinned_pool) < 0) > + GOTO_FAIL("%s: test_rte_pktmbuf_read(pinned) failed\n", > + __func__); > + > + /* test to read mbuf packet from offset */ > + if (test_pktmbuf_read_from_offset(pinned_pool) < 0) > + GOTO_FAIL("%s: test_rte_pktmbuf_read_from_offset(pinned)" > + " failed\n", __func__); > + > + /* test to read data from chain of mbufs with data segments */ > + if (test_pktmbuf_read_from_chain(pinned_pool) < 0) > + GOTO_FAIL("%s: test_rte_pktmbuf_read_from_chain(pinned)" > + " failed\n", __func__); > + > + RTE_SET_USED(std_pool); > + rte_mempool_free(pinned_pool); > + rte_memzone_free(mz); > + return 0; > + > +fail: > + rte_mempool_free(pinned_pool); > + rte_memzone_free(mz); > + return -1; > +} > + > static int > test_mbuf_dyn(struct rte_mempool *pktmbuf_pool) { @@ -2635,12 > +2763,12 @@ struct test_case { > goto err; > } >=20 > - if (testclone_testupdate_testdetach(pktmbuf_pool) < 0) { > + if (testclone_testupdate_testdetach(pktmbuf_pool, pktmbuf_pool) < > 0) { > printf("testclone_and_testupdate() failed \n"); > goto err; > } >=20 > - if (test_pktmbuf_copy(pktmbuf_pool) < 0) { > + if (test_pktmbuf_copy(pktmbuf_pool, pktmbuf_pool) < 0) { > printf("test_pktmbuf_copy() failed\n"); > goto err; > } > @@ -2731,6 +2859,13 @@ struct test_case { > goto err; > } >=20 > + /* test the mbuf pool with pinned external data buffers */ > + if (test_pktmbuf_ext_pinned_buffer(pktmbuf_pool) < 0) { > + printf("test_pktmbuf_ext_pinned_buffer() failed\n"); > + goto err; > + } > + > + > ret =3D 0; > err: > rte_mempool_free(pktmbuf_pool); > -- > 1.8.3.1