Re: [ovs-dev] [PATCH 3/3] dpdk: Use ovs-numa provided functions to manage thread affinity.

2019-08-14 Thread William Tu
On Tue, Aug 13, 2019 at 8:30 AM Ilya Maximets  wrote:
>
> This allows to decrease code duplication and avoid using Linux-specific
> functions (this might be useful in the future if we'll try to allow
> running OvS+DPDK on FreeBSD).
>
> Signed-off-by: Ilya Maximets 

LGTM
Acked-by: William Tu 


> ---
>  lib/dpdk.c | 27 ---
>  1 file changed, 12 insertions(+), 15 deletions(-)
>
> diff --git a/lib/dpdk.c b/lib/dpdk.c
> index fc58de55a..6f297d918 100644
> --- a/lib/dpdk.c
> +++ b/lib/dpdk.c
> @@ -275,7 +275,7 @@ dpdk_init__(const struct smap *ovs_other_config)
>  int result;
>  bool auto_determine = true;
>  int err = 0;
> -cpu_set_t cpuset;
> +struct ovs_numa_dump *affinity = NULL;
>  struct svec args = SVEC_EMPTY_INITIALIZER;
>
>  log_stream = fopencookie(NULL, "w+", dpdk_log_func);
> @@ -357,22 +357,22 @@ dpdk_init__(const struct smap *ovs_other_config)
>   * lcore for the DPDK Master.
>   */
>  if (auto_determine) {
> +const struct ovs_numa_info_core *core;
>  int cpu = 0;
>
>  /* Get the main thread affinity */
> -CPU_ZERO();
> -err = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t),
> - );
> -if (!err) {
> -for (cpu = 0; cpu < CPU_SETSIZE; cpu++) {
> -if (CPU_ISSET(cpu, )) {
> -break;
> +affinity = ovs_numa_thread_getaffinity_dump();
> +if (affinity) {
> +cpu = INT_MAX;
> +FOR_EACH_CORE_ON_DUMP (core, affinity) {
> +if (cpu > core->core_id) {
> +cpu = core->core_id;
>  }
>  }
>  } else {
>  /* User did not set dpdk-lcore-mask and unable to get current
>   * thread affintity - default to core #0 */
> -VLOG_ERR("Thread getaffinity error %d. Using core #0", err);
> +VLOG_ERR("Thread getaffinity failed. Using core #0");
>  }
>  svec_add(, "-l");
>  svec_add_nocopy(, xasprintf("%d", cpu));
> @@ -403,12 +403,9 @@ dpdk_init__(const struct smap *ovs_other_config)
>  svec_destroy();
>
>  /* Set the main thread affinity back to pre rte_eal_init() value */
> -if (auto_determine && !err) {
> -err = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t),
> - );
> -if (err) {
> -VLOG_ERR("Thread setaffinity error %d", err);
> -}
> +if (affinity) {
> +ovs_numa_thread_setaffinity_dump(affinity);
> +ovs_numa_dump_destroy(affinity);
>  }
>
>  if (result < 0) {
> --
> 2.17.1
>
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH 3/3] dpdk: Use ovs-numa provided functions to manage thread affinity.

2019-08-13 Thread Ilya Maximets
This allows to decrease code duplication and avoid using Linux-specific
functions (this might be useful in the future if we'll try to allow
running OvS+DPDK on FreeBSD).

Signed-off-by: Ilya Maximets 
---
 lib/dpdk.c | 27 ---
 1 file changed, 12 insertions(+), 15 deletions(-)

diff --git a/lib/dpdk.c b/lib/dpdk.c
index fc58de55a..6f297d918 100644
--- a/lib/dpdk.c
+++ b/lib/dpdk.c
@@ -275,7 +275,7 @@ dpdk_init__(const struct smap *ovs_other_config)
 int result;
 bool auto_determine = true;
 int err = 0;
-cpu_set_t cpuset;
+struct ovs_numa_dump *affinity = NULL;
 struct svec args = SVEC_EMPTY_INITIALIZER;
 
 log_stream = fopencookie(NULL, "w+", dpdk_log_func);
@@ -357,22 +357,22 @@ dpdk_init__(const struct smap *ovs_other_config)
  * lcore for the DPDK Master.
  */
 if (auto_determine) {
+const struct ovs_numa_info_core *core;
 int cpu = 0;
 
 /* Get the main thread affinity */
-CPU_ZERO();
-err = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t),
- );
-if (!err) {
-for (cpu = 0; cpu < CPU_SETSIZE; cpu++) {
-if (CPU_ISSET(cpu, )) {
-break;
+affinity = ovs_numa_thread_getaffinity_dump();
+if (affinity) {
+cpu = INT_MAX;
+FOR_EACH_CORE_ON_DUMP (core, affinity) {
+if (cpu > core->core_id) {
+cpu = core->core_id;
 }
 }
 } else {
 /* User did not set dpdk-lcore-mask and unable to get current
  * thread affintity - default to core #0 */
-VLOG_ERR("Thread getaffinity error %d. Using core #0", err);
+VLOG_ERR("Thread getaffinity failed. Using core #0");
 }
 svec_add(, "-l");
 svec_add_nocopy(, xasprintf("%d", cpu));
@@ -403,12 +403,9 @@ dpdk_init__(const struct smap *ovs_other_config)
 svec_destroy();
 
 /* Set the main thread affinity back to pre rte_eal_init() value */
-if (auto_determine && !err) {
-err = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t),
- );
-if (err) {
-VLOG_ERR("Thread setaffinity error %d", err);
-}
+if (affinity) {
+ovs_numa_thread_setaffinity_dump(affinity);
+ovs_numa_dump_destroy(affinity);
 }
 
 if (result < 0) {
-- 
2.17.1

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev