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 <simon.kuenzer at neclab.eu>
>> ---
>> 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;
>> }
>>
>