From patchwork Mon Feb 6 12:38:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petri Savolainen X-Patchwork-Id: 93424 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp1687750qgi; Mon, 6 Feb 2017 04:42:21 -0800 (PST) X-Received: by 10.55.159.206 with SMTP id i197mr8393312qke.175.1486384941403; Mon, 06 Feb 2017 04:42:21 -0800 (PST) Return-Path: Received: from lists.linaro.org (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTP id s43si390752qtc.275.2017.02.06.04.42.21; Mon, 06 Feb 2017 04:42:21 -0800 (PST) Received-SPF: pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) client-ip=54.225.227.206; Authentication-Results: mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id 0096062EB8; Mon, 6 Feb 2017 12:42:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on ip-10-142-244-252 X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAD_ENC_HEADER,BAYES_00, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, URIBL_BLOCKED autolearn=disabled version=3.4.0 Received: from [127.0.0.1] (localhost [127.0.0.1]) by lists.linaro.org (Postfix) with ESMTP id 694A762EC5; Mon, 6 Feb 2017 12:39:11 +0000 (UTC) X-Original-To: lng-odp@lists.linaro.org Delivered-To: lng-odp@lists.linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id E575160B51; Mon, 6 Feb 2017 12:38:35 +0000 (UTC) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20136.outbound.protection.outlook.com [40.107.2.136]) by lists.linaro.org (Postfix) with ESMTPS id EB5C262DB3 for ; Mon, 6 Feb 2017 12:38:26 +0000 (UTC) Received: from DB5PR07CA0026.eurprd07.prod.outlook.com (10.167.223.36) by DBXPR07MB287.eurprd07.prod.outlook.com (10.141.10.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.5; Mon, 6 Feb 2017 12:38:24 +0000 Received: from DB3FFO11FD002.protection.gbl (2a01:111:f400:7e04::149) by DB5PR07CA0026.outlook.office365.com (2603:10a6:0:2d::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.5 via Frontend Transport; Mon, 6 Feb 2017 12:38:24 +0000 Received-SPF: SoftFail (protection.outlook.com: domain of transitioning linaro.org discourages use of 131.228.2.38 as permitted sender) Received: from hybrid2.ext.net.nokia.com (131.228.2.38) by DB3FFO11FD002.mail.protection.outlook.com (10.47.216.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.7 via Frontend Transport; Mon, 6 Feb 2017 12:38:24 +0000 Received: from fihe3nok1346.nsn-intra.net (10.158.36.134) by fihe3nok1349.nsn-intra.net (10.158.36.137) with Microsoft SMTP Server (TLS) id 15.1.466.34; Mon, 6 Feb 2017 14:38:23 +0200 Received: from mailrelay.int.nokia.com (10.130.128.30) by fihe3nok1346.nsn-intra.net (10.158.36.134) with Microsoft SMTP Server (TLS) id 15.1.466.34 via Frontend Transport; Mon, 6 Feb 2017 14:38:23 +0200 Received: from fihe3nok0735.emea.nsn-net.net (localhost [127.0.0.1]) by fihe3nok0735.emea.nsn-net.net (8.14.9/8.14.5) with ESMTP id v16Cc4f7019892 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 6 Feb 2017 14:38:04 +0200 Received: from 10.144.19.15 ([10.144.104.219]) by fihe3nok0735.emea.nsn-net.net (8.14.9/8.14.5) with ESMTP id v16Cc4VE019846 (version=TLSv1/SSLv3 cipher=AES128-SHA256 bits=128 verify=NOT) for ; Mon, 6 Feb 2017 14:38:04 +0200 X-HPESVCS-Source-Ip: 10.144.104.219 From: Petri Savolainen To: Date: Mon, 6 Feb 2017 14:38:00 +0200 Message-ID: <1486384684-14761-7-git-send-email-petri.savolainen@linaro.org> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1486384684-14761-1-git-send-email-petri.savolainen@linaro.org> References: <1486384684-14761-1-git-send-email-petri.savolainen@linaro.org> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:131.228.2.38; IPV:NLI; CTRY:FI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(7916002)(39410400002)(39850400002)(39840400002)(39860400002)(39450400003)(2980300002)(189002)(199003)(6916009)(2950100002)(33646002)(6666003)(38730400001)(76176999)(86362001)(22756006)(77096006)(8936002)(50226002)(81166006)(68736007)(8676002)(81156014)(50986999)(36756003)(106466001)(2906002)(47776003)(105596002)(2351001)(48376002)(50466002)(626004)(107886002)(450100001)(356003)(5003940100001)(110136003)(5660300001)(305945005)(97736004)(189998001)(53936002)(92566002); DIR:OUT; SFP:1102; SCL:1; SRVR:DBXPR07MB287; H:hybrid2.ext.net.nokia.com; FPR:; SPF:SoftFail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; DB3FFO11FD002; 1:Je9ys+D8fkeE9GvJJP16QUBsuo/UTy7QUqNJ+v+pfnv28r5ULn0/iOL5RXN7BX97xzK1xRZ4wZK9hILc27ZiblG9F57P+i8UeHm7Q75Enni8R8TywlgQQVAQawovFY9SXSfDknB84l3kJCqeA5yYbKzS5rnfy9tKrqLJNabl7CQVQUTPSV/zcQ/LLiY5KXdu6tyiPFpyz02TZczNBEUou8VjdsNxb/OfWBVCIbOQyI2RS3hW/jbBAhpSgXzXDLVC382xXJGDaVb115A1Iwfr1ZWrv7YAZ+6g650e2oXyXfaC+WkYcGnrNn6r618TgzCBmJgEgPqqLyq5t/dCr9VYO4jWRSGRNP9bJpUfV9gbmXLfCDCYaB1i8q3rwdzll1yfyV/6kJwoYyh5vZzEIWRyO7tcPGkAudCfoF/hgC7nJekotlSUz036cmwbJ2B/q/277zKgnHwZU+Xui1qdCh9pqFkYrZDsOtICAugKRZxGehk= X-MS-Office365-Filtering-Correlation-Id: 1ff38f7b-9bf3-4d4f-bf2d-08d44e8d0af0 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:DBXPR07MB287; X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB287; 3:CDSDVjIxgBKDg5459WRzVE3AFnGL7LGJqISb53iGANyYjrczbAYhBHLWSDnXAVbHNEmk2V/BOc5IfvPBJ9Hef7Rzm6ell1j/eD/HeqPwhk+wlwpQd3JQ7WXB0ZJJaEYekXzhypsSDuV/SpnH0Ys3385vd3aJ+jEN2DxYgMtfMRlBdGyK2qL4hdgMq55HEigcogtscC0ABzukYEHxgHtUrucsOM7a3qjbnO2G6Xda/Q++crYmanmR4Q19K0Z3369vyUroeH7VLynmD2ZdGHkdC9HsMcLFr927e+H9P+erYlO2SajLME9khWaTndSZgCFrBcfJ6sbhI/YV806XFB1wN7TKAluWPy3aXiDoPBQgn+KZf2qBHidTOrgZv6hHdBIM; 25:Y50uenO1IjJSd0JZF6iBtlV+S/+89yAWT0gvnefv+umCLTa2cSwsNUDxigOQ69MdNdanyz0y/slvbo3439i1gWUyaNOreLsascETa8Be2gYrXKa0YgiXScRY6OpdNOVICSCtdJ4yuUE5q0JmJpWO0cyKYfAWuKzCiNCV+/LRooyLoWNl2AMFNVU464txCbevpl1KNXuKr/5wA0kHc/P7pbcWokGvJkhgN3YN3ynwuHeKeZJaxzPBUljta7MjpBxymZWHvQySvOCf32aNsnAjeMh4IHL6go5okGCCL7Zp4+r893kEJw/MH/WJf1sviIAfdC4WyPrEnSuVEHYio6hIyDMYeDhixyLIN0sUFejVqg+oQzXty0C0jsPk9sWK7pu/RSDJVO5xLXhW7PEfDWxacIhbSq/wIlSz8tbGy7fgxRXvgj0t+ES1sE2+8HfLE4KS X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB287; 31:bFs/qiB68Gl4LD4qgsLbdlJ8Vx97RdqhKTbjKQD6ICpF6QoEHQFp0MBKcUYjeadsV5gTgdD3N9UL6BHroqBGqdzO9XlEpU1p949txY52CKFgO1QZSjSQPH54qjOag7LBwQN1/Q5SyxBPX+DquHn9WMyvjNxPIJByB6Na/elG2dhQDxsXZ49SnSIn6b7PjYEDPRBb76qr4TbXOI36EXmxodFEBAz8A+eyTk6rsM4BPSwL9wX6AEKcN4YGOW+MKsxKFYIn6mJ2tzxtTlVTK2FK3e0q1q9hszKqLsmQzlDDPck=; 20:+aJxGXQ46Isnto7OC6oY36U1razzpoxSfG7GAgXax39hu6RDDtl7PPOdTKMCkCNfPII+A6pHHYtkCbDcLx5ynHRL4AKYRFEc5VBMcb2EdRgv0vixHisMdsNsZJfUqFkzUJCgm2/pBcalwiWFz2JUVmoxkDghDM5pNK3YzF4CaXOHjiM1yM9ZO4LzlAYBqTxnrY44Kwmos1ltQk8Se/taadGYdwDWQWnAsT63o6wJep9MJgq7X6jnA1HA0Onll+vN2ORCBYjRo8IGs0efqvC1Mfcw6MGF3seqUSVfsSadsN2ffSKkC2Nx90q/RKO+wprBJ2gC4guTTs4ubfCFwCCFW70yBKzRZhw+nId3n+X+Yz5PVKHlArLklBDw26WQjSayOleHAt1ESmJBkQn6e8OnU/Vc7J+htRJ5lVhmoO3Xu2UCE3P45O3wivIRsfibYA1HV+GWQEIVwmTQSFLwjB2DHhcUJh8RRHQk+tkEf76RvBgPNrEYT3G293lwRGuKr1J41WSLx+Po6HfLTocvOrkwc/FmlDM74Tapp3uHtcFsVHt70+0cwKHpVzBHQv0b2Ljbm/m5Ofq5jUx/811KHfzXwgMCC+knoaCUBYjaqYLjpZE= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(13018025)(8121501046)(20170203043)(5005006)(13016025)(3002001)(10201501046)(6055026)(6041248)(20161123560025)(20161123562025)(20161123558025)(20161123555025)(20161123564025)(6072148); SRVR:DBXPR07MB287; BCL:0; PCL:0; RULEID:; SRVR:DBXPR07MB287; X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB287; 4:zNV/mxktjUQqBTnOqZoP3R/S/bupOsIUMokXv55A2JfLEfr2h0SveUUozNFFERPe+TWYkcLsp6tHhw8Pr0L5fU9r/2KKHRhBMuC1Ps4fAxxDfwylGRExxN9/nIrHuyILpbvHMyTv/P7jyvfjteRwmOypN0a1AjHxljvuCVtrIZTQpocRuNXGMjIQyajePOvazK2VpdiyrRvRl0ovtytEqGw/vZ97dB00Q+2KLb44ROv8kYcEmNdtsXB7upL+k2lJNCJRbDDCxKq/+GDCnP+5HFiSwmtaAzUwuHdadoygb9Z3g6yj3Ek1q4WwmE7AVNs8BoC1fofBP26xAXI1xH6vrOHdZEAdRJ0K/fXiyIwXmxRpgKR/5y/+OUWLwvZ0ARpI2KrKD92Zy60HUw2LkiFu0EHVgD6EMcy7W2PGVu2oShpCvncRiFbkrm0r6PT14T2M2CulJSRfMVeCsInwt0NGxQtJ037I7BXQ5JB1JzQEMrhBkNIV+dvCuBHxP2F3t5V7US6SAhHtXMNDQybbWLX/w4A339KFS4kkuLZbAlL1SUoE3QgK9hM9Sjd/RZdQlD+GPYl8iCJLHoMQUrQ/agNasGY553KG8Nrj58a235xK4aMwARv4IkpkWIqXHQr2FkxZOI176G+L8HLEb5LP2OvhjogrA3TvOwnHDIVB2CBes0uWzLMDxmpbUNbkfeYy8Mua X-Forefront-PRVS: 0210479ED8 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DBXPR07MB287; 23:DvvZrBnvWPpXPlG7HK4yTIsxLbNjIUQ+iASeNtj82A?= soUtwZ4g/z3YY516PoOaShzjwPewi2yvqf0YLY97Y9oR9A6XvFxY5kU54haesvxntUDF/1aIrb6xUtJc2gtXCy17LietchMihn38pGNbeb1wgZXEjGS6+XoqC4dISW5/ARQIv+IYGX3zsWSiwRJgznbkB/Di1mC2H0TKimelp0zZKsAwvaBb84Yej3olUkdEd4K5FfBqY4bRBJF/TDZi/kpapDbUiYylV5oisfHu6wdfeFdPUn23sZ+gtQpARbujaJvAd+gGWCoPVtEpf+WWOUTXLXW/8QGI62xEnfcDdSXamK47g0aniy9SJ8+7fIuqVL91C/UEUvD9EWzJfULaDopH4S/TvnLnl5iYSIFYvFsU2SrMAK4EOA1Kh8j+p5GfQLATVe4Uzuej9imUQ4gyYK/aBltLiI9O87+oWGvCi6kdVDEKwVRmMgcSgdygBajRy7IlGWxpuj9O8yP0s+aPdq4qRSoF4XeJ026cwfs35/Pmmj1PswaKsWwoGGFNihuAYGAopl06UGPlPzpQBfGJOHIIc2hdqWbsxX+8OxH9dQ5VBl9FoPuAMHZviDIs/wKXD0Is3FwFrm0txPsuT/hiL0P0Pe/rl2FOIbf1AMAa0qK7bEzgSfQK08msr7uoDTYz6WXbLjOjY2bMjDYY87BvztS7ZwdsMp+pNz1ZMxERCN00Bx9kZOVAey4fXKZtd16H9F1tVOC4yzUfHMBHuABIlZLZaG0knu2sVM539oyV3j998GwYiXEvpMPfpV8TfbkCDPcY05RMxiUfutIgElEhlYikrP6l2SRtnZT0JwpXA1Rfqwqurfl8M6AFIjPK7Mkl797wdvKGf6U9HEpiopS9sCl4rcHixT+aU1aM+hS9a6rVJw466UBcEKCuez0rH9+49LzowDxFFLxPTS56HrNzb01CsBTOlQBqhWAuGgUZcNdrspxEvOjVZZynU3XF4OCudMIjufdkJrySQWFVEl8aFGWGfj/1QdH17jQSylq+JtYIh16QHWtSDjvaemi9Lk2J3eY+NQ3peLYocBV6UuuAr5ydVhsP5NQLfShZHgQwxBRD0U/lkSgjtmZR1cYOU72IXJuAN1Ngguy4Qlu6QRtfk3 X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB287; 6:KvSQcJ9oC7eVyNge+/7X7Py7csi3eAPoLyke3WJFH7AOvvvOPzoO681s67UUJ89PBVUMu3DAtx4ptaNY7fVVCa9f64gk4yRInfUOdNVi9quFBTr85YblatKGfq+SCmgQTS1KSLoghkNo3Y5zvPrLQZ/fc6WSKVIoj9jJLIIGZnFKKSqzW7FhbiLoxvYha9wF9DxQGnLHlEhI3euGHmo3Qx/mvvzsEZZkdInwBSHCW3QLYP74+EbgLKfIZjQgIvNVvyRN0/Pfyr9Dwyms1tnqC3lUbvpX28acUAOtFs4PFCnbQ3FvaTnnRedTFrBUZ49zm5jxe0aSx5b8CDnZ4rDIjZa7asAirjlMUQbVJMwNgosbzjKt5enXwpIp4iQjq0gMb+UoMifknBzMccb8tcDcSA==; 5:kH+gI4jnrvr7Ct64pSUjs2djoRe0E+WAytfgMBATKD7b/di3pM3uIEedLBDyxZJ+/i1BINPYu7RSo1OZkWclHYQXm5qneEw4ZDMFltVkDclQxyFccv6DQ120WQJuH/NohZwOlLXXg/8BucBhFYeAHQ==; 24:DLYbV7J529K1wC6e+LBwSZGl1AwlI8SrIm2f92819LDBDqNkKrFe92VGU8YN8JpfgA8Rb0LfhErK7qAm7mllFrc9zGMOQwY1YBUKE3Z5afE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB287; 7:B+xicwmddAuG1CEZUXUyykVKcFeyQKejOn+JQm2exeBmKy6qrPsjMOJ8BgQmtWsmFZsTH2J/sPvD0r3DLNS5qyKe5STLOela0ivPlG6nRJt5301V+NID5LOOdYyzq1rModSVV9cCZ6BGzFgTTaL3aGg9Icdgvf8Myo3jl3htHSa+fE/DTC5usAvoXU9AEoPNrkK2tvC2TDCERQChwpi+lqUo8iroOKPZsb7DYZnUqNSS2/SXhMM/xFD8IleA4jlK9SEGLnRAdTJtSXnD8tWASc6ZdlG8i2GVupR07IL3ufdGY7+sxYsG57LG9EB5nVatdNGaR2uyYYpV7kwjLES2V7kQh0rSlJUQhnTgsiUO/SQACJcBbhBr8/3TNoSYAsexzdl1N07bF3S+AQO2tTUud262W6CZzaJUHRPgDh05qu/lkrtgxrzpDvxC57IIIpiPmKTTyJhDR5Ucaewyo5MnkWCvFC/ihbpxEVtikpU31X7M4Pz8KdKgia9mV2gKT3UNuNNJ1y+QKsHOjlPe9Qvhdw== X-OriginatorOrg: nokia.onmicrosoft.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2017 12:38:24.5895 (UTC) X-MS-Exchange-CrossTenant-Id: 5d471751-9675-428d-917b-70f44f9630b0 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5d471751-9675-428d-917b-70f44f9630b0; Ip=[131.228.2.38]; Helo=[hybrid2.ext.net.nokia.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBXPR07MB287 Subject: [lng-odp] [PATCH 06/10] test: generator: various improvements X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "The OpenDataPlane \(ODP\) List" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: lng-odp-bounces@lists.linaro.org Sender: "lng-odp" User may select number of worker threads (-w) or cpumask (-c) (but not both) to limit number of worker thread. Increased pool size since many threads empty the pool easily and result some threads to give up (on the first time those see pool empty). Added EXAMPLE_ERR() before abort() to make debugging easier. Signed-off-by: Petri Savolainen --- example/generator/odp_generator.c | 77 ++++++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 26 deletions(-) -- 2.8.1 diff --git a/example/generator/odp_generator.c b/example/generator/odp_generator.c index 6ac8f2d..8062d87 100644 --- a/example/generator/odp_generator.c +++ b/example/generator/odp_generator.c @@ -22,10 +22,10 @@ #include -#define MAX_WORKERS 32 /**< max number of works */ -#define SHM_PKT_POOL_SIZE (512*2048) /**< pkt pool size */ -#define SHM_PKT_POOL_BUF_SIZE 1856 /**< pkt pool buf size */ -#define DEFAULT_PKT_INTERVAL 1000 /**< interval btw each pkt */ +#define MAX_WORKERS 32 /* Max number of workers */ +#define POOL_NUM_PKT 2048 /* Number of packets in packet pool */ +#define POOL_PKT_LEN 1856 /* Max packet length */ +#define DEFAULT_PKT_INTERVAL 1000 /* Interval between each packet */ #define APPL_MODE_UDP 0 /**< UDP mode */ #define APPL_MODE_PING 1 /**< ping mode */ @@ -41,7 +41,7 @@ * Parsed command line application arguments */ typedef struct { - int cpu_count; /**< system CPU count */ + int num_workers; /**< Number of worker thread */ const char *mask; /**< CPU mask */ int if_count; /**< Number of interfaces to be used */ char **if_names; /**< Array of pointers to interface names */ @@ -383,14 +383,17 @@ static int gen_send_thread(void *arg) (unsigned int)args->appl.number) break; + pkt = ODP_PACKET_INVALID; + if (args->appl.mode == APPL_MODE_UDP) pkt = pack_udp_pkt(thr_args->pool); else if (args->appl.mode == APPL_MODE_PING) pkt = pack_icmp_pkt(thr_args->pool); - else - pkt = ODP_PACKET_INVALID; - if (!odp_packet_is_valid(pkt)) { + if (pkt == ODP_PACKET_INVALID) { + /* Thread gives up as soon as it sees the pool empty. + * Depending on pool size and transmit latency, it may + * be normal that pool gets empty sometimes. */ EXAMPLE_ERR(" [%2i] alloc_single failed\n", thr); break; } @@ -671,13 +674,17 @@ int main(int argc, char *argv[]) /* Print both system and application information */ print_info(NO_PATH(argv[0]), &args->appl); - /* Default to system CPU count unless user specified */ + /* Default to max number of workers, unless user specified number of + * workers or cpumask */ num_workers = MAX_WORKERS; - if (args->appl.cpu_count) - num_workers = args->appl.cpu_count; - num_workers = odp_cpumask_default_worker(&cpumask, num_workers); - if (args->appl.mask) { + + if (args->appl.num_workers) { + /* -w option: number of workers */ + num_workers = args->appl.num_workers; + num_workers = odp_cpumask_default_worker(&cpumask, num_workers); + } else if (args->appl.mask) { + /* -c option: cpumask */ odp_cpumask_from_str(&cpumask, args->appl.mask); num_workers = odp_cpumask_count(&cpumask); } @@ -700,9 +707,9 @@ int main(int argc, char *argv[]) /* Create packet pool */ odp_pool_param_init(¶ms); - params.pkt.seg_len = SHM_PKT_POOL_BUF_SIZE; - params.pkt.len = SHM_PKT_POOL_BUF_SIZE; - params.pkt.num = SHM_PKT_POOL_SIZE/SHM_PKT_POOL_BUF_SIZE; + params.pkt.seg_len = POOL_PKT_LEN; + params.pkt.len = POOL_PKT_LEN; + params.pkt.num = POOL_NUM_PKT; params.type = ODP_POOL_PACKET; pool = odp_pool_create("packet_pool", ¶ms); @@ -763,18 +770,24 @@ int main(int argc, char *argv[]) odp_cpumask_set(&cpu_mask, cpu_first); tq = odp_queue_create("", NULL); - if (tq == ODP_QUEUE_INVALID) + if (tq == ODP_QUEUE_INVALID) { + EXAMPLE_ERR("queue_create failed\n"); abort(); + } args->thread[1].pktio_dev = args->appl.if_names[0]; args->thread[1].pool = pool; args->thread[1].tp = tp; args->thread[1].tq = tq; args->thread[1].tim = odp_timer_alloc(tp, tq, NULL); - if (args->thread[1].tim == ODP_TIMER_INVALID) + if (args->thread[1].tim == ODP_TIMER_INVALID) { + EXAMPLE_ERR("timer_alloc failed\n"); abort(); + } args->thread[1].tmo_ev = odp_timeout_alloc(tmop); - if (args->thread[1].tmo_ev == ODP_TIMEOUT_INVALID) + if (args->thread[1].tmo_ev == ODP_TIMEOUT_INVALID) { + EXAMPLE_ERR("timeout_alloc failed\n"); abort(); + } args->thread[1].mode = args->appl.mode; memset(&thr_params, 0, sizeof(thr_params)); @@ -786,18 +799,24 @@ int main(int argc, char *argv[]) odph_odpthreads_create(&thread_tbl[1], &cpu_mask, &thr_params); tq = odp_queue_create("", NULL); - if (tq == ODP_QUEUE_INVALID) + if (tq == ODP_QUEUE_INVALID) { + EXAMPLE_ERR("queue_create failed\n"); abort(); + } args->thread[0].pktio_dev = args->appl.if_names[0]; args->thread[0].pool = pool; args->thread[0].tp = tp; args->thread[0].tq = tq; args->thread[0].tim = odp_timer_alloc(tp, tq, NULL); - if (args->thread[0].tim == ODP_TIMER_INVALID) + if (args->thread[0].tim == ODP_TIMER_INVALID) { + EXAMPLE_ERR("timer_alloc failed\n"); abort(); + } args->thread[0].tmo_ev = odp_timeout_alloc(tmop); - if (args->thread[0].tmo_ev == ODP_TIMEOUT_INVALID) + if (args->thread[0].tmo_ev == ODP_TIMEOUT_INVALID) { + EXAMPLE_ERR("timeout_alloc failed\n"); abort(); + } args->thread[0].mode = args->appl.mode; cpu_next = odp_cpumask_next(&cpumask, cpu_first); odp_cpumask_zero(&cpu_mask); @@ -819,17 +838,23 @@ int main(int argc, char *argv[]) args->thread[i].pktio_dev = args->appl.if_names[if_idx]; tq = odp_queue_create("", NULL); - if (tq == ODP_QUEUE_INVALID) + if (tq == ODP_QUEUE_INVALID) { + EXAMPLE_ERR("queue_create failed\n"); abort(); + } args->thread[i].pool = pool; args->thread[i].tp = tp; args->thread[i].tq = tq; args->thread[i].tim = odp_timer_alloc(tp, tq, NULL); - if (args->thread[i].tim == ODP_TIMER_INVALID) + if (args->thread[i].tim == ODP_TIMER_INVALID) { + EXAMPLE_ERR("timer_alloc failed\n"); abort(); + } args->thread[i].tmo_ev = odp_timeout_alloc(tmop); - if (args->thread[i].tmo_ev == ODP_TIMEOUT_INVALID) + if (args->thread[i].tmo_ev == ODP_TIMEOUT_INVALID) { + EXAMPLE_ERR("timeout_alloc failed\n"); abort(); + } args->thread[i].mode = args->appl.mode; if (args->appl.mode == APPL_MODE_UDP) { @@ -955,7 +980,7 @@ static void parse_args(int argc, char *argv[], appl_args_t *appl_args) switch (opt) { case 'w': - appl_args->cpu_count = atoi(optarg); + appl_args->num_workers = atoi(optarg); break; case 'c': appl_args->mask = optarg;