From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Hunt Subject: [PATCH v10 15/18] examples/distributor: give Rx thread a core Date: Wed, 15 Mar 2017 06:19:24 +0000 Message-ID: <1489558767-56329-16-git-send-email-david.hunt@intel.com> References: <1488791433-186137-2-git-send-email-david.hunt@intel.com> <1489558767-56329-1-git-send-email-david.hunt@intel.com> Cc: bruce.richardson@intel.com, David Hunt To: dev@dpdk.org Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id BF863691A for ; Wed, 15 Mar 2017 14:18:53 +0100 (CET) In-Reply-To: <1489558767-56329-1-git-send-email-david.hunt@intel.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Now that we're printing out a page of stats every second to the console, we should give the stats it's own core so that we don't interfere with the performance of the Rx core. Signed-off-by: David Hunt Acked-by: Bruce Richardson --- examples/distributor/main.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/examples/distributor/main.c b/examples/distributor/main.c index 53c7b38..6aa8755 100644 --- a/examples/distributor/main.c +++ b/examples/distributor/main.c @@ -680,9 +680,10 @@ main(int argc, char *argv[]) if (ret < 0) rte_exit(EXIT_FAILURE, "Invalid distributor parameters\n"); - if (rte_lcore_count() < 4) + if (rte_lcore_count() < 5) rte_exit(EXIT_FAILURE, "Error, This application needs at " - "least 4 logical cores to run:\n" + "least 5 logical cores to run:\n" + "1 lcore for stats (can be core 0)\n" "1 lcore for packet RX\n" "1 lcore for distribution\n" "1 lcore for packet TX\n" @@ -724,7 +725,7 @@ main(int argc, char *argv[]) } d = rte_distributor_create("PKT_DIST", rte_socket_id(), - rte_lcore_count() - 3, + rte_lcore_count() - 4, RTE_DIST_ALG_BURST); if (d == NULL) rte_exit(EXIT_FAILURE, "Cannot create distributor\n"); @@ -763,6 +764,18 @@ main(int argc, char *argv[]) /* tx core */ rte_eal_remote_launch((lcore_function_t *)lcore_tx, dist_tx_ring, lcore_id); + } else if (worker_id == rte_lcore_count() - 2) { + printf("Starting rx on worker_id %d, lcore_id %d\n", + worker_id, lcore_id); + /* rx core */ + struct lcore_params *p = + rte_malloc(NULL, sizeof(*p), 0); + if (!p) + rte_panic("malloc failure\n"); + *p = (struct lcore_params){worker_id, d, rx_dist_ring, + dist_tx_ring, mbuf_pool}; + rte_eal_remote_launch((lcore_function_t *)lcore_rx, + p, lcore_id); } else { printf("Starting worker on worker_id %d, lcore_id %d\n", worker_id, lcore_id); @@ -778,11 +791,6 @@ main(int argc, char *argv[]) } worker_id++; } - /* call lcore_main on master core only */ - struct lcore_params p = { 0, d, rx_dist_ring, dist_tx_ring, mbuf_pool}; - - if (lcore_rx(&p) != 0) - return -1; freq = rte_get_timer_hz(); t = rte_rdtsc() + freq; -- 2.7.4