[ovs-dev] [PATCH] INSTALL.DPDK.md: Clarify DPDK arguments.
Zoltan Kiss
zoltan.kiss at linaro.org
Mon Dec 14 18:31:36 UTC 2015
On 14/12/15 17:35, Traynor, Kevin wrote:
> How about letting the control threads just float on the non-isolcpu'd cores.
> We could then potentially remove the -c argument which would simplify
> setup as the user would only need to think about one mask - pmd-cpu-mask
> (which of course we could also default).
>
> Strawman for it would be something like this...
Seems good, assuming that the thread affinity at the time dpdk_init()
was called reflects what cores are allowed for non-PMD threads. And what
if the user wants to change that later?
>
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index e3a0771..031f405 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -2135,12 +2135,15 @@ process_vhost_flags(char *flag, char *default_val, int size,
> int
> dpdk_init(int argc, char **argv)
> {
> int result;
> int base = 0;
> char *pragram_name = argv[0];
> + int err;
> + int isset;
> + cpu_set_t cpuset;
>
> if (argc < 2 || strcmp(argv[1], "--dpdk"))
> return 0;
>
> /* Remove the --dpdk argument from arg list.*/
> argc--;
> @@ -2176,23 +2179,51 @@ dpdk_init(int argc, char **argv)
> */
> argc -= 2;
> argv += 2; /* Increment by two to bypass the vhost flag arguments */
> base = 2;
> }
>
> + /*NOTE: Assumes -c option removed from cmdline/db etc. */
> +
> + /* Get the main thread affinity */
> + CPU_ZERO(&cpuset);
> + err = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
> + if (err) {
> + VLOG_ERR("Thread getaffinity error %d",err);
> + return err;
> + }
> +
> + /* Extract lowest core affinity and set the -c */
> + for (i = 0; i < CPU_SETSIZE; i++) {
> + isset = CPU_ISSET(i, &cpuset);
> + if (isset) {
> + /* TODO: check for any numa inconsistencies with memory and embedded -c
> + * option in argv for rte_eal_init() */
> + break;
> + }
> + }
> +
> /* Keep the program name argument as this is needed for call to
> * rte_eal_init()
> */
> argv[0] = pragram_name;
>
> /* Make sure things are initialized ... */
> result = rte_eal_init(argc, argv);
> if (result < 0) {
> ovs_abort(result, "Cannot init EAL");
> }
>
> + /* Set the main thread affinity back to pre rte_eal_init() value */
> + err = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
> + if (err) {
> + VLOG_ERR("Thread setaffinity error %d",err);
> + return err;
> + }
More information about the dev
mailing list