From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20063.outbound.protection.outlook.com [40.107.2.63]) by dpdk.org (Postfix) with ESMTP id E8FED2C13 for ; Thu, 6 Jul 2017 20:41:28 +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=jodF4nzIQcogRw5eSLafLWbYCJ1ABADQdt0U9ZQv9D8bzP8sp7D39ltSojSzMEUewlki+3vlYM8PXmUicFXNxIPJZAaay4GvCT2qNQIx4Lj23muUev0qB1cdyKYnhCslINJlZAj/OM4WJT3BfDu2+d7rptmOMgbpZTs+yg3Uw1Q= 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 DB6PR0501MB2039.eurprd05.prod.outlook.com (2603:10a6:4:6::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1240.13; Thu, 6 Jul 2017 18:41:26 +0000 From: Yongseok Koh To: ferruh.yigit@intel.com Cc: dev@dpdk.org, adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com, Yongseok Koh Date: Thu, 6 Jul 2017 11:41:08 -0700 Message-Id: <3d27700d6712a4711366c603cbb5674aa8694fd7.1499366233.git.yskoh@mellanox.com> 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: BN6PR08CA0055.namprd08.prod.outlook.com (2603:10b6:404:b9::17) To DB6PR0501MB2039.eurprd05.prod.outlook.com (2603:10a6:4:6::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 06242768-c582-46f1-e7f8-08d4c49e9c6f 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:DB6PR0501MB2039; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2039; 3:7JtibvFiwFS0Vg1R6wJ16Kyn9jy65L6eZSJ/p3ThNKYVTAs4uYRXa8kny9tZ/Jmb5ql1ap0xJ7DnU7RJr5CfIpXLrk4R4Yw49t4s+pM69Z75tp87sUuoyWIf4bjepFbKtksr8VhfZPCBgCaYXyyHJ5HF0BU+m0+8C7qtthtoxhyk6pDhNjTBUwVOSFMHJYKdbYb7GVH8dOMjEd4s+lHysilVFQ3NLSv//9xCgYrpKaACgQfN/Ok7G1/zzB7P684MEw05Bm1FhW9j+IJppRuwNj7wV9nPanKV3D4ZjeQrjXjPay/uhblO5ViPZaF+8JGN7oJN7qUtXj0c4Vbyvdnyog07sDIpbyiRSVs6OzoSfuBU+/bBvNCQ/uO1Gu++tkY3oMuzp+hTmcvGZ8C7Zq8Wg415w/jITiKtt/DxcfZTNRlaDlFwgyC75G7XeyrrCh8KmP37/qmyLkC3qrdRubRvRKCFOlUhjqygDVbNWoREQC7DdQ2OXmkXeKVZgBkx8FDO6a50VEEkB1pf6E/dKW6IpCdMYGRZaxjl/9eo+NQ2sevMNOnLzulcoUC00zdWzayQcWDW8qKzYqkOlKVgcFcOHGw4SKLQQiSNbmgK2EtWyhSzAGBXefCmfjS6ztXNPvKv/jkemCdEtVQj/m6PY0qiHoUg1CpYGWYNHHMDccW12HjXGDUWTyVsPgg1QxuSDNjTXOpEPIfhCZ9GOWE0GeoobWfGpM1jvckQo8SjU6bIY/2q1zRxUr7B+m4JrGGkpsROy9juojFW5ryATOSqSyjG5Q== X-MS-TrafficTypeDiagnostic: DB6PR0501MB2039: X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2039; 25:wxhoOcLuiWmRzI5oVUlTNo1iLcIxz/tUp5wBI2EcO2KFjo4VQt2dqbI7921wJ/eleSJgKB8vePnJ+rAsTbjN/P4J54JDR0KnhRvWt/xvarcdUqlbyrOFRsnPefegRUghq+QYlVbchQfJLOB4ebDej5Pv9tnVyrB8bnNxY1MKsJOK/2tSckV9Jec+NIlKP7PSFOaGaFPY4ZmgRspgPR1hIlbIHbuaUqnTX1CmizrPZR20DNUcrBkq+DRrxW9ES7R2fRZAnqktNfBL6cmS/XEIp2Latp8AumgXCyzIpZMlBRaEkmziv0MEO1qOQork2T+d+dTrZbXQyNXGjBFBr4W+LtmPEnA2uwwFVGpC1BKKfg4DoTpeqMZ4N8L8BJH8N4tg6Uv1eZMZZJhgD4pHECrCEVkwlvIPN/OLbkDmfQ8mMynFLlu0pWPrAvdp9g4p0wY3jumKGF9HEk+PKYhdYg06+eZqdNvYnC9nGz/jEkqWZfzbDLkShMsuZ1U4z1Wepttcv6AeuWZiBCisaVkQsa4hGhNmOWf3T/FbT0xGyzPSo4weK4kz1+XfI2iICniF+GMeQKFTW2fR2rMc5Q99dInfJd9A6nQysf1q4CmBenHrDn1m39ExmKn+oeco7Eb5ACp7PNtB4fGQ3PbniGC4qdraAcukOQHdDDbrNhJ++qXN/O9+IQlwMcUL2tJ+z7MdR/KtyLPxOJ/hKD8tDL+5EAFtMypOOt93OJv7Tj8GBo7UsvMOUyM0PbXNT0Izs2KbAeBhTE8LaHt0z8w2SHgsuJOkG00pHsm+dXKZauhszdwQB/Yr/7m8FEjwtxSTXxnLHvSSnAsW7nmQAEth80d224HcCSprh+Hj5z/+1XzzTwxczOkdmYq/bk/bCahQYWsayXVOH5/kcI+RX+DTudrRMTx3UeIjgjl8RAu3pZbwqlYWLbg= X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2039; 31:H5wJAkUVbZxoyhDHLGlJQwaao9koGxgagxEMe/6nDkdvMQh6hnYINy6phcNUfqPhiucnHoLBr7a7N3py7naYxqb7ncpTE7ltynIDzBZxCQHnngFhrkcVzQu5WUBR76bdMBJK1Npl5q3JnWuAtvhuQKBHdrECw0E9hBF0ywuDJ57umnQMx13EkfMt4H4hWHk73NAFiKbo4WJrqI3f/hsnE0un9kwSLOYX0tptLy5dNS3iQnjcXVpSD7DKE7LLmdBGZhTJRyoYcLuSHcgs2PY50BmFQS/miKqKoQ/N6+P+7n0GK9WQ7MK+KnXurDP6lf7B3T58yIkV6e3NYpSwweoLkSnwYmGBO8sRbk4e0Xz6B/vwJcl4cQtNZd4O4Bsq/UFqCVnN9Jz6+st0nFzwACvVmpBXF4vLmiwmjBO42KsFC0SSL/ZzXAc/oeREsnCGvM9/VYVdym9IRZFbptrbDEQqqZQq+M0czbu4J8N8MdSm0uXXmfR+AagArPYbk4/urinsZ/A5LrLeDqf7kNlfBkqQ4cjefNWiFtvzeim51BvjbjQIDXN2FAQGzcdyKhD/AG9q2cCfOCjsF7Kdf43o1ko0Y1Xnlon3ZgZzXCAMruG1Ib9yee5iPadLxdVC+0BlAR7OREjx8zt65rZG5Eb49EKoqDseAsKERtdn/sW/vslilri617iuVSZFF0UOWFmS2A/IOOP/umev6s3odpp/erdBWA== X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2039; 20:+Pj1FJvJWvmmHcAvDBkYHPt+2lrmh0yRw2pK+1Gimg0SCHmNDob3PHYWlhl+pKqWZqQ68w+QErtsvPYLkiw3xu0Wh1RnDnntvWzbbS1BTIMsAHRYco3LU7Q56SkVuzz5hAGLP3jqJ9oCdndVdjoL5gIzuru5YpvZyrROBqrqITmzRH5h1Jm7zkOw/Kpy0lVy67OuvqBP9MIjTsxdgOhdIbwac5IhosnDZkHp7iLYo3Evvu/V7BBT9OHAKsFXtOa9ruHE680rxrZNMUN+N4NvdyXug2OHl19ZG3Dml/EnXJuyh+iUDC7uC1jQQtx0bclvUdTuHbg7lUBjNZt/YGpTGTO/SpRYqJPpB7CzaiVhPDYuJSFNwyMOoYKj+T64kYqy8cvOZoM5lMlTRbH2nBw5SXZNxLvjJ5a8apxLXXcgeovycgZV9FOyaK8VERU7c1eAFjaU4u2u0W+PgCDUlbXQbDPLDVsfKJmawaajMYzMT4FJcJA+8sJMODap87sqtE3W 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)(2017060910051)(8121501046)(3002001)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(6055026)(6041248)(20161123555025)(20161123562025)(20161123564025)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DB6PR0501MB2039; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DB6PR0501MB2039; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0501MB2039; 4:el4aAOmCqnDL5THDreOjL2Prx5ayuSZeeWeKmRtV?= =?us-ascii?Q?+sTPm9APddsBnEKbYS/74HRPaFXsHL/u5S1k8dVH5XIMt/7DpUpUTD3LEoC9?= =?us-ascii?Q?AHPRBDLegnkQs2npUYo+/q/gb7uyjVmpzDMXxyWT9c6v5TtVdr1KDt1VUvH0?= =?us-ascii?Q?ubUSp/eXofAPoimmINa5z5w6WMV3WPkH7gJ68uqTRvyId2RzpDp+YTu7PwGa?= =?us-ascii?Q?ImitQhHcYyZ0ivpbZ3j9Zp6xu9Ie/s7RAL8QZwOIIpeMba2ACuqJ48avvXZ8?= =?us-ascii?Q?w04+AC1xtQm7usilaVzLPz6GfZoLU2isA+DQYWfU7ZcMMca9IiJ5/s2mZGMC?= =?us-ascii?Q?aQEXIyKoQoYxxyteYdz7VIUCWP6SSw753CeiL5YIeUyrqdCjAZQCHqTEvncE?= =?us-ascii?Q?3B6NUOUahQ6gpIt86ZWGlj8TZ+QQKg18T44U4OfrNEKRWwzxiBnZhe73r/KW?= =?us-ascii?Q?e7WrS6PPp/9KxW88X1X8iIajXJEKW/kK3XS5pKdJYv5PJ4Ag4rmJI2XcLAe8?= =?us-ascii?Q?SxdF7ma9dBJWjj0g8MNcIobni9lbhilsvAyST4C0/85ZyiT7JtNwEJOsoGvU?= =?us-ascii?Q?BsQXosknAJUiJp0UdyWS4Epkt+mDFmBKA2JCiB+lmDRkdawjSSjyx32DNXjx?= =?us-ascii?Q?a4e20+FwSRBFhYEiGg1G2oqgydupWHOcAg8gHWZj+yrnbu7fp6Y8OoACIenY?= =?us-ascii?Q?JJDnfE/k/Rv9AhmfX/cjy33T9NeG2SnQlbphYlkrXe0EQtZtLGAlE5FyT+BP?= =?us-ascii?Q?9QmhgGO/CpCUOBKwq2V4t7YHf9HgzpELdoLspHBPJfLcrIpwuYVtJfT4flP2?= =?us-ascii?Q?Pk9UpOh6wA2wFRBn8NIkh1BOmP7MhrTxQYZlpSpeIy7jV08cGdgpdX9F9no2?= =?us-ascii?Q?l897NfIhkSfCEUY5OU/+XahhRNGFNrANpGZfWRWSYViyQXImDFOyPGNtVwu9?= =?us-ascii?Q?NsMp2WiCLsPe/pbeQjLvk35HI2f1nQotsNgcbZ5fiqrlp3x2aO769EHgXXAU?= =?us-ascii?Q?d31IRJsdsylxHLuuhda8TSv8urNY2rEmI2ahUPnsV4aT5X7BHCWXQOPBnCDR?= =?us-ascii?Q?ZGxTqAxntPNLwYgUvD1G24CfvIwUiX9GMffWEoykp5OgJA7pClIJU0X2QDlf?= =?us-ascii?Q?lHkpj+yyi/7UN9hHoTUmyiEbgj9kYtIlrJ3+qXPL4263dyJUP9Ehz0zAy4Wk?= =?us-ascii?Q?7Zfs5IMBbHuMARIYqOEjy7R+b76MwLtWBRD60ujE73y8H+51a66RBbNNCW6O?= =?us-ascii?Q?4jucWZL45/tTqtPoAoDp56FHvC351FF+1LlAtkAb?= X-Forefront-PRVS: 03607C04F0 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(39860400002)(39450400003)(39840400002)(39400400002)(39410400002)(39850400002)(5660300001)(3846002)(6116002)(2351001)(189998001)(81166006)(2361001)(2906002)(48376002)(76176999)(50986999)(50466002)(305945005)(7736002)(5003940100001)(575784001)(478600001)(25786009)(8676002)(33646002)(86362001)(118296001)(42186005)(47776003)(50226002)(4326008)(38730400002)(53936002)(2950100002)(6666003)(36756003)(66066001)(107886003)(55016002)(110136004)(6916009); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0501MB2039; H:mellanox.com; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0501MB2039; 23:xJlKvf4W2EAI5quW2EwfO/dK+tfaj96m3o1sigU?= =?us-ascii?Q?syJD5K/RxwyVLul9olR6ZqeaYyZUP7NL4re6mw2acrPZ9/lsPAo/UCkr3fQ2?= =?us-ascii?Q?9iKDJiP/SKcsS6f6eYPy9rvwWPbYeN1lK6JoRwBZvTZEYvKkvQ/ikAvfG5Kn?= =?us-ascii?Q?FYmMuttwJVR8/U2o5O19Iv++D68jEn/tzats7zQ5c9uIkkkEtd29FMF2yg2C?= =?us-ascii?Q?3g83ZAlLs/BWSRsDlwKWHkpe+pA2JXY7atxIJuXSuJXzshsR/jcnGfyGQ6+G?= =?us-ascii?Q?O5VGyPJCYa28ntRGonOHUgUARWQz14yR6h/9SZv03IEbSqn6YBAKppHrrpoa?= =?us-ascii?Q?4en9ade1dhR/8PtByG0/Wi6s7hsxtGXy0aSrHRKfJ2UNlSnLPqJzOipdylqy?= =?us-ascii?Q?5XKeq6X+lMjLrP1o/kSgg0kJYKD7XjCW2pLqSGktQ/hYW+48aS4BKdJxiaq7?= =?us-ascii?Q?n6su6izhLyMVd5obIBEySMeepnYaJoT9FTzGwDa3TtgHCVBjDW25krfB8wb6?= =?us-ascii?Q?zM5Gqs9VnikBg7b3jueHQojHvU6BnQndV289fQPtxZwStaMCboMXYQ/omGlc?= =?us-ascii?Q?ceKHEpDinLqMytG9OADMatdVP1TNHCIBZg5F4VCXJkbyupLKhb3sAHKpRPvE?= =?us-ascii?Q?ivRIMT+n4Y/nkCUesrVyC+AA9kBY/dyUHABUCJmgyo56c47DCHaQ0XbZXJVR?= =?us-ascii?Q?sD46l4kXYc88Dk5b+IOpdSK7Iv2KRjeUr4QZXaU9jUU84746LTRKdwVruemL?= =?us-ascii?Q?FFRTdF508R4VkixfO8pc8LF6oElo8+jgKXRdsok2nGHLwh+xEAhGBJtQ/22i?= =?us-ascii?Q?ItUA9UZkJSJx5s1S3CXRMCd5CeoJxSm6233H4tN5F1z8HrzF2cvaodb4gusi?= =?us-ascii?Q?0g/A1C3qOL6atD1bGccW5EqzQCETc6NFEz3KOMUSbEUdwRcQY1h8WFC+PxDS?= =?us-ascii?Q?E08FQg6+/XoH5F/juObbK3DACINzUrZ1KSxb3KpdXAOvGappfXVktRIhfj+P?= =?us-ascii?Q?lzQGrbmQX4H5cE72xWcx3VHliNT2VTAwEvp20ivZs6mxtTnVeA1BX7sgnw7z?= =?us-ascii?Q?TGIRySxoKW5sFXQKCQKqzSZ8l4rgrM8D046fpd3bNM7k5HAlqUHnivFVThhu?= =?us-ascii?Q?Advzibxrdtp4=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0501MB2039; 6:kJuGuA9M1dSXnZ2usWlWoA23PSUrAPGGNXFL3xjj?= =?us-ascii?Q?TOcsd0mmVeljvz3mgVfAMQsclMiNt4t3rmWfwUVuU/IuVktiDE62UXY9yF/1?= =?us-ascii?Q?mPop4OyMY0DhUgsIWP9rdmC2tx3Z/uZ/drK/PCCSst7Jl+vFlajwtF+Knpk5?= =?us-ascii?Q?FYngPcrOsHMlJraKBJFWnBhuTo4z4qkmFrDlY2Bwwvrljrn8W8gohRBf+evX?= =?us-ascii?Q?IoeVvjN7XgpnUGPjHMxjF3hFKB+xVHfhYE3FZeZrSMDTcD8dzvDm2GzcBnlD?= =?us-ascii?Q?RuDWF62eyKku0x+g3yol9zyZFE1q3hCLxcNT+XfOqNo3SzjLe1jmyelUQcq5?= =?us-ascii?Q?JLANsUjCZBTesxpaaupoi1xFKPAzLg8/gRS68JepSG2JLNnXvYbaEPNwasky?= =?us-ascii?Q?yQd5IwglzrR63rxph1HnoFf+LHCHrI2f5Mewc/xRRrx+QRb7Gujdg8Z6YvAu?= =?us-ascii?Q?j/6OsEiuH4px7hXKwrYcrC3EKQMJh70kAtHE9h+JzNkQLcGS1Ss4yWwqiLrS?= =?us-ascii?Q?aNEMpP1TnIyc8IwdtMeCo5iz19VUkVmfFNedj4313xGbZtMJYB3ozicRPSkY?= =?us-ascii?Q?oiu2vrDW+f9FebaSfUsHf0kLV/q5ZDMhdzLS0yS8ivp0e3hGG/tIA2pgd4OM?= =?us-ascii?Q?dQ56lNi1FmlXiYdd/MnUrjTGPfYqBGttAddT3EAU5hRB/dvqhh+g778mXvBN?= =?us-ascii?Q?zYx7PrLvKQAtlOAP/n9qifbt+DXlv+7afwipCupyBLv3TKDGd2LlX0SAsH9S?= =?us-ascii?Q?v8MfVX9yzwte1bHPbhtdQQakUV6KT/sQzw17MjX8XWiaVgTAizzCTJcppsZr?= =?us-ascii?Q?D/457+QD59+5K/SJUM344OEWirV39Mxy5yR5ceCZLlyJq4kyzCBNjfCe6Poy?= =?us-ascii?Q?Q+uTDCVwF5snqnAE+aEIE64Un5/80xlBXCbUSpBZGfF2kn+IcpO8nw7IYTcc?= =?us-ascii?Q?nvseI6ClTI9EB7bMThNaJ1uB6APCYgrSDut/ooltfXDtofR5anYmVNPgB6wO?= =?us-ascii?Q?S8oEm1l2HN/4lvqKzyJpkMXf?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2039; 5:tIz6uZdYFyobFvJIvE8gpHcFk2Zhcony8k8KqO7lyleJFhZpdz3ROGJYfcIKhqzQkqK3kxOAy4P3C2EIzXS3g6bTO7rBerACFW3PR+Xj+U0rSYOqtAGHTg71KoeOhkN/+S1EagjmbLaDQZjKJ6cb1ttmSEL6nvMP4H4IfFB9PW/fKu2fFJNHy8BGuhVIqH9XfAECoUKlVp7WcEI98Te7Dva6MGHabn6o+DlnXfoZE8DtiVKmTToNAKw+MsauSSiCpkt+5sF2JYtySLCfNipNgEpu+p3lAKLToRQMRjvPAZD+yUslhwqxjXl/4r18gJTKWnn3cPKDryM/WZrPSftyDnt8E8tUUnle22w0FPIsD+M+c7CSrOXG7iMRcGa4fobHXXAIf751M1XncRc6qSq/BIJaw1Y/kIjoo32mP/zpP/62TuurA+wJCIBQHigRZb0xUN36cN9xA6IvcS6iVo8uem+DFWeU8645OvKtsdR3Dfee5F/MzlybBTQtr4B4aFog; 24:oSl3+xWytyqCz1RGcUBNa6beU99bZL2rpWGn2rRixtqXhWpl/PNIEgjNBCmPBdXd6ZoJi8HnayS9zA3IJlyZpznPxNX+IUn7c5/AzqZAYYU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2039; 7:piKENFuh0ZS8v8lHemiE2zn2V9aMFjNocLn0gbhrPZ17/RJnN73vBrESj3UTsMPyQHhMATCNexWibqtDxc0UCIBPjRC3p9XSJuz9LziwRhfIY69rKPTV94ZzJRxcdjwyO+qyy9a1Pw9K+KlOGKiO+GkVRjwQZktrHZ4G+OdwDsvqaMsyIjed97eN52d2fEMzYg76bSNWuQLbnlrjVicv0AFIycWkITgNqjSLJ4EkSHLIT7I8vu3C9VW01pX0lvoUNnEySZV9ML31fPvTgTCO3ug9iji19nmSNb+0uy3WIYVi5b0yB64GDPy7kytIm7JN4vKqZsBkPeKckxKwLx5r4wrwFgoRoKRtoOGHlXGOXWvfadDnxJX7GUOAPpY3VxzwppDHNyr23hBhfP4XLCBiTuB3LqIBXUyNaYPjH3TnNyvi3tVPnbI7m7FhfmJu0nlDvO0chYf0JoWzhDuqONALkGtI3iTW88iqJ4ycIGjml8TobEltraI6Mzt0X6Muo/Ef7zWOLI+EekJPqGlv1DfruyTi2JoevHULxWiGpkBZR8TA1meB3yBeexflNpv4wG8jKu8mKiBU4+iMR1BWONEGbxWbgqmuGZ7UoT6uE8VcrlQw5ER+qOwo0Xl6kVvc6l6FKaRDVstcHE0NaesrZ0HW4lce6RM2/KjdwNChx8F34oDEHQutM+YOoJVeMwnd65nrgUE2xg61ZNksnJig1fidjuZ3FQVxDJNXhZX5Ruqv9Jq1dvJqjwT8x7zgZ5UFkywUxdsM/Gh4/8V5ugivM9lVxoFy2kzkC8h4I5pkKs0Gw+c= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2017 18:41:26.3601 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0501MB2039 Subject: [dpdk-dev] [PATCH v4 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: Thu, 06 Jul 2017 18:41:29 -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