From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0078.outbound.protection.outlook.com [104.47.2.78]) by dpdk.org (Postfix) with ESMTP id BFF18378B for ; Wed, 5 Jul 2017 20:12:44 +0200 (CEST) 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; bh=n5KiY8BYIMqXvMehr9oZLsDv6H36frTwERcOnOEzzak=; b=D1K8yBvK4IC1xXsOC34nbZvlNi0vnV/3l1QDbQxgzKkyBKr4Cg+/nRmE6gwsqJd4MGzL+Kw7maOwCNCyrn9/W4/PT8Zk1ymHyie+htep9zCOVuVoO3YzwjusZSTpzpL04i0tNjlRtsma0/GWlxHDQrzeVBGAZKjIPwOIhDdCBNQ= Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=mellanox.com; Received: from mellanox.com (209.116.155.178) by DB6PR0501MB2038.eurprd05.prod.outlook.com (2603:10a6:4:6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1220.11; Wed, 5 Jul 2017 18:12:42 +0000 From: Yongseok Koh To: ferruh.yigit@intel.com Cc: dev@dpdk.org, adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com, Yongseok Koh Date: Wed, 5 Jul 2017 11:12:26 -0700 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: <20170628230403.10142-1-yskoh@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: BN6PR16CA0014.namprd16.prod.outlook.com (2603:10b6:404:f5::24) To DB6PR0501MB2038.eurprd05.prod.outlook.com (2603:10a6:4:6::20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 08546370-c203-437d-6f8b-08d4c3d16e4b X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:DB6PR0501MB2038; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 3:Sj/Fxx2wniefQF9XujegKgsUYwoFLBNqwUSOKreMoot5Xs8rMzYkjKj5IITTibYJH6ilK+urqdjflbvfdWBBExVWbpLaI/sSR80mv23VfFfhOMl9AaFts3oO6w3oTIT1MMEE6htQ5Ba1l1z1B/ZaWcqJu/QwnVxJ0lNvTNIppwMTmYPLFLPiNVL1BBup5X3V662ijJQArIcABtu3qKgxZfHCtT5b2vubBBy7xl+SOpOkZib6+7DiB1+Y/hmfKWleXZStGLp9d4Leg6bPM9r0qi80/xLP3wIjdRTm2BxioH5ivH1x2Udbov63hyPKe8Qij8/kzXyvKwOecbgT+VFwhD62z5dYZfGPBr76SVfvyPzJNXmbQmQWaTo33bSrPBVbiGnQF2k9QWEwpc90STEwXSIKrp+Zgj0OjE8Or+x+8ouaRaUvs5K/NyMDwYpZ4QprwI1gMVyjFb1U6A+bJfzb+2wgsZU4xwLyl3J2fGUbxlGlWrY5upuv7GOndu3/F9NMFKhPbJwNNV18kBxz0HzYGJgDRFR99wtwDcNTjcZpxLPlsFqHWj7yeCTZVLleFtm+YLSEcCTcXVQyUpTfl+hYQ7dkHxmt8HRXhgHHX99NVYpImlym6Gjul8GAQEeKhauQfyvbtsj7nkwGkrpJa9loUELAz4sMNCUBOfRKaFRX4YdhcAsNK2xoxV6rMHmHF2VfppQQKaHbmsNtfMR3eTA4/2gX2M+dWSYWd4Tm53MYNKQXm1h5FFDsAarNbj+CklQ5nZBuFlENluruVlMGLEs+Xg== X-MS-TrafficTypeDiagnostic: DB6PR0501MB2038: X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 25:NFdYCzXxjaFiJnW9sb4jz+82C0sLKO9TMilT2LcCmYcEbHayqiYCT/WjeLqmdd7Av20jBRG3XMg9CYrYK4H+qX0q2Qzb0sFoVQeJO36ggm/Z7Db+tQtd/zV8n9uDdxVP9jVjthtm5yVHGqxfLybUOk/+vkOqn05LgYV0mzhnufhAEFRYwOGRT6fRm9Ih23EIpx7xtnlu+0tfEp69CLWnrrMd3N9maQ21O4XfrKGFz+fPCjg87V85KxOuWgmTnkUButSuDFW1pUWDGugM9XMsqe1REcx7LCFBQ+RAoj5pnlfv9c/hs+6wtVUZR7AysaVT5n0AYicVoyqxO7vZRLpJLyIcnXpUodQaQ1LpUIGYeo63FSr9k04gXxx9k4EW0BPFAi3z30mZ9ShaKCSprxiSA0NG0Mp0lBDzV2umvA9Fc3ofdoNE5hv39giUs+80J0rZwZu/tUYxgKmxoq/qczgXUHoMzZqgYm1b+vo8//whLQNDGF92IzhuCjQAMqbch90XMsq+t67W+TmEXOfZl+t2kgFM6vA5Nn0RnNNgN1+qX6x3dfEkSRKQpzCrJDVVJtHEnQ0VNV4mh37MLfMXjyeBEHrMMu26geMOQK3XwNGxvXA7UGtSsXI7IZVzAazP6X7y1VR8JmS0z5bRzYaH1zdAcYe1Sikl2dFgs022jFDKoyyDwRJIBYjDCS0razUmJ7rijDb/ff5xFDd/406jZ50heuANEtCLGhCpQc90eSdM9MLyKYTg0YKuObUDHaiwf0wejq1Gxn6I58f4jFdoT9bOg+2jCjR94fbDfooxj4GeSmfeqCKQcQijv/PbIaerdVFUbyV61BBB4tuc/lF43EsFGFCM61CuCK+G9hLMRMbsfFOCXvQZR0Ra3mUU+tyPiPi/tC5rl+6/hzNagGaGq87USut8OKb3eC9UOepF4X/AzqQ= X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 31:jXw6iEWwtXJE+/hlJkECO6x+ntApzFxTbT8NuVGrJ21V6lHrnZkeBBAgGyzz0nPfjHXhRdhyMy8QX8IdDEFIQJS9iCOoA443zOIOui8IWPV6G1cl7EZhiHYCwatjdAfGvadCHzCNZYCBvHjRvvpbgmCYFFUFubMnRKkuZ6CS6SWQji0xLDK6pgQxAP01Ync6lq184JJIOiFAG79+dm6S77/R5ZoFFsDpHQ7WJJFjFcsBOGtvGeWr5w5nLz2TAiqqyjJnCFgwX5BolL6h4cqJ7JbzE4X+bPpu+Ib5YlhgX/B1b1opHlKB/8PgSjuoBPEeR3EWTl91G6wgSxn9GP48PV+wTcxpuRRh8arEo9140igWhGyA67wS+DPW4IV36N58lf6AexI6lbc9Mm+oIcdCsVLO0hPr4pQQ6XfoXmW1MrWbzqsdr9DCCxCiJnrDi3DE+t+/FjXFzAUfiHvlRSpEPntuu6TV2U6L/LZUPrZBlYRfx5+Sbv9iMy+7LG7Wn5wny9tAXnSWIFzH3LlKhRaDhWFJsUpPn1NOHBiVvOGxv7Kw1D6ia1ZhvWaAJjPx0gZGlmaQttuIdgg9+7bcgPJHr3ZqRDnZtwgqQbaxdRk5lpDpq03BNEQtphfTotWU885GXIqhe9zihpYSnWoTKcRfgT5sUbH4Q9GwnSFdxoyUYI+L3Ka7Ilbj2Er8TDzS8rJgNhNOrbtX+BLrgTLJASVYaQ== X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 20:gkT5XfcklnMXpSBkcxS2VnLgZQ4JMmMj8AYGLkHXXx6dOpZqo2hwr2LzyZywGGv9tBm98Y3i20IIIeI81ymQvNRXqGemXrF7O+LiesKm/H/MOpbZmzzg+2EbEnhzpml9N1GUsP+sUvgA7RAFURiv255zP4YiA5NvZCOt5zXZ9XVPl+vI8V64/c62gGVjPAWJIl0RTV1+NkvJka1eM5r0X7RS3iprRwDfU9H5M7Wa944AztO4YFVSRX2/yQ0yg9FEr8DEQjn1MI7hGKxFYwgxoRBcKaxldUA+luTuVskGOBfJkfa3Tf79Sc8rYkABFORNiDqZ56DDCRf+BltmK7yZFXAboSn35u1jz8iFpdcyI90VljMpUQ0Fvv7lZJvem0lK9/SFvmBUBy+6DDk3tHYWqG+oUyB+xTRuGsh7n9x3sF6Rd/skX4zerEsu6uCjbxjjoOrqejLbyiMvzRG4bISuHfQ6ab9GGPfM6RzgzaAwefRZRIrKtpzBorpgG+mwf9FE X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(236129657087228)(148574349560750); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(3002001)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(6055026)(6041248)(20161123555025)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123562025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DB6PR0501MB2038; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DB6PR0501MB2038; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0501MB2038; 4:BAocbWEIuXSe6JwPSei6S7d/fyzQpzclL4wVuaXh?= =?us-ascii?Q?F7lyzufDUJDVM+4KujTEWFysNF1EzAZJF2pJji7CI8Q62VPmgmPs7mmDk8gO?= =?us-ascii?Q?M0TjGGQMiC1+lIdQMlir1472CAfezbYUR+EpQ6umWeTlB33rwymuSQAYlOZj?= =?us-ascii?Q?6fUzG0W/YsnTlt3UDhe75TN/e8VcP9XDWm6hav2EsqAxIb66xavz/kLXWsxz?= =?us-ascii?Q?zZRRxpKTbl24SjePRmqCs2fwV4WNQJ+qKgFbqUPluoSuTXjFoUD3R+KOPLDg?= =?us-ascii?Q?/IAQxmG0rC0vOsrfXgz4bAHCqUpiDTNlAojGIrXOvQYN1DWsy+VrIsAte0RW?= =?us-ascii?Q?9oOYVikAJCrEzevtQG+smIgOKFiLINP/eIFI5rwYKVHUIRbQ9OKF0VnIWtCb?= =?us-ascii?Q?xRTTyO8KbNDGDTo89/N6NgKJWPAvB29fe7FTQnm9WNk2mTXYttY9znAczV+T?= =?us-ascii?Q?kXpBrzMfJ5YFvUkA1Rf0aQ8xqsN/ER36p5OJa16iW1f3qs+9GodNSGJLFYtm?= =?us-ascii?Q?33InJhCy3If90l+t6eHeeuef2BfCLhxp8qH6Zi4yf3WzKtKzzp8yTw5jMqJN?= =?us-ascii?Q?X6u1xJmmMgLftQmFSR1GU/SoIEG2LNg+pwnKECBpnHKdO1P1+5RszAM+c6nu?= =?us-ascii?Q?82GMEcSVxs22qeS8e9oQVxVXYl5TJFp5e2FMdCivE+C4HWikezvDUxT4MIBs?= =?us-ascii?Q?Y+HpZc7kLyqg9DeJRHVtlOwoy5epL5JQ5m8zoy9WYztphbgscvE2zclecN3t?= =?us-ascii?Q?2jZT9ZN/r5Zc1Qt3A7wSvxB0lNOj2cgvuUDdr6fytxMCrPLjdgkNCxTPJUfT?= =?us-ascii?Q?jCIN05my6Oq9DEAe6O92aSfj6w6iRtAM541hpRRZJtl60+6SV8ZfrvhSmBZH?= =?us-ascii?Q?lpOvIG+7J2B/sjmD6QFTX7jZvSjZ3wmWUdLPbL4GrNbwrUBvE0fvCqJ8NrWm?= =?us-ascii?Q?b1O1L+/57CEqWsEbXMqBpIYeqByB/FUf+dR0foOORnTEzQUtWmglQRCqaizA?= =?us-ascii?Q?xKkHYlRGsG4ZKtuQ87ToKRLPJWqKtppw7jFzX249HsR0VBYBJ/+SrH3Daa+K?= =?us-ascii?Q?skOFK+4yo15EVWcEwj04MVBiR1sTgdZl3H7hHEKh5GEf8k66sHCJa0JAugxy?= =?us-ascii?Q?UpqJnYuPw6BmBeWxlxp1jXtT1oS3OYHav3W/20V1mWmLYr1+BZITBPjBEBLq?= =?us-ascii?Q?3OYV2vGLwTNzpQrDDf5BwaOzUubPVEIqNTtd2MSR4fzDeS1M/1wQhi+FRssw?= =?us-ascii?Q?LpesQnF3bpD3MIrV6Zo=3D?= X-Forefront-PRVS: 0359162B6D X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(39850400002)(39840400002)(39400400002)(39860400002)(39410400002)(39450400003)(8676002)(189998001)(33646002)(50466002)(4326008)(7736002)(5660300001)(5003940100001)(25786009)(81166006)(86362001)(305945005)(575784001)(50226002)(48376002)(3846002)(6116002)(2950100002)(2361001)(478600001)(2906002)(6666003)(2351001)(50986999)(76176999)(53936002)(42186005)(6916009)(55016002)(36756003)(66066001)(47776003)(110136004)(107886003)(38730400002)(118296001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0501MB2038; H:mellanox.com; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0501MB2038; 23:l4JNXpJNgky4RiI3gyjx7IkPiwrhnaYgrws/pB1?= =?us-ascii?Q?rSG3U5ak7Ej9/CrqPPteHeh3SjpnXiVqunbIuAF0NKH/OLwtH/OEa/nWbk1R?= =?us-ascii?Q?+HBLBP8V0DTG4ZrxyJxvQ2WwVck9Djnz7feGbxH5ICzn5xoF5lztnvoHg252?= =?us-ascii?Q?Mz440ApWs4g+P72PytyxtNAs3vmXnZ8+kOsgD2y6hz3sZD8iDTR4nO9ujUIs?= =?us-ascii?Q?3TGg9G0NXuk5imRh12tO8983MxL1GfoG0FHEfhDoM0vsRoDolNu36+ZiDH9o?= =?us-ascii?Q?dcihCA2zZyl3NMAF4XeKEAApbki7hhVTw19/unUezLUHg8GVJ/vLKO4EDRUq?= =?us-ascii?Q?sH+6TjzKsMQ3rPeLc4xEZ6Tw19Af4D2xKxoil8CPzQLpCMI9QVia3tuSBdDJ?= =?us-ascii?Q?0W0rAptx/SQ+VbHj8mEA47Y9oUguFGAUJdpNNC3DemxRDTKr2+aV7XwMqyWP?= =?us-ascii?Q?98UcbdOScxipxfY+HclReCDDdV/Sn9mB43dgY80MG/2vYJ6H9Zy7muPQ8olz?= =?us-ascii?Q?YAu8tA1kIFexRKG/0d7rUioHQW0YLCvGFyBgkGLV11ogGviaw3KE0j6z1PDp?= =?us-ascii?Q?pfUbqkbLMrJFxD7ssjX9GWLVM/W/oPQuY7KLZ/7VG8ssMstI7zXrNcLzlS4l?= =?us-ascii?Q?Qg7UcGhit6mxrrV76CpclQEM4aRrInl6eAWFRPG25GqinOatI9IQ+j7rVju1?= =?us-ascii?Q?6TH5hsncreo0gbpU5/ZAHoYSDQk596WhiG7nJAZ2vpYQK8mlaSGUVTp2eL6M?= =?us-ascii?Q?Xx+b7q0aq0tPN6ZLReWRQ3973gROEmEP9Efj5/iE7kS9GcMlx04DRbBuuZqV?= =?us-ascii?Q?7vQIm+XfGiAC7QcsuAEA+jIa/+3zyACnd14hc3GholBCEJgXW5VOrS9LBpm1?= =?us-ascii?Q?vLJMG7IQt8VNdf9QA2lbPdOv/25ovgMiGbR3SZQ8Z1LYwowyUH7KG+BDcbmF?= =?us-ascii?Q?6EcpLEBlCQx3Amb2KV9I4EgPLgxdvz4LvPUa0s8U1PlNWnTjR0bh/vDRKfmz?= =?us-ascii?Q?NN1RufGm6/kv6QM/w0lvFq+Q66zZ8K0n7+DOg53Im+m3rHUKjSea/X8H/qub?= =?us-ascii?Q?iWO1lfeL8D9/8bNtPhQUOGOk2/cWB2RETpsWUFnPfi0guvhkMyCu7x/5tAq8?= =?us-ascii?Q?csrGllPtBJI8=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0501MB2038; 6:RBJ5N9IBTVy2viV731mpe6ECBKvgOSpa6Zr7reav?= =?us-ascii?Q?iOqmJ10ampuJg4SiHfuxR7Cn+zp3/4kTeluT68CEV3GZzt0FfpRGf9+Ot7hw?= =?us-ascii?Q?A8wGonGE0QlG4jBKjJz/JpyxJSn3jBhWzuq91Zw/IFfNcsncMgeirc+Z3i4t?= =?us-ascii?Q?lQyE6JvpiCqUY+xe2/cCIuBm20vePYLtg3dHc7WfVUWwtCASbQM5Mk1VTjDd?= =?us-ascii?Q?CqJSmOvpp9IxMym1RTUs+ZF/yTOaUVg+1PUFHFFn6O9eTuwXJF7wjS4ZYvXR?= =?us-ascii?Q?cMsH4cJgXGXwPPZhrZTz/ARjHkeMtHf/gGjPVDdiJRI27ki+tlGLDlNldiAQ?= =?us-ascii?Q?emuAR7wm2+IIjY520RwLtC1/MKJkgeNtHFZHROpoK39eaowF3krtd0NVW6wJ?= =?us-ascii?Q?Zohu1VjydTxGxwuP5dCYQ17apW28Vapz9va6D3OuHCqg7Tl5gF+h+Xx6glg5?= =?us-ascii?Q?ppD0NlLj+escAKAGhFliQChpvBpW+XL4KBB8wkcgQtilm4kWh3izwjVMlGA8?= =?us-ascii?Q?LhFgGBJ0TbWOSi4qtUiaBlJkh3dNwFZQqaamiw0hry6Rs84qi3UdvL4dEOjA?= =?us-ascii?Q?jO1Twbr3DsFDWYvLdxXM/973ADHYKDVTCk5G6Uw2k4v8q7ELRuuwHoyHEFEQ?= =?us-ascii?Q?V6z/sEkOIBL5TBoyoJjSV2EUyWfr8PYlCTx/YqhjcOaJHLWIZKQs4FYABMv+?= =?us-ascii?Q?w2p1exLCi03dVmlDKnRbcgqTIEx5Zb0AozEnsDn5OVCd7UVPbFareHueECEk?= =?us-ascii?Q?qFsbF7nQ/KN7bN4wrU3XI7JFij2jZBXjb6zT/+gfHVMqStsj7eHSvOL2CpjJ?= =?us-ascii?Q?6O65A8GWwGNlEQoxg/LaM9pgc2N4DIwTnkVI0eZ7SovyxWkoED1Dt6zfpYKX?= =?us-ascii?Q?4ygr0gaPWgEf6gaaY4RMTe+YvwoyxYHVnyzXLjdcNePYiqTKv30za0M42rwp?= =?us-ascii?Q?MNhy6oNmMKl9drFcV7slk/C4Iwrb0xNuYWUI/m4cjyEBi3bIl1c2cyDd5C3F?= =?us-ascii?Q?+aGB6Kh94vsJpyZn2PXWwJRl?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 5:biglR/x3xeY8sPopYbaEoZtRnuAplKAFG6jQMwGaet/22CYHyC+HdSw7edAYtnDGDGCsBzd2+Y0Hu1+kqLBVbgDKE0HwTLUQIzZ7RaUQRscralKcWDtqzyKftAz6cO08/5QNjhipEzipY/F6NGzUyGCEXIasp90BnQX1L0j6V1CwOb/BLaZx+7qNia/tmEju/LEU/coGIaMKcYaEJxvcYQwdDptw4Veynew43gxKIUjxrfuJp0n/hpMbNVPreoTCtK5HxQvLjKiKCfpsd9NBEM9WQ/IYOssBB/Zaga7wL33HV9AMjjY4rT6IYn4MUFAzKvOvbWLj30MkjcT2407G8EsM/WqLRpV768WZEccnBFklHFY0aO4Hlv55wc8m8JMG2GGSIbbqxBgasBUUTxnQ7zqXi2/VLYoHKSFseol5IJp8vKGInf6sxORH4mTzT5QK4/mQ8I5v06CwxwVR+NPru9pCv/zLY7XyfrZPjF4NCRthhGy5Bu1dydhdJMqaC+Ag; 24:9ssYh4bFD7S2mTt80L6DgOFD3KHFZWgcotCoVd/Ox2mBKJjqnKfcfx/p29aSlOtF+gYS+Ak712PE5ggAPBaI29flGhKShJw4I6hEGf0yovA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2038; 7:dfkLGzCmvRv4EhQsaGHzbuIe7pyCHZ8uVfRqXakbyAjSBcIh6utqz52j8Rd0cS9SFkbAWvI6Vr+OIiAgBZXlWS7ufTJYKzOdRdkBjpSrFdoFp5wqGhgdRB48dxJsvEYzZx56Mwx2Vpsyr7Q01S0y1scetzkZ5PRO0dnfwkVulR60TW6hK1JW4Rp7D/O0bP3lvEWbeYkyK5Na9nLnqlJptbJsJp/QNzq4zvvb50uOXSTAO3zC7iqyjkBhg4ew9vEfJx1iAX6M/dRANnBHKrr/1VJwOritCTbLiM82JKcbdjrJ42xmXxG90/IufQDOGtLLWfyEjnkhPc/TbLvE5Ulzy3DZmtot3zkxZOQD+2yp4LE4SZ3eJcEe7+aDudd3YkZUUtp9luaR1ZoDdl61ZHiRPreeaW1OoQGFqdMW9Tna9qiJLupU7cCDKpJUFc+axOchcGZlf9whvEoXtqCjzFBEC5i+DXimM53JWZ7f1naonSCd5SAAFbryzKz7t+Obb0dCf2qBcFP6ooUzI2YWCEZ1Ksr7dw4WJV7f0+wcH4H+tnk7O5RyXOMyIL65D7pXibe2TIoH+5ln6tsHhTCD4zdWyi17LPCmDPeAozKMGPzj419X3xq96AGbGpx2D8yqsczcBBzZhLA10y9jHP2aKMs3iMgcluJOkJyBXPjUrk4c+iyuSltbml3zg5B/PiFZdSR/27mvyvfCIocXb8mltHCAPn6q9Qq7RPKfLXy3A/mwBlgSlqmGFR9phGNxP6HNNMKU2LKCbG6xvIqIm7orM0GgabNfJboqJ2GbKlyDHihRSxQ= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2017 18:12:42.1007 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0501MB2038 Subject: [dpdk-dev] [PATCH v3 3/5] net/mlx5: use buffer address for LKEY search 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: , X-List-Received-Date: Wed, 05 Jul 2017 18:12:45 -0000 When searching LKEY, if search key is mempool pointer, the 2nd cacheline has to be accessed and it even requires to check whether a buffer is indirect per every search. Instead, using address for search key can reduce cycles taken. And caching the last hit entry is beneficial as well. Signed-off-by: Yongseok Koh Acked-by: Nelio Laranjeiro --- drivers/net/mlx5/mlx5_mr.c | 17 ++++++++++++++--- drivers/net/mlx5/mlx5_rxtx.c | 39 +++++++++++++++++++++------------------ drivers/net/mlx5/mlx5_rxtx.h | 4 +++- drivers/net/mlx5/mlx5_txq.c | 3 +-- 4 files changed, 39 insertions(+), 24 deletions(-) diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c index 0a3638460..287335179 100644 --- a/drivers/net/mlx5/mlx5_mr.c +++ b/drivers/net/mlx5/mlx5_mr.c @@ -207,7 +207,8 @@ txq_mp2mr_reg(struct txq *txq, struct rte_mempool *mp, unsigned int idx) sizeof(txq_ctrl->txq.mp2mr[0]))); } /* Store the new entry. */ - txq_ctrl->txq.mp2mr[idx].mp = mp; + txq_ctrl->txq.mp2mr[idx].start = (uintptr_t)mr->addr; + txq_ctrl->txq.mp2mr[idx].end = (uintptr_t)mr->addr + mr->length; txq_ctrl->txq.mp2mr[idx].mr = mr; txq_ctrl->txq.mp2mr[idx].lkey = htonl(mr->lkey); DEBUG("%p: new MR lkey for MP \"%s\" (%p): 0x%08" PRIu32, @@ -265,18 +266,28 @@ txq_mp2mr_iter(struct rte_mempool *mp, void *arg) struct txq_mp2mr_mbuf_check_data data = { .ret = 0, }; + uintptr_t start; + uintptr_t end; unsigned int i; /* Register mempool only if the first element looks like a mbuf. */ if (rte_mempool_obj_iter(mp, txq_mp2mr_mbuf_check, &data) == 0 || data.ret == -1) return; + if (mlx5_check_mempool(mp, &start, &end) != 0) { + ERROR("mempool %p: not virtually contiguous", + (void *)mp); + return; + } for (i = 0; (i != RTE_DIM(txq_ctrl->txq.mp2mr)); ++i) { - if (unlikely(txq_ctrl->txq.mp2mr[i].mp == NULL)) { + struct ibv_mr *mr = txq_ctrl->txq.mp2mr[i].mr; + + if (unlikely(mr == NULL)) { /* Unknown MP, add a new MR for it. */ break; } - if (txq_ctrl->txq.mp2mr[i].mp == mp) + if (start >= (uintptr_t)mr->addr && + end <= (uintptr_t)mr->addr + mr->length) return; } txq_mp2mr_reg(&txq_ctrl->txq, mp, i); diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index 66593679f..688ee9028 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -77,7 +77,7 @@ static __rte_always_inline void txq_complete(struct txq *txq); static __rte_always_inline uint32_t -txq_mp2mr(struct txq *txq, struct rte_mempool *mp); +txq_mb2mr(struct txq *txq, struct rte_mbuf *mb); static __rte_always_inline void mlx5_tx_dbrec(struct txq *txq, volatile struct mlx5_wqe *wqe); @@ -352,7 +352,7 @@ txq_mb2mp(struct rte_mbuf *buf) } /** - * Get Memory Region (MR) <-> Memory Pool (MP) association from txq->mp2mr[]. + * Get Memory Region (MR) <-> rte_mbuf association from txq->mp2mr[]. * Add MP to txq->mp2mr[] if it's not registered yet. If mp2mr[] is full, * remove an entry first. * @@ -365,27 +365,30 @@ txq_mb2mp(struct rte_mbuf *buf) * mr->lkey on success, (uint32_t)-1 on failure. */ static inline uint32_t -txq_mp2mr(struct txq *txq, struct rte_mempool *mp) +txq_mb2mr(struct txq *txq, struct rte_mbuf *mb) { - unsigned int i; - uint32_t lkey = (uint32_t)-1; + uint16_t i = txq->mr_cache_idx; + uintptr_t addr = rte_pktmbuf_mtod(mb, uintptr_t); + assert(i < RTE_DIM(txq->mp2mr)); + if (likely(txq->mp2mr[i].start <= addr && txq->mp2mr[i].end >= addr)) + return txq->mp2mr[i].lkey; for (i = 0; (i != RTE_DIM(txq->mp2mr)); ++i) { - if (unlikely(txq->mp2mr[i].mp == NULL)) { + if (unlikely(txq->mp2mr[i].mr == NULL)) { /* Unknown MP, add a new MR for it. */ break; } - if (txq->mp2mr[i].mp == mp) { + if (txq->mp2mr[i].start <= addr && + txq->mp2mr[i].end >= addr) { assert(txq->mp2mr[i].lkey != (uint32_t)-1); assert(htonl(txq->mp2mr[i].mr->lkey) == txq->mp2mr[i].lkey); - lkey = txq->mp2mr[i].lkey; - break; + txq->mr_cache_idx = i; + return txq->mp2mr[i].lkey; } } - if (unlikely(lkey == (uint32_t)-1)) - lkey = txq_mp2mr_reg(txq, mp, i); - return lkey; + txq->mr_cache_idx = 0; + return txq_mp2mr_reg(txq, txq_mb2mp(mb), i); } /** @@ -770,7 +773,7 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) naddr = htonll(addr); *dseg = (rte_v128u32_t){ htonl(length), - txq_mp2mr(txq, txq_mb2mp(buf)), + txq_mb2mr(txq, buf), naddr, naddr >> 32, }; @@ -809,7 +812,7 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) naddr = htonll(rte_pktmbuf_mtod(buf, uintptr_t)); *dseg = (rte_v128u32_t){ htonl(length), - txq_mp2mr(txq, txq_mb2mp(buf)), + txq_mb2mr(txq, buf), naddr, naddr >> 32, }; @@ -1051,7 +1054,7 @@ mlx5_tx_burst_mpw(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) addr = rte_pktmbuf_mtod(buf, uintptr_t); *dseg = (struct mlx5_wqe_data_seg){ .byte_count = htonl(DATA_LEN(buf)), - .lkey = txq_mp2mr(txq, txq_mb2mp(buf)), + .lkey = txq_mb2mr(txq, buf), .addr = htonll(addr), }; #if defined(MLX5_PMD_SOFT_COUNTERS) || !defined(NDEBUG) @@ -1297,7 +1300,7 @@ mlx5_tx_burst_mpw_inline(void *dpdk_txq, struct rte_mbuf **pkts, addr = rte_pktmbuf_mtod(buf, uintptr_t); *dseg = (struct mlx5_wqe_data_seg){ .byte_count = htonl(DATA_LEN(buf)), - .lkey = txq_mp2mr(txq, txq_mb2mp(buf)), + .lkey = txq_mb2mr(txq, buf), .addr = htonll(addr), }; #if defined(MLX5_PMD_SOFT_COUNTERS) || !defined(NDEBUG) @@ -1604,7 +1607,7 @@ mlx5_tx_burst_empw(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) addr = rte_pktmbuf_mtod(buf, uintptr_t); *dseg = (struct mlx5_wqe_data_seg){ .byte_count = htonl(DATA_LEN(buf)), - .lkey = txq_mp2mr(txq, txq_mb2mp(buf)), + .lkey = txq_mb2mr(txq, buf), .addr = htonll(addr), }; #if defined(MLX5_PMD_SOFT_COUNTERS) || !defined(NDEBUG) @@ -1687,7 +1690,7 @@ mlx5_tx_burst_empw(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) naddr = htonll(addr); *dseg = (rte_v128u32_t) { htonl(length), - txq_mp2mr(txq, txq_mb2mp(buf)), + txq_mb2mr(txq, buf), naddr, naddr >> 32, }; diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h index a21995030..d0f508e90 100644 --- a/drivers/net/mlx5/mlx5_rxtx.h +++ b/drivers/net/mlx5/mlx5_rxtx.h @@ -267,10 +267,12 @@ struct txq { volatile uint32_t *cq_db; /* Completion queue doorbell. */ volatile void *bf_reg; /* Blueflame register. */ struct { - const struct rte_mempool *mp; /* Cached Memory Pool. */ + uintptr_t start; /* Start address of MR */ + uintptr_t end; /* End address of MR */ struct ibv_mr *mr; /* Memory Region (for mp). */ uint32_t lkey; /* htonl(mr->lkey) */ } mp2mr[MLX5_PMD_TX_MP_CACHE]; /* MP to MR translation table. */ + uint16_t mr_cache_idx; /* Index of last hit entry. */ struct rte_mbuf *(*elts)[]; /* TX elements. */ struct mlx5_txq_stats stats; /* TX queue counters. */ } __rte_cache_aligned; diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c index f0729a2a8..ac9dfc5f0 100644 --- a/drivers/net/mlx5/mlx5_txq.c +++ b/drivers/net/mlx5/mlx5_txq.c @@ -149,9 +149,8 @@ txq_cleanup(struct txq_ctrl *txq_ctrl) if (txq_ctrl->cq != NULL) claim_zero(ibv_destroy_cq(txq_ctrl->cq)); for (i = 0; (i != RTE_DIM(txq_ctrl->txq.mp2mr)); ++i) { - if (txq_ctrl->txq.mp2mr[i].mp == NULL) + if (txq_ctrl->txq.mp2mr[i].mr == NULL) break; - assert(txq_ctrl->txq.mp2mr[i].mr != NULL); claim_zero(ibv_dereg_mr(txq_ctrl->txq.mp2mr[i].mr)); } memset(txq_ctrl, 0, sizeof(*txq_ctrl)); -- 2.11.0