From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mailer1.neclab.eu (mailer1.neclab.eu [195.37.70.40]) by dpdk.org (Postfix) with ESMTP id 2F3735930 for ; Mon, 21 Jul 2014 18:21:11 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mailer1.neclab.eu (Postfix) with ESMTP id 1D6FC1077C6 for ; Mon, 21 Jul 2014 18:22:26 +0200 (CEST) X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de) Received: from mailer1.neclab.eu ([127.0.0.1]) by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id KnVxwcSKIN78 for ; Mon, 21 Jul 2014 18:22:26 +0200 (CEST) X-ENC: Last-Hop-TLS-encrypted X-ENC: Last-Hop-TLS-encrypted Received: from METHONE.office.hd (methone.office.hd [192.168.24.54]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by mailer1.neclab.eu (Postfix) with ESMTPS id EDD5E1077C4 for ; Mon, 21 Jul 2014 18:22:20 +0200 (CEST) Received: from [10.1.2.203] (10.1.2.203) by skoll.office.hd (192.168.125.11) with Microsoft SMTP Server (TLS) id 14.1.323.3; Mon, 21 Jul 2014 18:21:59 +0200 Message-ID: <53CD3E26.1060708@neclab.eu> Date: Mon, 21 Jul 2014 18:21:58 +0200 From: Simon Kuenzer Organization: NEC Laboratories Europe User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: References: <1404808110-16314-1-git-send-email-simon.kuenzer@neclab.eu> <53BBBCFC.1070907@neclab.eu> In-Reply-To: <53BBBCFC.1070907@neclab.eu> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.1.2.203] Subject: Re: [dpdk-dev] [PATCH] eal/linuxapp: Add parameter to specify master lcore id X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Jul 2014 16:21:11 -0000 Comments? On 08.07.2014 11:42, Simon Kuenzer wrote: > Here are some comments about the use case of this patch: > > This patch is especially useful in cases where DPDK applications scale > their CPU resources at runtime via starting and stopping slave lcores. > Since the coremask defines the maximum scale-out for such a application, > the master lcore becomes to the minimum scale-in. > Imagine, running multiple primary processed of such DPDK applications, > users might want to overlap the coremasks for scaling. However, it would > still make sense to run the master lcores on different CPU cores. > > In DPDK vSwitch we might end up in such a scenario with a future release: > https://lists.01.org/pipermail/dpdk-ovs/2014-March/000770.html > https://lists.01.org/pipermail/dpdk-ovs/2014-March/000773.html > > Thanks, > > Simon > > On 08.07.2014 10:28, Simon Kuenzer wrote: >> This commit enables users to specify the lcore id that >> is used as master lcore. >> >> Signed-off-by: Simon Kuenzer >> --- >> lib/librte_eal/linuxapp/eal/eal.c | 33 >> +++++++++++++++++++++++++++++++++ >> 1 file changed, 33 insertions(+) >> >> diff --git a/lib/librte_eal/linuxapp/eal/eal.c >> b/lib/librte_eal/linuxapp/eal/eal.c >> index 573fd06..4ad5b9b 100644 >> --- a/lib/librte_eal/linuxapp/eal/eal.c >> +++ b/lib/librte_eal/linuxapp/eal/eal.c >> @@ -101,6 +101,7 @@ >> #define OPT_XEN_DOM0 "xen-dom0" >> #define OPT_CREATE_UIO_DEV "create-uio-dev" >> #define OPT_VFIO_INTR "vfio-intr" >> +#define OPT_MASTER_LCORE "master-lcore" >> >> #define RTE_EAL_BLACKLIST_SIZE 0x100 >> >> @@ -336,6 +337,7 @@ eal_usage(const char *prgname) >> "[--proc-type primary|secondary|auto] \n\n" >> "EAL options:\n" >> " -c COREMASK : A hexadecimal bitmask of cores to run >> on\n" >> + " --"OPT_MASTER_LCORE" ID: Core ID that is used as master\n" >> " -n NUM : Number of memory channels\n" >> " -v : Display version information on startup\n" >> " -d LIB.so : add driver (can be used multiple times)\n" >> @@ -468,6 +470,21 @@ eal_parse_coremask(const char *coremask) >> return 0; >> } >> >> +/* Changes the lcore id of the master thread */ >> +static int >> +eal_parse_master_lcore(const char *arg) >> +{ >> + struct rte_config *cfg = rte_eal_get_configuration(); >> + int master_lcore = atoi(arg); >> + >> + if (!(master_lcore >= 0 && master_lcore < RTE_MAX_LCORE)) >> + return -1; >> + if (cfg->lcore_role[master_lcore] != ROLE_RTE) >> + return -1; >> + cfg->master_lcore = master_lcore; >> + return 0; >> +} >> + >> static int >> eal_parse_syslog(const char *facility) >> { >> @@ -653,6 +670,7 @@ eal_parse_args(int argc, char **argv) >> {OPT_HUGE_DIR, 1, 0, 0}, >> {OPT_NO_SHCONF, 0, 0, 0}, >> {OPT_PROC_TYPE, 1, 0, 0}, >> + {OPT_MASTER_LCORE, 1, 0, 0}, >> {OPT_FILE_PREFIX, 1, 0, 0}, >> {OPT_SOCKET_MEM, 1, 0, 0}, >> {OPT_PCI_WHITELIST, 1, 0, 0}, >> @@ -802,6 +820,21 @@ eal_parse_args(int argc, char **argv) >> else if (!strcmp(lgopts[option_index].name, >> OPT_PROC_TYPE)) { >> internal_config.process_type = >> eal_parse_proc_type(optarg); >> } >> + else if (!strcmp(lgopts[option_index].name, >> OPT_MASTER_LCORE)) { >> + if (!coremask_ok) { >> + RTE_LOG(ERR, EAL, "please specify the master " >> + "lcore id after specifying " >> + "the coremask\n"); >> + eal_usage(prgname); >> + return -1; >> + } >> + if (eal_parse_master_lcore(optarg) < 0) { >> + RTE_LOG(ERR, EAL, "invalid parameter for --" >> + OPT_MASTER_LCORE "\n"); >> + eal_usage(prgname); >> + return -1; >> + } >> + } >> else if (!strcmp(lgopts[option_index].name, >> OPT_FILE_PREFIX)) { >> internal_config.hugefile_prefix = optarg; >> } >> >