[dpdk-dev] [PATCH] eal/linuxapp: Add parameter to specify master lcore id

Simon Kuenzer simon.kuenzer at neclab.eu
Mon Jul 21 18:21:58 CEST 2014


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;
>>               }
>>
>



More information about the dev mailing list