[ovs-dev] [PATCH 3/3] dpdk: Use ovs-numa provided functions to manage thread affinity.
William Tu
u9012063 at gmail.com
Wed Aug 14 15:57:31 UTC 2019
On Tue, Aug 13, 2019 at 8:30 AM Ilya Maximets <i.maximets at samsung.com> 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 <i.maximets at samsung.com>
LGTM
Acked-by: William Tu <u9012063 at gmail.com>
> ---
> 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(&cpuset);
> - err = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t),
> - &cpuset);
> - if (!err) {
> - for (cpu = 0; cpu < CPU_SETSIZE; cpu++) {
> - if (CPU_ISSET(cpu, &cpuset)) {
> - 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(&args, "-l");
> svec_add_nocopy(&args, xasprintf("%d", cpu));
> @@ -403,12 +403,9 @@ dpdk_init__(const struct smap *ovs_other_config)
> svec_destroy(&args);
>
> /* 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),
> - &cpuset);
> - 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
>
More information about the dev
mailing list