[{"id":1786306,"web_url":"http://patchwork.ozlabs.org/comment/1786306/","msgid":"<BCFD2BB875535045A5368D9ADBF2969935048F25@IRSMSX101.ger.corp.intel.com>","list_archive_url":null,"date":"2017-10-13T14:05:31","subject":"Re: [ovs-dev] [PATCH v5 04/10] dpif-netdev: Register packet\n\tprocessing\tcores to KA framework.","submitter":{"id":68178,"url":"http://patchwork.ozlabs.org/api/people/68178/","name":"Fischetti, Antonio","email":"antonio.fischetti@intel.com"},"content":"Hi Bhanu,\na couple of minor comments inline.\n\n-Antonio\n\n> -----Original Message-----\n> From: ovs-dev-bounces@openvswitch.org [mailto:ovs-dev-bounces@openvswitch.org]\n> On Behalf Of Bhanuprakash Bodireddy\n> Sent: Friday, September 15, 2017 5:40 PM\n> To: dev@openvswitch.org\n> Subject: [ovs-dev] [PATCH v5 04/10] dpif-netdev: Register packet processing\n> cores to KA framework.\n> \n> This commit registers the packet processing PMD threads to keepalive\n> framework. Only PMDs that have rxqs mapped will be registered and\n> actively monitored by KA framework.\n> \n> This commit spawns a keepalive thread that will dispatch heartbeats to\n> PMD threads. The pmd threads respond to heartbeats by marking themselves\n> alive. As long as PMD responds to heartbeats it is considered 'healthy'.\n> \n> Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy@intel.com>\n> ---\n>  lib/dpif-netdev.c |  79 ++++++++++++++++++++++\n>  lib/keepalive.c   | 191 ++++++++++++++++++++++++++++++++++++++++++++++++++++--\n>  lib/keepalive.h   |  20 ++++++\n>  lib/ovs-thread.c  |   6 ++\n>  lib/ovs-thread.h  |   1 +\n>  lib/util.c        |  22 +++++++\n>  lib/util.h        |   1 +\n>  7 files changed, 316 insertions(+), 4 deletions(-)\n> \n> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c\n> index ca74df8..da419d5 100644\n> --- a/lib/dpif-netdev.c\n> +++ b/lib/dpif-netdev.c\n> @@ -49,6 +49,7 @@\n>  #include \"flow.h\"\n>  #include \"hmapx.h\"\n>  #include \"id-pool.h\"\n> +#include \"keepalive.h\"\n>  #include \"latch.h\"\n>  #include \"netdev.h\"\n>  #include \"netdev-vport.h\"\n> @@ -591,6 +592,7 @@ struct dp_netdev_pmd_thread {\n>      uint64_t last_reload_seq;\n>      atomic_bool reload;             /* Do we need to reload ports? */\n>      pthread_t thread;\n> +    pid_t tid;                      /* Thread id of this pmd thread. */\n>      unsigned core_id;               /* CPU core id of this pmd thread. */\n>      int numa_id;                    /* numa node id of this pmd thread. */\n>      bool isolated;\n> @@ -1018,6 +1020,72 @@ sorted_poll_thread_list(struct dp_netdev *dp,\n>      *n = k;\n>  }\n> \n> +static void *\n> +ovs_keepalive(void *f_ OVS_UNUSED)\n> +{\n> +    pthread_detach(pthread_self());\n> +\n> +    for (;;) {\n> +        int interval;\n\n[Antonio] shouldn't we put 'interval' declaration outside of the for (;;) loop?\n       int interval;\n       for (;;) {\n           interval =...\n           xnanosleep(..\n       }\n\n> +\n> +        interval = get_ka_interval();\n> +        xnanosleep(interval);\n> +    }\n> +\n> +    return NULL;\n> +}\n> +\n> +/* Kickstart 'ovs_keepalive' thread. */\n> +static void\n> +ka_thread_start(struct dp_netdev *dp)\n> +{\n> +    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;\n> +\n> +    if (ovsthread_once_start(&once)) {\n> +        ovs_thread_create(\"ovs_keepalive\", ovs_keepalive, dp);\n> +\n> +        ovsthread_once_done(&once);\n> +    }\n> +}\n> +\n> +/* Register the datapath threads. This gets invoked on every datapath\n> + * reconfiguration. The pmd thread[s] having rxq[s] mapped will be\n> + * registered to KA framework.\n> + */\n> +static void\n> +ka_register_datapath_threads(struct dp_netdev *dp)\n> +{\n> +    if (!ka_is_enabled()) {\n> +        return;\n> +    }\n> +\n> +    ka_thread_start(dp);\n> +\n> +    ka_reload_datapath_threads_begin();\n> +\n> +    struct dp_netdev_pmd_thread *pmd;\n> +    CMAP_FOR_EACH (pmd, node, &dp->poll_threads) {\n> +        /*  Register only PMD threads. */\n> +        if (pmd->core_id != NON_PMD_CORE_ID) {\n> +            /* Skip PMD thread with no rxqs mapping. */\n> +            if (OVS_UNLIKELY(!hmap_count(&pmd->poll_list))) {\n> +                /* Rxq mapping changes due to datapath reconfiguration.\n> +                 * If no rxqs mapped to PMD now due to reconfiguration,\n> +                 * unregister the pmd thread. */\n> +                ka_unregister_thread(pmd->tid);\n> +                continue;\n> +            }\n> +\n> +            ka_register_thread(pmd->tid);\n> +            VLOG_INFO(\"Registered PMD thread [%d] on Core[%d] to KA\n> framework\",\n> +                      pmd->tid, pmd->core_id);\n> +        }\n> +    }\n> +    ka_cache_registered_threads();\n> +\n> +    ka_reload_datapath_threads_end();\n> +}\n> +\n>  static void\n>  dpif_netdev_pmd_rebalance(struct unixctl_conn *conn, int argc,\n>                            const char *argv[], void *aux OVS_UNUSED)\n> @@ -3821,6 +3889,9 @@ reconfigure_datapath(struct dp_netdev *dp)\n> \n>      /* Reload affected pmd threads. */\n>      reload_affected_pmds(dp);\n> +\n> +    /* Register datapath threads to KA monitoring. */\n> +    ka_register_datapath_threads(dp);\n>  }\n> \n>  /* Returns true if one of the netdevs in 'dp' requires a reconfiguration */\n> @@ -4023,6 +4094,8 @@ pmd_thread_main(void *f_)\n> \n>      /* Stores the pmd thread's 'pmd' to 'per_pmd_key'. */\n>      ovsthread_setspecific(pmd->dp->per_pmd_key, pmd);\n> +    /* Stores tid in to 'pmd->tid'. */\n> +    ovsthread_settid(&pmd->tid);\n>      ovs_numa_thread_setaffinity_core(pmd->core_id);\n>      dpdk_set_lcore_id(pmd->core_id);\n>      poll_cnt = pmd_load_queues_and_ports(pmd, &poll_list);\n> @@ -4056,6 +4129,9 @@ reload:\n>                                                        : PMD_CYCLES_IDLE);\n>          }\n> \n> +        /* Mark PMD thread alive. */\n> +        ka_mark_pmd_thread_alive(pmd->tid);\n> +\n>          if (lc++ > 1024) {\n>              bool reload;\n> \n> @@ -4089,6 +4165,9 @@ reload:\n>      }\n> \n>      emc_cache_uninit(&pmd->flow_cache);\n> +\n> +    ka_unregister_thread(pmd->tid);\n> +\n>      free(poll_list);\n>      pmd_free_cached_ports(pmd);\n>      return NULL;\n> diff --git a/lib/keepalive.c b/lib/keepalive.c\n> index 1f151f6..da4defd 100644\n> --- a/lib/keepalive.c\n> +++ b/lib/keepalive.c\n> @@ -19,6 +19,7 @@\n>  #include \"keepalive.h\"\n>  #include \"lib/vswitch-idl.h\"\n>  #include \"openvswitch/vlog.h\"\n> +#include \"process.h\"\n>  #include \"seq.h\"\n>  #include \"timeval.h\"\n> \n> @@ -28,11 +29,18 @@ static bool keepalive_enable = false;      /* Keepalive\n> disabled by default. */\n>  static uint32_t keepalive_timer_interval;  /* keepalive timer interval. */\n>  static struct keepalive_info ka_info;\n> \n> -/* Returns true if keepalive is enabled, false otherwise. */\n> -bool\n> -ka_is_enabled(void)\n> +/* Returns true if state update is allowed, false otherwise. */\n> +static bool\n> +ka_can_update_state(void)\n>  {\n> -    return keepalive_enable;\n> +    bool reload_inprogress, keepalive;\n> +\n> +    atomic_read_relaxed(&ka_info.reload_threads, &reload_inprogress);\n> +    keepalive = ka_is_enabled();\n> +\n> +    /* Return true if KA is enabled and 'cached_process_list' map reload\n> +     * is completed. */\n> +    return keepalive && !reload_inprogress;\n>  }\n> \n>  /* Finds the thread by 'tid' in 'process_list' map and update\n> @@ -105,6 +113,177 @@ keepalive_register_relay_cb(ka_relay_cb cb, void *aux)\n>      ka_info.relay_cb_data = aux;\n>  }\n> \n> +/* Returns true if keepalive is enabled, false otherwise. */\n> +bool\n> +ka_is_enabled(void)\n> +{\n> +    return keepalive_enable;\n> +}\n> +\n> +/* Return the Keepalive timer interval. */\n> +uint32_t\n> +get_ka_interval(void)\n> +{\n> +    return keepalive_timer_interval;\n> +}\n> +\n> +/* 'cached_process_list' map reload in progress.\n> + *\n> + * Should be called before the 'ka_info.cached_process_list'\n> + * is populated from 'ka_info.process_list'. This way the pmd\n> + * doesn't heartbeat while the reload is in progress. */\n> +void\n> +ka_reload_datapath_threads_begin(void)\n> +{\n> +    atomic_store_relaxed(&ka_info.reload_threads, true);\n> +}\n> +\n> +/* 'cached_process_list' map reload finished.\n> + *\n> + * Should be called after the 'ka_info.cached_process_list'\n> + * is populated from 'ka_info.process_list'. This way the pmd\n> + * can restart heartbeat when the reload is finished. */\n> +void\n> +ka_reload_datapath_threads_end(void)\n> +{\n> +    atomic_store_relaxed(&ka_info.reload_threads, false);\n> +}\n> +\n> +/* Register thread to KA framework. */\n> +void\n> +ka_register_thread(pid_t tid)\n> +{\n> +    if (ka_is_enabled()) {\n> +        struct ka_process_info *ka_pinfo;\n> +        int core_id = -1;\n> +        char proc_name[18] = \"UNDEFINED\";\n> +\n> +        struct process_info pinfo;\n> +        int success = get_process_info(tid, &pinfo);\n> +        if (success) {\n> +            core_id = pinfo.core_id;\n> +            ovs_strlcpy(proc_name, pinfo.name, sizeof proc_name);\n> +        }\n> +\n> +        uint32_t hash = hash_int(tid, 0);\n> +        ovs_mutex_lock(&ka_info.proclist_mutex);\n> +        HMAP_FOR_EACH_WITH_HASH (ka_pinfo, node,\n> +                                 hash, &ka_info.process_list) {\n> +            /* Thread is already registered. */\n> +            if (ka_pinfo->tid == tid) {\n> +                goto out;\n> +            }\n> +        }\n> +\n> +        ka_pinfo = xmalloc(sizeof *ka_pinfo);\n> +        ka_pinfo->tid = tid;\n> +        ka_pinfo->core_id = core_id;\n> +        ovs_strlcpy(ka_pinfo->name, proc_name, sizeof ka_pinfo->name);\n> +\n> +        hmap_insert(&ka_info.process_list, &ka_pinfo->node, hash);\n> +\n> +        ka_pinfo->state = KA_STATE_ALIVE;\n> +        ka_pinfo->last_seen_time = time_wall_msec();\n> +        ka_info.thread_cnt++;  /* Increment count of registered threads. */\n> +out:\n> +        ovs_mutex_unlock(&ka_info.proclist_mutex);\n> +    }\n> +}\n> +\n> +/* Unregister thread from KA framework. */\n> +void\n> +ka_unregister_thread(pid_t tid)\n> +{\n> +    if (ka_is_enabled()) {\n> +        struct ka_process_info *ka_pinfo;\n> +\n> +        ovs_mutex_lock(&ka_info.proclist_mutex);\n> +        HMAP_FOR_EACH_WITH_HASH (ka_pinfo, node, hash_int(tid, 0),\n> +                                 &ka_info.process_list) {\n> +            /* If thread is registered, remove it from the list */\n> +            if (ka_pinfo->tid == tid) {\n> +                hmap_remove(&ka_info.process_list, &ka_pinfo->node);\n> +                free(ka_pinfo);\n> +\n> +                ka_pinfo->state = KA_STATE_UNUSED;\n> +                ka_info.thread_cnt--;  /* Decrement thread count. */\n> +                break;\n> +            }\n> +        }\n> +        ovs_mutex_unlock(&ka_info.proclist_mutex);\n> +    }\n> +}\n> +\n> +/* Free the 'ka_info.cached_process_list' list. */\n> +void\n> +ka_free_cached_threads(void)\n> +{\n> +    struct ka_process_info *pinfo_cached;\n> +    /* Free threads in the cached list. */\n> +    HMAP_FOR_EACH_POP (pinfo_cached, node, &ka_info.cached_process_list) {\n> +        free(pinfo_cached);\n> +    }\n> +    hmap_shrink(&ka_info.cached_process_list);\n> +}\n> +\n> +/* Cache the list of registered threads from 'ka_info.process_list'\n> + * map into 'ka_info.cached_process_list.\n> + *\n> + * 'cached_process_list' map is an exact copy of 'process_list' that will\n> + * be updated by 'pmd' and 'ovs_keepalive' threads as part of heartbeat\n> + * mechanism.  This cached copy is created so that the heartbeats can be\n> + * performed with out acquiring locks.\n> + *\n> + * On datapath reconfiguration, both the 'process_list' and the cached copy\n> + * 'cached_process_list' is updated after setting 'reload_threads' to 'true'\n> + * so that pmd doesn't heartbeat while the maps are updated.\n> + *\n> + */\n> +void\n> +ka_cache_registered_threads(void)\n> +{\n> +    struct ka_process_info *pinfo, *next, *pinfo_cached;\n> +\n> +    ka_free_cached_threads();\n> +\n> +    HMAP_FOR_EACH_SAFE (pinfo, next, node, &ka_info.process_list) {\n> +        pinfo_cached = xmemdup(pinfo, sizeof *pinfo_cached);\n> +        hmap_insert(&ka_info.cached_process_list, &pinfo_cached->node,\n> +                     hash_int(pinfo->tid,0));\n> +    }\n> +}\n> +\n> +/* Mark packet processing thread alive. */\n> +void\n> +ka_mark_pmd_thread_alive(int tid)\n> +{\n> +    if (ka_can_update_state()) {\n> +        struct ka_process_info *pinfo;\n> +        HMAP_FOR_EACH_WITH_HASH (pinfo, node, hash_int(tid, 0),\n> +                             &ka_info.cached_process_list) {\n> +            if (pinfo->tid == tid) {\n> +                pinfo->state = KA_STATE_ALIVE;\n> +            }\n\n[Antonio] just wondering if we should add some log messages here for\nthose weird cases like:\n - a pinfo is found, but pinfo->tid != tid\n - no pinfo was found with this tid\nI guess these cases shouldn't occur but, considering this implementation\nhas a certain complexity - eg reload in progress - would it worth to log\nmore info to track unexpected conditions?\n\n\n> +        }\n> +    }\n> +}\n> +\n> +/* Mark packet processing thread as idle. */\n> +void\n> +ka_mark_pmd_thread_sleep(int tid)\n> +{\n> +    if (ka_can_update_state()) {\n> +        struct ka_process_info *pinfo;\n> +\n> +        HMAP_FOR_EACH_WITH_HASH (pinfo, node, hash_int(tid, 0),\n> +                             &ka_info.cached_process_list) {\n> +            if (pinfo->tid == tid) {\n> +                pinfo->state = KA_STATE_DOZING;\n> +            }\n\n[Antonio] same as previous comment.\n\n\n> +        }\n> +    }\n> +}\n> +\n>  void\n>  ka_init(const struct smap *ovs_other_config)\n>  {\n> @@ -121,6 +300,7 @@ ka_init(const struct smap *ovs_other_config)\n>              keepalive_register_relay_cb(ka_update_thread_state, NULL);\n>              ovs_mutex_init(&ka_info.proclist_mutex);\n>              hmap_init(&ka_info.process_list);\n> +            hmap_init(&ka_info.cached_process_list);\n> \n>              ka_info.init_time = time_wall_msec();\n> \n> @@ -141,5 +321,8 @@ ka_destroy(void)\n>      ovs_mutex_unlock(&ka_info.proclist_mutex);\n> \n>      hmap_destroy(&ka_info.process_list);\n> +\n> +    ka_free_cached_threads();\n> +    hmap_destroy(&ka_info.cached_process_list);\n>      ovs_mutex_destroy(&ka_info.proclist_mutex);\n>  }\n> diff --git a/lib/keepalive.h b/lib/keepalive.h\n> index 6b33243..9e8bfdf 100644\n> --- a/lib/keepalive.h\n> +++ b/lib/keepalive.h\n> @@ -50,6 +50,9 @@ enum keepalive_state {\n>  };\n> \n>  struct ka_process_info {\n> +    /* Process name. */\n> +    char name[16];\n> +\n>      /* Thread id of the process, retrieved using ovs_gettid(). */\n>      pid_t tid;\n> \n> @@ -73,15 +76,32 @@ struct keepalive_info {\n>      /* List of process/threads monitored by KA framework. */\n>      struct hmap process_list OVS_GUARDED;\n> \n> +    /* cached copy of 'process_list' list. */\n> +    struct hmap cached_process_list;\n> +\n> +    /* count of threads registered to KA framework. */\n> +    uint32_t thread_cnt;\n> +\n>      /* Keepalive initialization time. */\n>      uint64_t init_time;\n> \n>      /* keepalive relay handler. */\n>      ka_relay_cb relay_cb;\n>      void *relay_cb_data;\n> +\n> +    atomic_bool reload_threads;   /* Reload threads in to cached list. */\n>  };\n> \n>  bool ka_is_enabled(void);\n> +uint32_t get_ka_interval(void);\n> +void ka_reload_datapath_threads_begin(void);\n> +void ka_reload_datapath_threads_end(void);\n> +void ka_register_thread(pid_t);\n> +void ka_unregister_thread(pid_t);\n> +void ka_free_cached_threads(void);\n> +void ka_cache_registered_threads(void);\n> +void ka_mark_pmd_thread_alive(int);\n> +void ka_mark_pmd_thread_sleep(int);\n>  void ka_init(const struct smap *);\n>  void ka_destroy(void);\n> \n> diff --git a/lib/ovs-thread.c b/lib/ovs-thread.c\n> index 1f4995b..ad1d1b0 100644\n> --- a/lib/ovs-thread.c\n> +++ b/lib/ovs-thread.c\n> @@ -597,6 +597,12 @@ thread_is_pmd(void)\n>      return !strncmp(name, \"pmd\", 3);\n>  }\n> \n> +void\n> +ovsthread_settid(pid_t *tid)\n> +{\n> +    *tid = ovs_gettid();\n> +}\n> +\n>  \n\n>  /* ovsthread_key. */\n> \n> diff --git a/lib/ovs-thread.h b/lib/ovs-thread.h\n> index 55e51a4..018bbb2 100644\n> --- a/lib/ovs-thread.h\n> +++ b/lib/ovs-thread.h\n> @@ -524,5 +524,6 @@ bool may_fork(void);\n> \n>  int count_cpu_cores(void);\n>  bool thread_is_pmd(void);\n> +void ovsthread_settid(pid_t *);\n> \n>  #endif /* ovs-thread.h */\n> diff --git a/lib/util.c b/lib/util.c\n> index 4ad7eea..c94969a 100644\n> --- a/lib/util.c\n> +++ b/lib/util.c\n> @@ -26,6 +26,12 @@\n>  #include <stdlib.h>\n>  #include <string.h>\n>  #include <sys/stat.h>\n> +#ifdef __linux__\n> +#include <sys/syscall.h>\n> +#endif\n> +#ifdef __FreeBSD__\n> +#include <sys/thr.h>\n> +#endif\n>  #include <unistd.h>\n>  #include \"bitmap.h\"\n>  #include \"byte-order.h\"\n> @@ -568,6 +574,22 @@ get_page_size(void)\n>      return cached;\n>  }\n> \n> +/* Returns the tid of the calling thread if supported, -EINVAL otherwise. */\n> +pid_t\n> +ovs_gettid(void)\n> +{\n> +#ifdef __linux__\n> +    return syscall(SYS_gettid);\n> +#elif defined(__FreeBSD__) || defined(__NetBSD__)\n> +    long tid;\n> +    thr_self(&tid);\n> +    return (pid_t)tid;\n> +#endif\n> +\n> +    VLOG_ERR(\"ovs_gettid(): unsupported.\");\n> +    return -EINVAL;\n> +}\n> +\n>  /* Returns the time at which the system booted, as the number of milliseconds\n>   * since the epoch, or 0 if the time of boot cannot be determined. */\n>  long long int\n> diff --git a/lib/util.h b/lib/util.h\n> index 0449fa1..844dd34 100644\n> --- a/lib/util.h\n> +++ b/lib/util.h\n> @@ -143,6 +143,7 @@ void free_cacheline(void *);\n> \n>  void ovs_strlcpy(char *dst, const char *src, size_t size);\n>  void ovs_strzcpy(char *dst, const char *src, size_t size);\n> +pid_t ovs_gettid(void);\n> \n>  /* The C standards say that neither the 'dst' nor 'src' argument to\n>   * memcpy() may be null, even if 'n' is zero.  This wrapper tolerates\n> --\n> 2.4.11\n> \n> _______________________________________________\n> dev mailing list\n> dev@openvswitch.org\n> https://mail.openvswitch.org/mailman/listinfo/ovs-dev","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3yD8d42NC7z9sNr\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat, 14 Oct 2017 01:05:42 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id CC15BBBC;\n\tFri, 13 Oct 2017 14:05:37 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 884B4B9E\n\tfor <dev@openvswitch.org>; Fri, 13 Oct 2017 14:05:36 +0000 (UTC)","from mga07.intel.com (mga07.intel.com [134.134.136.100])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id 4D50D4BE\n\tfor <dev@openvswitch.org>; Fri, 13 Oct 2017 14:05:35 +0000 (UTC)","from orsmga002.jf.intel.com ([10.7.209.21])\n\tby orsmga105.jf.intel.com with ESMTP; 13 Oct 2017 07:05:34 -0700","from irsmsx109.ger.corp.intel.com ([163.33.3.23])\n\tby orsmga002.jf.intel.com with ESMTP; 13 Oct 2017 07:05:33 -0700","from irsmsx101.ger.corp.intel.com ([169.254.1.22]) by\n\tIRSMSX109.ger.corp.intel.com ([169.254.13.28]) with mapi id\n\t14.03.0319.002; Fri, 13 Oct 2017 15:05:32 +0100"],"X-Greylist":"domain auto-whitelisted by SQLgrey-1.7.6","X-ExtLoop1":"1","X-IronPort-AV":"E=Sophos;i=\"5.43,371,1503385200\"; d=\"scan'208\";a=\"146128529\"","From":"\"Fischetti, Antonio\" <antonio.fischetti@intel.com>","To":"\"Bodireddy, Bhanuprakash\" <bhanuprakash.bodireddy@intel.com>,\n\t\"dev@openvswitch.org\" <dev@openvswitch.org>","Thread-Topic":"[ovs-dev] [PATCH v5 04/10] dpif-netdev: Register packet\n\tprocessing\tcores to KA framework.","Thread-Index":"AQHTLkNBP8cAWnCoU0az7JeDZZ/JKqLh5UmA","Date":"Fri, 13 Oct 2017 14:05:31 +0000","Message-ID":"<BCFD2BB875535045A5368D9ADBF2969935048F25@IRSMSX101.ger.corp.intel.com>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<1505493630-71065-5-git-send-email-bhanuprakash.bodireddy@intel.com>","In-Reply-To":"<1505493630-71065-5-git-send-email-bhanuprakash.bodireddy@intel.com>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","x-titus-metadata-40":"eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMjVkOGFmNjItMjVlNi00YWY4LWE2ZWQtYjI5MWY3NTQ0OGZmIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6IlhPZEdPSlFueThtMXhpSHFzNVA4KzJMaGxBQ0paZHMyS3JVR1VxTlZCa1k9In0=","x-ctpclassification":"CTP_IC","dlp-product":"dlpe-windows","dlp-version":"11.0.0.116","dlp-reaction":"no-action","x-originating-ip":"[163.33.239.181]","MIME-Version":"1.0","X-Spam-Status":"No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED,\n\tRP_MATCHES_RCVD autolearn=disabled version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Subject":"Re: [ovs-dev] [PATCH v5 04/10] dpif-netdev: Register packet\n\tprocessing\tcores to KA framework.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1786307,"web_url":"http://patchwork.ozlabs.org/comment/1786307/","msgid":"<BCFD2BB875535045A5368D9ADBF2969935048F35@IRSMSX101.ger.corp.intel.com>","list_archive_url":null,"date":"2017-10-13T14:05:47","subject":"Re: [ovs-dev] [PATCH v5 05/10] dpif-netdev: Enable heartbeats for\n\tDPDK\tdatapath.","submitter":{"id":68178,"url":"http://patchwork.ozlabs.org/api/people/68178/","name":"Fischetti, Antonio","email":"antonio.fischetti@intel.com"},"content":"A couple of minor comments inline.\n\n-Antonio\n\n> -----Original Message-----\n> From: ovs-dev-bounces@openvswitch.org [mailto:ovs-dev-bounces@openvswitch.org]\n> On Behalf Of Bhanuprakash Bodireddy\n> Sent: Friday, September 15, 2017 5:40 PM\n> To: dev@openvswitch.org\n> Subject: [ovs-dev] [PATCH v5 05/10] dpif-netdev: Enable heartbeats for DPDK\n> datapath.\n> \n> This commit adds heartbeat mechanism support for DPDK datapath. Heartbeats\n> are sent to registered PMD threads at predefined intervals (as set in ovsdb\n> with 'keepalive-interval').\n> \n> The heartbeats are only enabled when there is atleast one port added to\n> the bridge and with active PMD thread polling the port.\n> \n> Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy@intel.com>\n> ---\n>  lib/dpif-netdev.c | 15 +++++++++++++--\n>  lib/keepalive.c   | 44 ++++++++++++++++++++++++++++++++++++++++++++\n>  lib/keepalive.h   |  1 +\n>  3 files changed, 58 insertions(+), 2 deletions(-)\n> \n> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c\n> index da419d5..fd0ce61 100644\n> --- a/lib/dpif-netdev.c\n> +++ b/lib/dpif-netdev.c\n> @@ -1021,14 +1021,25 @@ sorted_poll_thread_list(struct dp_netdev *dp,\n>  }\n> \n>  static void *\n> -ovs_keepalive(void *f_ OVS_UNUSED)\n> +ovs_keepalive(void *f_)\n>  {\n> +    struct dp_netdev *dp = f_;\n> +\n>      pthread_detach(pthread_self());\n> \n>      for (;;) {\n> -        int interval;\n> +        int interval, n_pmds;\n> +        bool hb_enable;\n> \n>          interval = get_ka_interval();\n> +        n_pmds = cmap_count(&dp->poll_threads) - 1;\n> +        hb_enable = (n_pmds > 0) ? true : false;\n> +\n> +        /* Dispatch heartbeats only if pmd[s] exist. */\n> +        if (hb_enable) {\n> +            dispatch_heartbeats();\n> +        }\n> +\n>          xnanosleep(interval);\n>      }\n> \n> diff --git a/lib/keepalive.c b/lib/keepalive.c\n> index da4defd..3067e73 100644\n> --- a/lib/keepalive.c\n> +++ b/lib/keepalive.c\n> @@ -284,6 +284,50 @@ ka_mark_pmd_thread_sleep(int tid)\n>      }\n>  }\n> \n> +/* Dispatch heartbeats from 'ovs_keepalive' thread. */\n> +void\n> +dispatch_heartbeats(void)\n> +{\n\n[Antonio] I'd rather call this function ka_state_update() or similar?\n\n \n> +    struct ka_process_info *pinfo, *pinfo_next;\n> +\n> +    /* Iterates over the list of processes in 'cached_process_list' map. */\n> +    HMAP_FOR_EACH_SAFE (pinfo, pinfo_next, node,\n> +                        &ka_info.cached_process_list) {\n> +        if (pinfo->state == KA_STATE_UNUSED) {\n> +            continue;\n> +        }\n> +\n> +        switch (pinfo->state) {\n> +        case KA_STATE_UNUSED:\n\n[Antonio] this case statement could be removed as already managed above.\n\n\n> +            break;\n> +        case KA_STATE_ALIVE:\n> +            pinfo->state = KA_STATE_MISSING;\n> +            pinfo->last_seen_time = time_wall_msec();\n> +            break;\n> +        case KA_STATE_MISSING:\n> +            pinfo->state = KA_STATE_DEAD;\n> +            break;\n> +        case KA_STATE_DEAD:\n> +            pinfo->state = KA_STATE_GONE;\n> +            break;\n> +        case KA_STATE_GONE:\n> +            break;\n> +        case KA_STATE_DOZING:\n> +            pinfo->state = KA_STATE_SLEEP;\n> +            pinfo->last_seen_time = time_wall_msec();\n> +            break;\n> +        case KA_STATE_SLEEP:\n> +            break;\n> +        default:\n> +            OVS_NOT_REACHED();\n> +        }\n> +\n> +        /* Invoke 'ka_update_thread_state' cb function to update state info\n> +         * in to 'ka_info.process_list' map. */\n> +        ka_info.relay_cb(pinfo->tid, pinfo->state, pinfo->last_seen_time);\n> +    }\n> +}\n> +\n>  void\n>  ka_init(const struct smap *ovs_other_config)\n>  {\n> diff --git a/lib/keepalive.h b/lib/keepalive.h\n> index 9e8bfdf..392a701 100644\n> --- a/lib/keepalive.h\n> +++ b/lib/keepalive.h\n> @@ -102,6 +102,7 @@ void ka_free_cached_threads(void);\n>  void ka_cache_registered_threads(void);\n>  void ka_mark_pmd_thread_alive(int);\n>  void ka_mark_pmd_thread_sleep(int);\n> +void dispatch_heartbeats(void);\n>  void ka_init(const struct smap *);\n>  void ka_destroy(void);\n> \n> --\n> 2.4.11\n> \n> _______________________________________________\n> dev mailing list\n> dev@openvswitch.org\n> https://mail.openvswitch.org/mailman/listinfo/ovs-dev","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3yD8dv5CkFz9sP1\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat, 14 Oct 2017 01:06:27 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id 6011EBC6;\n\tFri, 13 Oct 2017 14:05:53 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 0FF47BC5\n\tfor <dev@openvswitch.org>; Fri, 13 Oct 2017 14:05:52 +0000 (UTC)","from mga07.intel.com (mga07.intel.com [134.134.136.100])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id 91C5E4CF\n\tfor <dev@openvswitch.org>; Fri, 13 Oct 2017 14:05:51 +0000 (UTC)","from orsmga001.jf.intel.com ([10.7.209.18])\n\tby orsmga105.jf.intel.com with ESMTP; 13 Oct 2017 07:05:51 -0700","from irsmsx153.ger.corp.intel.com ([163.33.192.75])\n\tby orsmga001.jf.intel.com with ESMTP; 13 Oct 2017 07:05:49 -0700","from irsmsx112.ger.corp.intel.com (10.108.20.5) by\n\tIRSMSX153.ger.corp.intel.com (163.33.192.75) with Microsoft SMTP\n\tServer (TLS) id 14.3.319.2; Fri, 13 Oct 2017 15:05:48 +0100","from irsmsx101.ger.corp.intel.com ([169.254.1.22]) by\n\tirsmsx112.ger.corp.intel.com ([169.254.1.12]) with mapi id\n\t14.03.0319.002; Fri, 13 Oct 2017 15:05:47 +0100"],"X-Greylist":"domain auto-whitelisted by SQLgrey-1.7.6","X-ExtLoop1":"1","X-IronPort-AV":"E=Sophos; i=\"5.43,371,1503385200\"; d=\"scan'208\";\n\ta=\"1181630432\"","From":"\"Fischetti, Antonio\" <antonio.fischetti@intel.com>","To":"\"Bodireddy, Bhanuprakash\" <bhanuprakash.bodireddy@intel.com>,\n\t\"dev@openvswitch.org\" <dev@openvswitch.org>","Thread-Topic":"[ovs-dev] [PATCH v5 05/10] dpif-netdev: Enable heartbeats for\n\tDPDK\tdatapath.","Thread-Index":"AQHTLkNcpazf6yJOz02Yj92DlxNlgaLh9vSA","Date":"Fri, 13 Oct 2017 14:05:47 +0000","Message-ID":"<BCFD2BB875535045A5368D9ADBF2969935048F35@IRSMSX101.ger.corp.intel.com>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<1505493630-71065-6-git-send-email-bhanuprakash.bodireddy@intel.com>","In-Reply-To":"<1505493630-71065-6-git-send-email-bhanuprakash.bodireddy@intel.com>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","x-titus-metadata-40":"eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNmZlMDZiOWMtZDQ3MS00OTlmLTg2MTgtMDJiODdiY2M1YWRlIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6IkIyNHdMMENEcHJaeWZKNmplV0hxXC9rbGNEMnVtSkZieG9sWFNObE53bFFBPSJ9","x-ctpclassification":"CTP_IC","dlp-product":"dlpe-windows","dlp-version":"11.0.0.116","dlp-reaction":"no-action","x-originating-ip":"[163.33.239.181]","MIME-Version":"1.0","X-Spam-Status":"No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED,\n\tRP_MATCHES_RCVD autolearn=disabled version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Subject":"Re: [ovs-dev] [PATCH v5 05/10] dpif-netdev: Enable heartbeats for\n\tDPDK\tdatapath.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1786308,"web_url":"http://patchwork.ozlabs.org/comment/1786308/","msgid":"<BCFD2BB875535045A5368D9ADBF2969935048F19@IRSMSX101.ger.corp.intel.com>","list_archive_url":null,"date":"2017-10-13T14:05:21","subject":"Re: [ovs-dev] [PATCH v5 02/10] Keepalive: Add initial keepalive\n\tsupport.","submitter":{"id":68178,"url":"http://patchwork.ozlabs.org/api/people/68178/","name":"Fischetti, Antonio","email":"antonio.fischetti@intel.com"},"content":"Hi Bhanu,\na couple of minor comments below.\n\n-Antonio\n\n> -----Original Message-----\n> From: ovs-dev-bounces@openvswitch.org [mailto:ovs-dev-bounces@openvswitch.org]\n> On Behalf Of Bhanuprakash Bodireddy\n> Sent: Friday, September 15, 2017 5:40 PM\n> To: dev@openvswitch.org\n> Subject: [ovs-dev] [PATCH v5 02/10] Keepalive: Add initial keepalive support.\n> \n> This commit introduces the initial keepalive support by adding\n> 'keepalive' module and also helper and initialization functions\n> that will be invoked by later commits.\n> \n> This commit adds new ovsdb column \"keepalive\" that shows the status\n> of the datapath threads. This is implemented for DPDK datapath and\n> only status of PMD threads is reported.\n> \n> Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy@intel.com>\n> ---\n>  lib/automake.mk            |   2 +\n>  lib/keepalive.c            | 145 +++++++++++++++++++++++++++++++++++++++++++++\n>  lib/keepalive.h            |  88 +++++++++++++++++++++++++++\n>  vswitchd/bridge.c          |   3 +\n>  vswitchd/vswitch.ovsschema |   8 ++-\n>  vswitchd/vswitch.xml       |  49 +++++++++++++++\n>  6 files changed, 293 insertions(+), 2 deletions(-)\n>  create mode 100644 lib/keepalive.c\n>  create mode 100644 lib/keepalive.h\n> \n> diff --git a/lib/automake.mk b/lib/automake.mk\n> index 2415f4c..0d99f0a 100644\n> --- a/lib/automake.mk\n> +++ b/lib/automake.mk\n> @@ -110,6 +110,8 @@ lib_libopenvswitch_la_SOURCES = \\\n>  \tlib/json.c \\\n>  \tlib/jsonrpc.c \\\n>  \tlib/jsonrpc.h \\\n> +\tlib/keepalive.c \\\n> +\tlib/keepalive.h \\\n>  \tlib/lacp.c \\\n>  \tlib/lacp.h \\\n>  \tlib/latch.h \\\n> diff --git a/lib/keepalive.c b/lib/keepalive.c\n> new file mode 100644\n> index 0000000..1f151f6\n> --- /dev/null\n> +++ b/lib/keepalive.c\n> @@ -0,0 +1,145 @@\n> +/*\n> + * Copyright (c) 2017 Intel, Inc.\n> + *\n> + * Licensed under the Apache License, Version 2.0 (the \"License\");\n> + * you may not use this file except in compliance with the License.\n> + * You may obtain a copy of the License at:\n> + *\n> + *     http://www.apache.org/licenses/LICENSE-2.0\n> + *\n> + * Unless required by applicable law or agreed to in writing, software\n> + * distributed under the License is distributed on an \"AS IS\" BASIS,\n> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n> + * See the License for the specific language governing permissions and\n> + * limitations under the License.\n> + */\n> +\n> +#include <config.h>\n> +\n> +#include \"keepalive.h\"\n> +#include \"lib/vswitch-idl.h\"\n> +#include \"openvswitch/vlog.h\"\n> +#include \"seq.h\"\n> +#include \"timeval.h\"\n> +\n> +VLOG_DEFINE_THIS_MODULE(keepalive);\n> +\n> +static bool keepalive_enable = false;      /* Keepalive disabled by default.\n> */\n> +static uint32_t keepalive_timer_interval;  /* keepalive timer interval. */\n> +static struct keepalive_info ka_info;\n> +\n> +/* Returns true if keepalive is enabled, false otherwise. */\n> +bool\n> +ka_is_enabled(void)\n> +{\n> +    return keepalive_enable;\n> +}\n> +\n> +/* Finds the thread by 'tid' in 'process_list' map and update\n> + * the thread state and last_seen_time stamp.  This is invoked\n> + * periodically(based on keepalive-interval) as part of callback\n> + * function in the context of keepalive thread.\n> + */\n> +static void\n> +ka_set_thread_state_ts(pid_t tid, enum keepalive_state state,\n> +                       uint64_t last_alive)\n> +{\n> +    struct ka_process_info *pinfo;\n> +\n> +    ovs_mutex_lock(&ka_info.proclist_mutex);\n> +    HMAP_FOR_EACH_WITH_HASH (pinfo, node, hash_int(tid, 0),\n> +                             &ka_info.process_list) {\n> +        if (pinfo->tid == tid) {\n> +            pinfo->state = state;\n> +            pinfo->last_seen_time = last_alive;\n> +        }\n> +    }\n> +    ovs_mutex_unlock(&ka_info.proclist_mutex);\n> +}\n> +\n> +/* Retrieve and return the keepalive timer interval from OVSDB. */\n> +static uint32_t\n> +ka_get_timer_interval(const struct smap *ovs_other_config)\n> +{\n> +    uint32_t ka_interval;\n> +\n> +    /* Timer granularity in milliseconds\n> +     * Defaults to OVS_KEEPALIVE_TIMEOUT(ms) if not set */\n\n[Antonio] typo\n        * Defaults to OVS_KEEPALIVE_DEFAULT_TIMEOUT (ms) if not set. */\n\n> +    ka_interval = smap_get_int(ovs_other_config, \"keepalive-interval\",\n> +                               OVS_KEEPALIVE_DEFAULT_TIMEOUT);\n> +\n> +    VLOG_INFO(\"Keepalive timer interval set to %\"PRIu32\" (ms)\\n\",\n> ka_interval);\n> +    return ka_interval;\n> +}\n> +\n> +/*\n> + * This function is invoked periodically to write the status and\n> + * last seen timestamp of the thread in to 'process_list' map.\n> + */\n> +static void\n> +ka_update_thread_state(pid_t tid, const enum keepalive_state state,\n> +                       uint64_t last_alive)\n> +{\n> +    switch (state) {\n> +    case KA_STATE_ALIVE:\n> +    case KA_STATE_MISSING:\n> +        ka_set_thread_state_ts(tid, KA_STATE_ALIVE, last_alive);\n> +        break;\n> +    case KA_STATE_UNUSED:\n> +    case KA_STATE_DOZING:\n> +    case KA_STATE_SLEEP:\n> +    case KA_STATE_DEAD:\n> +    case KA_STATE_GONE:\n> +        ka_set_thread_state_ts(tid, state, last_alive);\n> +        break;\n> +    default:\n> +        OVS_NOT_REACHED();\n> +    }\n> +}\n> +\n> +/* Register relay callback function. */\n> +static void\n> +keepalive_register_relay_cb(ka_relay_cb cb, void *aux)\n> +{\n> +    ka_info.relay_cb = cb;\n> +    ka_info.relay_cb_data = aux;\n> +}\n> +\n> +void\n> +ka_init(const struct smap *ovs_other_config)\n> +{\n> +    if (smap_get_bool(ovs_other_config, \"enable-keepalive\", false)) {\n> +        static struct ovsthread_once once_enable = OVSTHREAD_ONCE_INITIALIZER;\n> +\n> +        if (ovsthread_once_start(&once_enable)) {\n> +            keepalive_enable =  true;\n> +            VLOG_INFO(\"OvS Keepalive enabled.\");\n> +\n> +            keepalive_timer_interval =\n> +                ka_get_timer_interval(ovs_other_config);\n> +\n> +            keepalive_register_relay_cb(ka_update_thread_state, NULL);\n> +            ovs_mutex_init(&ka_info.proclist_mutex);\n> +            hmap_init(&ka_info.process_list);\n> +\n> +            ka_info.init_time = time_wall_msec();\n> +\n> +            ovsthread_once_done(&once_enable);\n> +        }\n> +    }\n> +}\n> +\n> +void\n> +ka_destroy(void)\n> +{\n> +    struct ka_process_info *pinfo;\n> +\n> +    ovs_mutex_lock(&ka_info.proclist_mutex);\n> +    HMAP_FOR_EACH_POP (pinfo, node, &ka_info.process_list) {\n> +        free(pinfo);\n> +    }\n> +    ovs_mutex_unlock(&ka_info.proclist_mutex);\n> +\n> +    hmap_destroy(&ka_info.process_list);\n> +    ovs_mutex_destroy(&ka_info.proclist_mutex);\n> +}\n> diff --git a/lib/keepalive.h b/lib/keepalive.h\n> new file mode 100644\n> index 0000000..6b33243\n> --- /dev/null\n> +++ b/lib/keepalive.h\n> @@ -0,0 +1,88 @@\n> +/*\n> + * Copyright (c) 2017 Intel, Inc.\n> + *\n> + * Licensed under the Apache License, Version 2.0 (the \"License\");\n> + * you may not use this file except in compliance with the License.\n> + * You may obtain a copy of the License at:\n> + *\n> + *     http://www.apache.org/licenses/LICENSE-2.0\n> + *\n> + * Unless required by applicable law or agreed to in writing, software\n> + * distributed under the License is distributed on an \"AS IS\" BASIS,\n> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n> + * See the License for the specific language governing permissions and\n> + * limitations under the License.\n> + */\n> +\n> +#ifndef KEEPALIVE_H\n> +#define KEEPALIVE_H\n> +\n> +#include <stdint.h>\n> +#include \"openvswitch/hmap.h\"\n> +#include \"ovs-thread.h\"\n> +\n> +/* Default timeout set to 1000ms */\n> +#define OVS_KEEPALIVE_DEFAULT_TIMEOUT 1000\n> +\n> +struct smap;\n> +\n> +/*\n> + * Keepalive states with description\n> + *\n> + * KA_STATE_UNUSED  - Not registered to KA framework.\n> + * KA_STATE_ALIVE   - Thread is alive.\n> + * KA_STATE_MISSING - Thread missed first heartbeat.\n> + * KA_STATE_DEAD    - Thread missed two heartbeats.\n> + * KA_STATE_GONE    - Thread missed two or more heartbeats\n> + *                    and is completely 'burried'.\n> + * KA_STATE_DOZING  - Thread is idle.\n> + * KA_STATE_SLEEP   - Thread is sleeping.\n> + *\n> + */\n> +enum keepalive_state {\n> +    KA_STATE_UNUSED,\n> +    KA_STATE_ALIVE,\n> +    KA_STATE_DEAD,\n> +    KA_STATE_GONE,\n> +    KA_STATE_MISSING,\n> +    KA_STATE_DOZING,\n> +    KA_STATE_SLEEP,\n> +};\n> +\n> +struct ka_process_info {\n> +    /* Thread id of the process, retrieved using ovs_gettid(). */\n> +    pid_t tid;\n> +\n> +    /* Core id the thread was last scheduled. */\n> +    int core_id;\n> +\n> +    /* Last seen thread state. */\n> +    enum keepalive_state state;\n> +\n> +    /* Last seen timestamp of the thread. */\n> +    uint64_t last_seen_time;\n> +    struct hmap_node node;\n> +};\n> +\n> +typedef void (*ka_relay_cb)(int, enum keepalive_state, uint64_t);\n> +\n> +struct keepalive_info {\n> +    /* Mutex for 'process_list'. */\n> +    struct ovs_mutex proclist_mutex;\n> +\n> +    /* List of process/threads monitored by KA framework. */\n> +    struct hmap process_list OVS_GUARDED;\n> +\n> +    /* Keepalive initialization time. */\n> +    uint64_t init_time;\n> +\n> +    /* keepalive relay handler. */\n> +    ka_relay_cb relay_cb;\n> +    void *relay_cb_data;\n> +};\n> +\n> +bool ka_is_enabled(void);\n> +void ka_init(const struct smap *);\n> +void ka_destroy(void);\n> +\n> +#endif /* keepalive.h */\n> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c\n> index eec9689..dd9a009 100644\n> --- a/vswitchd/bridge.c\n> +++ b/vswitchd/bridge.c\n> @@ -34,6 +34,7 @@\n>  #include \"hmapx.h\"\n>  #include \"if-notifier.h\"\n>  #include \"jsonrpc.h\"\n> +#include \"keepalive.h\"\n>  #include \"lacp.h\"\n>  #include \"mac-learning.h\"\n>  #include \"mcast-snooping.h\"\n> @@ -506,6 +507,7 @@ bridge_exit(bool delete_datapath)\n>          bridge_destroy(br, delete_datapath);\n>      }\n>      ovsdb_idl_destroy(idl);\n> +    ka_destroy();\n>  }\n> \n>  /* Looks at the list of managers in 'ovs_cfg' and extracts their remote IP\n> @@ -2959,6 +2961,7 @@ bridge_run(void)\n>      if (cfg) {\n>          netdev_set_flow_api_enabled(&cfg->other_config);\n>          dpdk_init(&cfg->other_config);\n> +        ka_init(&cfg->other_config);\n>      }\n> \n>      /* Initialize the ofproto library.  This only needs to run once, but\n> diff --git a/vswitchd/vswitch.ovsschema b/vswitchd/vswitch.ovsschema\n> index 90e50b6..c56a64c 100644\n> --- a/vswitchd/vswitch.ovsschema\n> +++ b/vswitchd/vswitch.ovsschema\n> @@ -1,6 +1,6 @@\n>  {\"name\": \"Open_vSwitch\",\n> - \"version\": \"7.15.1\",\n> - \"cksum\": \"3682332033 23608\",\n> + \"version\": \"7.16.0\",\n> + \"cksum\": \"3631938350 23762\",\n>   \"tables\": {\n>     \"Open_vSwitch\": {\n>       \"columns\": {\n> @@ -30,6 +30,10 @@\n>           \"type\": {\"key\": \"string\", \"value\": \"string\",\n>                    \"min\": 0, \"max\": \"unlimited\"},\n>           \"ephemeral\": true},\n> +       \"keepalive\": {\n> +         \"type\": {\"key\": \"string\", \"value\": \"string\", \"min\": 0,\n> +                  \"max\": \"unlimited\"},\n> +         \"ephemeral\": true},\n>         \"ovs_version\": {\n>           \"type\": {\"key\": {\"type\": \"string\"},\n>                    \"min\": 0, \"max\": 1}},\n> diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml\n> index 074535b..9c9d8a8 100644\n> --- a/vswitchd/vswitch.xml\n> +++ b/vswitchd/vswitch.xml\n> @@ -568,6 +568,55 @@\n>            </p>\n>          </column>\n>        </group>\n> +\n> +      <group title=\"Keepalive\">\n> +        <p>\n\n[Antonio] minor comment, should we put and rephrase here the following:\n             Valid for OvS-DPDK Datapath only.  This implementation monitors\n             the PMD threads status.  \n          \n> +          The <code>keepalive</code> column contains key-value pairs that\n> +          report health of datapath threads in Open vSwitch.  These are\n> updated\n> +          periodically (based on the keepalive-interval).\n> +        </p>\n> +\n> +        <column name=\"other_config\" key=\"enable-keepalive\"\n> +                type='{\"type\": \"boolean\"}'>\n> +          Keepalive is disabled by default to avoid overhead in the common\n> +          case when heartbeat monitoring is not useful.  Set this value to\n> +          <code>true</code> to enable keepalive <ref column=\"keepalive\"/>\n> +          column or to <code>false</code> to explicitly disable it.\n> +        </column>\n> +\n> +        <column name=\"other_config\" key=\"keepalive-interval\"\n> +                type='{\"type\": \"integer\", \"minInteger\": 100}'>\n> +          <p>\n> +            Specifies the keepalive interval value in milliseconds.\n> +          </p>\n> +          <p>\n> +            If not specified, this will be set to 1000 milliseconds (default\n> +            value). Changing this value requires restarting the daemon.\n> +          </p>\n> +        </column>\n> +\n> +        <column name=\"keepalive\" key=\"PMD_ID\">\n> +          <p>\n> +            One such key-value pair, with <code>ID</code> replaced by the\n> +            PMD thread, will exist for each active PMD thread.  The value is a\n> +            comma-separated list of PMD thread status, core number and the\n> +            last seen timestamp of PMD thread.  In respective order, these\n> +            values are:\n> +          </p>\n> +\n> +          <ol>\n> +            <li>Status of PMD thread.  Valid status include ALIVE, MISSING,\n> +            DEAD, GONE, DOZING, SLEEP.</li>\n> +            <li>Core id the PMD thread was scheduled.</li>\n> +            <li>Last seen timestamp(epoch) of the PMD thread.</li>\n> +          </ol>\n> +\n> +          <p>\n> +            This is only valid for OvS-DPDK Datapath and PMD threads status\n> +            is implemented currently.\n> +          </p>\n\n[Antonio] minor comment, not quite sure if the last <p> section should be moved\nup, right after the <group title=\"Keepalive\">?\n\n\n> +        </column>\n> +      </group>\n>      </group>\n> \n>      <group title=\"Version Reporting\">\n> --\n> 2.4.11\n> \n> _______________________________________________\n> dev mailing list\n> dev@openvswitch.org\n> https://mail.openvswitch.org/mailman/listinfo/ovs-dev","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3yD8fq6vfhz9sNr\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat, 14 Oct 2017 01:07:15 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id 8FAE0BD3;\n\tFri, 13 Oct 2017 14:07:11 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 1015AB1E\n\tfor <dev@openvswitch.org>; Fri, 13 Oct 2017 14:07:10 +0000 (UTC)","from mga07.intel.com (mga07.intel.com [134.134.136.100])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id 35B694BE\n\tfor <dev@openvswitch.org>; Fri, 13 Oct 2017 14:07:09 +0000 (UTC)","from orsmga003.jf.intel.com ([10.7.209.27])\n\tby orsmga105.jf.intel.com with ESMTP; 13 Oct 2017 07:07:08 -0700","from irsmsx151.ger.corp.intel.com ([163.33.192.59])\n\tby orsmga003.jf.intel.com with ESMTP; 13 Oct 2017 07:07:08 -0700","from irsmsx101.ger.corp.intel.com ([169.254.1.22]) by\n\tIRSMSX151.ger.corp.intel.com ([169.254.4.108]) with mapi id\n\t14.03.0319.002; Fri, 13 Oct 2017 15:05:21 +0100"],"X-Greylist":"domain auto-whitelisted by SQLgrey-1.7.6","X-ExtLoop1":"1","X-IronPort-AV":"E=Sophos; i=\"5.43,371,1503385200\"; d=\"scan'208\";\n\ta=\"1024860647\"","From":"\"Fischetti, Antonio\" <antonio.fischetti@intel.com>","To":"\"Bodireddy, Bhanuprakash\" <bhanuprakash.bodireddy@intel.com>,\n\t\"dev@openvswitch.org\" <dev@openvswitch.org>","Thread-Topic":"[ovs-dev] [PATCH v5 02/10] Keepalive: Add initial keepalive\n\tsupport.","Thread-Index":"AQHTLkMRLgbN3reQy0uYV2NPvoMMOqLhxCeQ","Date":"Fri, 13 Oct 2017 14:05:21 +0000","Message-ID":"<BCFD2BB875535045A5368D9ADBF2969935048F19@IRSMSX101.ger.corp.intel.com>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<1505493630-71065-3-git-send-email-bhanuprakash.bodireddy@intel.com>","In-Reply-To":"<1505493630-71065-3-git-send-email-bhanuprakash.bodireddy@intel.com>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","x-titus-metadata-40":"eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMWQyY2Q0ZTktMWYxYS00MDAxLWI5MTAtMDc1Y2Q5MTBjMDZhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6IkxvdUlBT0dmWDBUbE5IcVpyazFTZVg0YVQ1eVdneFpBb2p0WjZtVkVqSzg9In0=","x-ctpclassification":"CTP_IC","dlp-product":"dlpe-windows","dlp-version":"11.0.0.116","dlp-reaction":"no-action","x-originating-ip":"[163.33.239.181]","MIME-Version":"1.0","X-Spam-Status":"No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED,\n\tRP_MATCHES_RCVD autolearn=disabled version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Subject":"Re: [ovs-dev] [PATCH v5 02/10] Keepalive: Add initial keepalive\n\tsupport.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1798886,"web_url":"http://patchwork.ozlabs.org/comment/1798886/","msgid":"<20171103201324.GK27530@ovn.org>","list_archive_url":null,"date":"2017-11-03T20:13:24","subject":"Re: [ovs-dev] [PATCH v5 03/10] util: Add high resolution sleep\n\tsupport.","submitter":{"id":67603,"url":"http://patchwork.ozlabs.org/api/people/67603/","name":"Ben Pfaff","email":"blp@ovn.org"},"content":"On Fri, Sep 15, 2017 at 05:40:23PM +0100, Bhanuprakash Bodireddy wrote:\n> This commit introduces xnanosleep() for the threads needing high\n> resolution sleep timeouts.\n> \n> Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy@intel.com>\n\nThis is a little confusing.  The name xnanosleep() implies that its\nargument would be in nanoseconds, but it's in fact in milliseconds.\nSecond, I don't understand why it's only implemented for Linux.\n\nThanks,\n\nBen.","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3yTCnr0RzFz9sNV\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat,  4 Nov 2017 07:13:35 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id BEC3BD8C;\n\tFri,  3 Nov 2017 20:13:32 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 509ECD6F\n\tfor <dev@openvswitch.org>; Fri,  3 Nov 2017 20:13:31 +0000 (UTC)","from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net\n\t[217.70.183.194])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id CF7B9203\n\tfor <dev@openvswitch.org>; Fri,  3 Nov 2017 20:13:30 +0000 (UTC)","from ovn.org (unknown [208.91.3.26])\n\t(Authenticated sender: blp@ovn.org)\n\tby relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 2C623C5A4F;\n\tFri,  3 Nov 2017 21:13:27 +0100 (CET)"],"X-Greylist":"domain auto-whitelisted by SQLgrey-1.7.6","X-Originating-IP":"208.91.3.26","Date":"Fri, 3 Nov 2017 13:13:24 -0700","From":"Ben Pfaff <blp@ovn.org>","To":"Bhanuprakash Bodireddy <bhanuprakash.bodireddy@intel.com>","Message-ID":"<20171103201324.GK27530@ovn.org>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<1505493630-71065-4-git-send-email-bhanuprakash.bodireddy@intel.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<1505493630-71065-4-git-send-email-bhanuprakash.bodireddy@intel.com>","User-Agent":"Mutt/1.5.23 (2014-03-12)","X-Spam-Status":"No, score=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW\n\tautolearn=disabled version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Cc":"dev@openvswitch.org","Subject":"Re: [ovs-dev] [PATCH v5 03/10] util: Add high resolution sleep\n\tsupport.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1799861,"web_url":"http://patchwork.ozlabs.org/comment/1799861/","msgid":"<7EE4206A5F421D4FBA0A4623185DE2BD3753383D@IRSMSX104.ger.corp.intel.com>","list_archive_url":null,"date":"2017-11-06T17:29:26","subject":"Re: [ovs-dev] [PATCH v5 03/10] util: Add high resolution sleep\n\tsupport.","submitter":{"id":68557,"url":"http://patchwork.ozlabs.org/api/people/68557/","name":"Bodireddy, Bhanuprakash","email":"bhanuprakash.bodireddy@intel.com"},"content":"Hi Ben,\n>\n>On Fri, Sep 15, 2017 at 05:40:23PM +0100, Bhanuprakash Bodireddy wrote:\n>> This commit introduces xnanosleep() for the threads needing high\n>> resolution sleep timeouts.\n>>\n>> Signed-off-by: Bhanuprakash Bodireddy\n>> <bhanuprakash.bodireddy@intel.com>\n>\n>This is a little confusing.  The name xnanosleep() implies that its argument\n>would be in nanoseconds, but it's in fact in milliseconds.\n>Second, I don't understand why it's only implemented for Linux.\n\nI tried reworking this API with nanoseconds argument and implementing nsec_to_timespec() today. \nThis changes works fine on Linux, however the windows build breaks with below error as reported by appveyor.\n\nerror C4013: 'nanosleep' undefined; assuming extern returning int\n(windows.h and time.h headers are included).\n\nBut looks like nanosleep is supported on windows. Any inputs on this would be helpful.\n\n- Bhanuprakash.","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3yW01B6qB9z9s7f\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue,  7 Nov 2017 04:29:34 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id C5711ABA;\n\tMon,  6 Nov 2017 17:29:30 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id D964B2C\n\tfor <dev@openvswitch.org>; Mon,  6 Nov 2017 17:29:29 +0000 (UTC)","from mga06.intel.com (mga06.intel.com [134.134.136.31])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id 72F62501\n\tfor <dev@openvswitch.org>; Mon,  6 Nov 2017 17:29:29 +0000 (UTC)","from orsmga004.jf.intel.com ([10.7.209.38])\n\tby orsmga104.jf.intel.com with ESMTP; 06 Nov 2017 09:29:29 -0800","from irsmsx101.ger.corp.intel.com ([163.33.3.153])\n\tby orsmga004.jf.intel.com with ESMTP; 06 Nov 2017 09:29:28 -0800","from irsmsx104.ger.corp.intel.com ([169.254.5.248]) by\n\tIRSMSX101.ger.corp.intel.com ([169.254.1.22]) with mapi id\n\t14.03.0319.002; Mon, 6 Nov 2017 17:29:27 +0000"],"X-Greylist":"domain auto-whitelisted by SQLgrey-1.7.6","X-ExtLoop1":"1","X-IronPort-AV":"E=Sophos;i=\"5.44,353,1505804400\"; d=\"scan'208\";a=\"146557944\"","From":"\"Bodireddy, Bhanuprakash\" <bhanuprakash.bodireddy@intel.com>","To":"Ben Pfaff <blp@ovn.org>","Thread-Topic":"[ovs-dev] [PATCH v5 03/10] util: Add high resolution sleep\n\tsupport.","Thread-Index":"AQHTLkLlpEVsATUVaU6ElCF/ejeNhKMDY+EAgASG8MA=","Date":"Mon, 6 Nov 2017 17:29:26 +0000","Message-ID":"<7EE4206A5F421D4FBA0A4623185DE2BD3753383D@IRSMSX104.ger.corp.intel.com>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<1505493630-71065-4-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<20171103201324.GK27530@ovn.org>","In-Reply-To":"<20171103201324.GK27530@ovn.org>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","dlp-product":"dlpe-windows","dlp-version":"11.0.0.116","dlp-reaction":"no-action","x-originating-ip":"[163.33.239.182]","MIME-Version":"1.0","X-Spam-Status":"No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED,\n\tRP_MATCHES_RCVD autolearn=disabled version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Cc":"\"dev@openvswitch.org\" <dev@openvswitch.org>","Subject":"Re: [ovs-dev] [PATCH v5 03/10] util: Add high resolution sleep\n\tsupport.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1800029,"web_url":"http://patchwork.ozlabs.org/comment/1800029/","msgid":"<20171106220525.GE27530@ovn.org>","list_archive_url":null,"date":"2017-11-06T22:05:25","subject":"Re: [ovs-dev] [PATCH v5 03/10] util: Add high resolution sleep\n\tsupport.","submitter":{"id":67603,"url":"http://patchwork.ozlabs.org/api/people/67603/","name":"Ben Pfaff","email":"blp@ovn.org"},"content":"On Mon, Nov 06, 2017 at 05:29:26PM +0000, Bodireddy, Bhanuprakash wrote:\n> Hi Ben,\n> >\n> >On Fri, Sep 15, 2017 at 05:40:23PM +0100, Bhanuprakash Bodireddy wrote:\n> >> This commit introduces xnanosleep() for the threads needing high\n> >> resolution sleep timeouts.\n> >>\n> >> Signed-off-by: Bhanuprakash Bodireddy\n> >> <bhanuprakash.bodireddy@intel.com>\n> >\n> >This is a little confusing.  The name xnanosleep() implies that its argument\n> >would be in nanoseconds, but it's in fact in milliseconds.\n> >Second, I don't understand why it's only implemented for Linux.\n> \n> I tried reworking this API with nanoseconds argument and implementing nsec_to_timespec() today. \n> This changes works fine on Linux, however the windows build breaks with below error as reported by appveyor.\n> \n> error C4013: 'nanosleep' undefined; assuming extern returning int\n> (windows.h and time.h headers are included).\n> \n> But looks like nanosleep is supported on windows. Any inputs on this would be helpful.\n\nIf nanosleep isn't available on Windows (it looks like it isn't), then\nI'd recommend using some other function that Windows does have.  If its\nargument isn't in nanoseconds, you can convert it.\n\nIf you don't really need nanosecond resolution (the fact that the\nargument was in milliseconds seems like a hint), then maybe you could\njust use some other function instead of nanosleep, even on Linux.\n\nThis stackoverflow page has some information:\nhttps://stackoverflow.com/questions/7827062/is-there-a-windows-equivalent-of-nanosleep","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3yW67n6cThz9s7f\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue,  7 Nov 2017 09:05:40 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id 358BEAB5;\n\tMon,  6 Nov 2017 22:05:36 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 402E3A70\n\tfor <dev@openvswitch.org>; Mon,  6 Nov 2017 22:05:35 +0000 (UTC)","from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net\n\t[217.70.183.194])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id 6F251D4\n\tfor <dev@openvswitch.org>; Mon,  6 Nov 2017 22:05:34 +0000 (UTC)","from ovn.org (unknown [IPv6:2001:470:108:1300:df7c:9be9:8c7:fd03])\n\t(Authenticated sender: blp@ovn.org)\n\tby relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 7F2ACC5A49;\n\tMon,  6 Nov 2017 23:05:29 +0100 (CET)"],"X-Greylist":"domain auto-whitelisted by SQLgrey-1.7.6","Date":"Mon, 6 Nov 2017 14:05:25 -0800","From":"Ben Pfaff <blp@ovn.org>","To":"\"Bodireddy, Bhanuprakash\" <bhanuprakash.bodireddy@intel.com>","Message-ID":"<20171106220525.GE27530@ovn.org>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<1505493630-71065-4-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<20171103201324.GK27530@ovn.org>\n\t<7EE4206A5F421D4FBA0A4623185DE2BD3753383D@IRSMSX104.ger.corp.intel.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<7EE4206A5F421D4FBA0A4623185DE2BD3753383D@IRSMSX104.ger.corp.intel.com>","User-Agent":"Mutt/1.5.23 (2014-03-12)","X-Spam-Status":"No, score=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW\n\tautolearn=disabled version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Cc":"\"dev@openvswitch.org\" <dev@openvswitch.org>","Subject":"Re: [ovs-dev] [PATCH v5 03/10] util: Add high resolution sleep\n\tsupport.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1800751,"web_url":"http://patchwork.ozlabs.org/comment/1800751/","msgid":"<f7tinemq70e.fsf@dhcp-25-97.bos.redhat.com>","list_archive_url":null,"date":"2017-11-07T18:27:13","subject":"Re: [ovs-dev] [PATCH v5 03/10] util: Add high resolution sleep\n\tsupport.","submitter":{"id":67184,"url":"http://patchwork.ozlabs.org/api/people/67184/","name":"Aaron Conole","email":"aconole@redhat.com"},"content":"Ben Pfaff <blp@ovn.org> writes:\n\n> On Mon, Nov 06, 2017 at 05:29:26PM +0000, Bodireddy, Bhanuprakash wrote:\n>> Hi Ben,\n>> >\n>> >On Fri, Sep 15, 2017 at 05:40:23PM +0100, Bhanuprakash Bodireddy wrote:\n>> >> This commit introduces xnanosleep() for the threads needing high\n>> >> resolution sleep timeouts.\n>> >>\n>> >> Signed-off-by: Bhanuprakash Bodireddy\n>> >> <bhanuprakash.bodireddy@intel.com>\n>> >\n>> >This is a little confusing.  The name xnanosleep() implies that its argument\n>> >would be in nanoseconds, but it's in fact in milliseconds.\n>> >Second, I don't understand why it's only implemented for Linux.\n>> \n>> I tried reworking this API with nanoseconds argument and\n>> implementing nsec_to_timespec() today.\n>> This changes works fine on Linux, however the windows build breaks\n>> with below error as reported by appveyor.\n>> \n>> error C4013: 'nanosleep' undefined; assuming extern returning int\n>> (windows.h and time.h headers are included).\n>> \n>> But looks like nanosleep is supported on windows. Any inputs on this\n>> would be helpful.\n>\n> If nanosleep isn't available on Windows (it looks like it isn't), then\n> I'd recommend using some other function that Windows does have.  If its\n> argument isn't in nanoseconds, you can convert it.\n>\n> If you don't really need nanosecond resolution (the fact that the\n> argument was in milliseconds seems like a hint), then maybe you could\n> just use some other function instead of nanosleep, even on Linux.\n>\n> This stackoverflow page has some information:\n> https://stackoverflow.com/questions/7827062/is-there-a-windows-equivalent-of-nanosleep\n\nSo, there's really no good way in windows of doing this - for OvS, I\nwould suggest reading up on the windows Wait calls\n(https://msdn.microsoft.com/en-us/library/windows/desktop/ms687069(v=vs.85).aspx#waitfunctionsandtime-outintervals).\n\nPrefer those to Sleep(), as Sleep(MS) can stall or deadlock the process\n(at least from what I remember a lifetime ago).","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","ext-mx05.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx05.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=aconole@redhat.com"],"Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3yWdFQ1q5Jz9s1h\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed,  8 Nov 2017 05:27:21 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id D30B6AE7;\n\tTue,  7 Nov 2017 18:27:17 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 28799A71\n\tfor <dev@openvswitch.org>; Tue,  7 Nov 2017 18:27:16 +0000 (UTC)","from mx1.redhat.com (mx1.redhat.com [209.132.183.28])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id C74ACE3\n\tfor <dev@openvswitch.org>; Tue,  7 Nov 2017 18:27:15 +0000 (UTC)","from smtp.corp.redhat.com\n\t(int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 32D1315565;\n\tTue,  7 Nov 2017 18:27:15 +0000 (UTC)","from dhcp-25-97.bos.redhat.com (unknown [10.18.25.172])\n\tby smtp.corp.redhat.com (Postfix) with ESMTPS id 8ADC96BF73;\n\tTue,  7 Nov 2017 18:27:14 +0000 (UTC)"],"X-Greylist":["domain auto-whitelisted by SQLgrey-1.7.6","Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.29]);\n\tTue, 07 Nov 2017 18:27:15 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com 32D1315565","From":"Aaron Conole <aconole@redhat.com>","To":"Ben Pfaff <blp@ovn.org>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<1505493630-71065-4-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<20171103201324.GK27530@ovn.org>\n\t<7EE4206A5F421D4FBA0A4623185DE2BD3753383D@IRSMSX104.ger.corp.intel.com>\n\t<20171106220525.GE27530@ovn.org>","Date":"Tue, 07 Nov 2017 13:27:13 -0500","In-Reply-To":"<20171106220525.GE27530@ovn.org> (Ben Pfaff's message of \"Mon, 6\n\tNov 2017 14:05:25 -0800\")","Message-ID":"<f7tinemq70e.fsf@dhcp-25-97.bos.redhat.com>","User-Agent":"Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)","MIME-Version":"1.0","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.13","X-Spam-Status":"No, score=-5.0 required=5.0 tests=RCVD_IN_DNSWL_HI,\n\tRP_MATCHES_RCVD autolearn=disabled version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Cc":"\"dev@openvswitch.org\" <dev@openvswitch.org>","Subject":"Re: [ovs-dev] [PATCH v5 03/10] util: Add high resolution sleep\n\tsupport.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1800809,"web_url":"http://patchwork.ozlabs.org/comment/1800809/","msgid":"<000401d35808$1b74f9f0$525eedd0$@ovn.org>","list_archive_url":null,"date":"2017-11-07T20:36:34","subject":"Re: [ovs-dev] [PATCH v5 03/10] util: Add high resolution\n\tsleep\tsupport.","submitter":{"id":72181,"url":"http://patchwork.ozlabs.org/api/people/72181/","name":"Alin-Gabriel Serdean","email":"aserdean@ovn.org"},"content":"> Ben Pfaff <blp@ovn.org> writes:\n> \n> > On Mon, Nov 06, 2017 at 05:29:26PM +0000, Bodireddy, Bhanuprakash\n> wrote:\n> >> Hi Ben,\n> >> >\n> >> >On Fri, Sep 15, 2017 at 05:40:23PM +0100, Bhanuprakash Bodireddy\n> wrote:\n> >> >> This commit introduces xnanosleep() for the threads needing high\n> >> >> resolution sleep timeouts.\n> >> >>\n> >> >> Signed-off-by: Bhanuprakash Bodireddy\n> >> >> <bhanuprakash.bodireddy@intel.com>\n> >> >\n> >> >This is a little confusing.  The name xnanosleep() implies that its\n> >> >argument would be in nanoseconds, but it's in fact in milliseconds.\n> >> >Second, I don't understand why it's only implemented for Linux.\n> >>\n> >> I tried reworking this API with nanoseconds argument and implementing\n> >> nsec_to_timespec() today.\n> >> This changes works fine on Linux, however the windows build breaks\n> >> with below error as reported by appveyor.\n> >>\n> >> error C4013: 'nanosleep' undefined; assuming extern returning int\n> >> (windows.h and time.h headers are included).\n> >>\n> >> But looks like nanosleep is supported on windows. Any inputs on this\n> >> would be helpful.\n> >\n> > If nanosleep isn't available on Windows (it looks like it isn't), then\n> > I'd recommend using some other function that Windows does have.  If\n> > its argument isn't in nanoseconds, you can convert it.\n> >\n> > If you don't really need nanosecond resolution (the fact that the\n> > argument was in milliseconds seems like a hint), then maybe you could\n> > just use some other function instead of nanosleep, even on Linux.\n> >\n> > This stackoverflow page has some information:\n> > https://stackoverflow.com/questions/7827062/is-there-a-windows-\n> equival\n> > ent-of-nanosleep\n> \n> So, there's really no good way in windows of doing this - for OvS, I would\n> suggest reading up on the windows Wait calls\n> (https://msdn.microsoft.com/en-\n> us/library/windows/desktop/ms687069(v=vs.85).aspx#waitfunctionsandtim\n> e-outintervals).\n> \n> Prefer those to Sleep(), as Sleep(MS) can stall or deadlock the process\n(at\n> least from what I remember a lifetime ago).\nThere is no direct equivalent unfortunately.\nI would use\nCreateWaitableTimer(https://msdn.microsoft.com/en-us/library/windows/desktop\n/ms682492(v=vs.85).aspx) with SetWaitableTimer\n(https://msdn.microsoft.com/en-us/library/windows/desktop/ms686289(v=vs.85).\naspx) and then wait on the timer(WaitForSingleObject) although you have 100\nnanosecond intervals.\nTo go lower you can use: QueryPerformanceCounter\n(https://msdn.microsoft.com/en-us/library/windows/desktop/ms644904(v=vs.85).\naspx) .\nI can try to do some benchmarks if you need such a high resolution.","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3yWh6c5Gyjz9sNr\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed,  8 Nov 2017 07:36:40 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id 427D7B14;\n\tTue,  7 Nov 2017 20:36:39 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 64140AB6\n\tfor <dev@openvswitch.org>; Tue,  7 Nov 2017 20:36:37 +0000 (UTC)","from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net\n\t[217.70.183.194])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id A41B047A\n\tfor <dev@openvswitch.org>; Tue,  7 Nov 2017 20:36:36 +0000 (UTC)","from cloudbasealin (unknown [79.114.0.160])\n\t(Authenticated sender: aserdean@ovn.org)\n\tby relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 6C0ACC5A46;\n\tTue,  7 Nov 2017 21:36:33 +0100 (CET)"],"X-Greylist":"domain auto-whitelisted by SQLgrey-1.7.6","X-Originating-IP":"79.114.0.160","From":"<aserdean@ovn.org>","To":"\"'Aaron Conole'\" <aconole@redhat.com>, \"'Ben Pfaff'\" <blp@ovn.org>,\n\t\"'Bodireddy, Bhanuprakash'\" <bhanuprakash.bodireddy@intel.com>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\t<1505493630-71065-4-git-send-email-bhanuprakash.bodireddy@intel.com>\t<20171103201324.GK27530@ovn.org>\t<7EE4206A5F421D4FBA0A4623185DE2BD3753383D@IRSMSX104.ger.corp.intel.com>\t<20171106220525.GE27530@ovn.org>\n\t<f7tinemq70e.fsf@dhcp-25-97.bos.redhat.com>","In-Reply-To":"<f7tinemq70e.fsf@dhcp-25-97.bos.redhat.com>","Date":"Tue, 7 Nov 2017 22:36:34 +0200","Message-ID":"<000401d35808$1b74f9f0$525eedd0$@ovn.org>","MIME-Version":"1.0","X-Mailer":"Microsoft Outlook 16.0","Thread-Index":"AQHTV/YRs5tRg+LbRE66AkWIYmu0MaMJWXBA","Content-Language":"ro","X-Spam-Status":"No, score=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW\n\tautolearn=disabled version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Cc":"dev@openvswitch.org","Subject":"Re: [ovs-dev] [PATCH v5 03/10] util: Add high resolution\n\tsleep\tsupport.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1801558,"web_url":"http://patchwork.ozlabs.org/comment/1801558/","msgid":"<7EE4206A5F421D4FBA0A4623185DE2BD3753444F@IRSMSX104.ger.corp.intel.com>","list_archive_url":null,"date":"2017-11-08T16:53:46","subject":"Re: [ovs-dev] [PATCH v5 03/10] util: Add high resolution\n\tsleep\tsupport.","submitter":{"id":68557,"url":"http://patchwork.ozlabs.org/api/people/68557/","name":"Bodireddy, Bhanuprakash","email":"bhanuprakash.bodireddy@intel.com"},"content":">\n>> Ben Pfaff <blp@ovn.org> writes:\n>>\n>> > On Mon, Nov 06, 2017 at 05:29:26PM +0000, Bodireddy, Bhanuprakash\n>> wrote:\n>> >> Hi Ben,\n>> >> >\n>> >> >On Fri, Sep 15, 2017 at 05:40:23PM +0100, Bhanuprakash Bodireddy\n>> wrote:\n>> >> >> This commit introduces xnanosleep() for the threads needing high\n>> >> >> resolution sleep timeouts.\n>> >> >>\n>> >> >> Signed-off-by: Bhanuprakash Bodireddy\n>> >> >> <bhanuprakash.bodireddy@intel.com>\n>> >> >\n>> >> >This is a little confusing.  The name xnanosleep() implies that\n>> >> >its argument would be in nanoseconds, but it's in fact in milliseconds.\n>> >> >Second, I don't understand why it's only implemented for Linux.\n>> >>\n>> >> I tried reworking this API with nanoseconds argument and\n>> >> implementing\n>> >> nsec_to_timespec() today.\n>> >> This changes works fine on Linux, however the windows build breaks\n>> >> with below error as reported by appveyor.\n>> >>\n>> >> error C4013: 'nanosleep' undefined; assuming extern returning int\n>> >> (windows.h and time.h headers are included).\n>> >>\n>> >> But looks like nanosleep is supported on windows. Any inputs on\n>> >> this would be helpful.\n>> >\n>> > If nanosleep isn't available on Windows (it looks like it isn't),\n>> > then I'd recommend using some other function that Windows does have.\n>> > If its argument isn't in nanoseconds, you can convert it.\n>> >\n>> > If you don't really need nanosecond resolution (the fact that the\n>> > argument was in milliseconds seems like a hint), then maybe you\n>> > could just use some other function instead of nanosleep, even on Linux.\n>> >\n>> > This stackoverflow page has some information:\n>> > https://stackoverflow.com/questions/7827062/is-there-a-windows-\n>> equival\n>> > ent-of-nanosleep\n>>\n>> So, there's really no good way in windows of doing this - for OvS, I\n>> would suggest reading up on the windows Wait calls\n>> (https://msdn.microsoft.com/en-\n>> us/library/windows/desktop/ms687069(v=vs.85).aspx#waitfunctionsandtim\n>> e-outintervals).\n>>\n>> Prefer those to Sleep(), as Sleep(MS) can stall or deadlock the\n>> process\n>(at\n>> least from what I remember a lifetime ago).\n>There is no direct equivalent unfortunately.\n>I would use\n>CreateWaitableTimer(https://msdn.microsoft.com/en-\n>us/library/windows/desktop\n>/ms682492(v=vs.85).aspx) with SetWaitableTimer\n>(https://msdn.microsoft.com/en-\n>us/library/windows/desktop/ms686289(v=vs.85).\n>aspx) and then wait on the timer(WaitForSingleObject) although you have 100\n>nanosecond intervals.\n>To go lower you can use: QueryPerformanceCounter\n>(https://msdn.microsoft.com/en-\n>us/library/windows/desktop/ms644904(v=vs.85).\n>aspx) .\n>I can try to do some benchmarks if you need such a high resolution.\n\nThanks for your inputs and those were helpful.\nI implemented the windows equivalient of nanosleep and posted the patche here. \nhttps://mail.openvswitch.org/pipermail/ovs-dev/2017-November/340743.html\n\nI verified that this builds on windows with appveyor. But I couldn't verify the functionality here and\nthat's the reason I posted this as a separate patch instead of folding in to 2/7.\n\n- Bhanuprakash.","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3yXC754Psqz9s4q\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu,  9 Nov 2017 03:53:53 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id 2380CABC;\n\tWed,  8 Nov 2017 16:53:52 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 4A9B594F\n\tfor <dev@openvswitch.org>; Wed,  8 Nov 2017 16:53:50 +0000 (UTC)","from mga06.intel.com (mga06.intel.com [134.134.136.31])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id A118F560\n\tfor <dev@openvswitch.org>; Wed,  8 Nov 2017 16:53:49 +0000 (UTC)","from fmsmga005.fm.intel.com ([10.253.24.32])\n\tby orsmga104.jf.intel.com with ESMTP; 08 Nov 2017 08:53:49 -0800","from irsmsx109.ger.corp.intel.com ([163.33.3.23])\n\tby fmsmga005.fm.intel.com with ESMTP; 08 Nov 2017 08:53:47 -0800","from irsmsx104.ger.corp.intel.com ([169.254.5.248]) by\n\tIRSMSX109.ger.corp.intel.com ([169.254.13.28]) with mapi id\n\t14.03.0319.002; Wed, 8 Nov 2017 16:53:46 +0000"],"X-Greylist":"domain auto-whitelisted by SQLgrey-1.7.6","X-ExtLoop1":"1","X-IronPort-AV":"E=Sophos;i=\"5.44,365,1505804400\"; d=\"scan'208\";a=\"173308762\"","From":"\"Bodireddy, Bhanuprakash\" <bhanuprakash.bodireddy@intel.com>","To":"\"aserdean@ovn.org\" <aserdean@ovn.org>, 'Aaron Conole'\n\t<aconole@redhat.com>, 'Ben Pfaff' <blp@ovn.org>","Thread-Topic":"[ovs-dev] [PATCH v5 03/10] util: Add high resolution sleep\n\tsupport.","Thread-Index":"AQHTWAggE2+8fpGTtk+0OFMiwHk9vKMKssgA","Date":"Wed, 8 Nov 2017 16:53:46 +0000","Message-ID":"<7EE4206A5F421D4FBA0A4623185DE2BD3753444F@IRSMSX104.ger.corp.intel.com>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<1505493630-71065-4-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<20171103201324.GK27530@ovn.org>\n\t<7EE4206A5F421D4FBA0A4623185DE2BD3753383D@IRSMSX104.ger.corp.intel.com>\n\t<20171106220525.GE27530@ovn.org>\n\t<f7tinemq70e.fsf@dhcp-25-97.bos.redhat.com>\n\t<000401d35808$1b74f9f0$525eedd0$@ovn.org>","In-Reply-To":"<000401d35808$1b74f9f0$525eedd0$@ovn.org>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","dlp-product":"dlpe-windows","dlp-version":"11.0.0.116","dlp-reaction":"no-action","x-originating-ip":"[163.33.239.182]","MIME-Version":"1.0","X-Spam-Status":"No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED,\n\tRP_MATCHES_RCVD autolearn=disabled version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Cc":"\"dev@openvswitch.org\" <dev@openvswitch.org>","Subject":"Re: [ovs-dev] [PATCH v5 03/10] util: Add high resolution\n\tsleep\tsupport.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1842516,"web_url":"http://patchwork.ozlabs.org/comment/1842516/","msgid":"<CD7C01071941AC429549C17338DB8A52891B1A8E@IRSMSX101.ger.corp.intel.com>","list_archive_url":null,"date":"2018-01-19T10:45:44","subject":"Re: [ovs-dev] [PATCH v5 09/10] Documentation: Update DPDK doc\n\twith\tKeepalive feature.","submitter":{"id":67333,"url":"http://patchwork.ozlabs.org/api/people/67333/","name":"Ian Stokes","email":"ian.stokes@intel.com"},"content":"> Keepalive feature is aimed at achieving Fastpath Service Assurance in OVS-\n> DPDK deployments. It adds support for monitoring the packet processing\n> threads by dispatching heartbeats at regular intervals.\n> \n> The implementation uses OvSDB for reporting the health of the PMD threads.\n> Any external monitoring application can query the OvSDB for status at\n> regular intervals (or) subscribe to OvSDB updates.\n> \n> keepalive feature can be enabled through below OVSDB settings.\n> \n>     enable-keepalive=true\n>       - Keepalive feature is disabled by default and should be enabled\n>         at startup before ovs-vswitchd daemon is started.\n> \n>     keepalive-interval=\"5000\"\n>       - Timer interval in milliseconds for monitoring the packet\n>         processing cores.\n> \n> When KA is enabled, 'ovs-keepalive' thread shall be spawned that wakes up\n> at regular intervals to update the timestamp and status of pmd threads in\n> process map. This information shall be read by vswitchd thread and written\n> in to 'keepalive' column of Open_vSwitch table in OVSDB.\n> \n> An external monitoring framework like collectd with ovs events support can\n> read (or) subscribe to the datapath status changes in ovsdb. When the\n> state is updated, the collectd shall be notified and will eventually relay\n> the status to ceilometer service running in the controller. Below is the\n> high level overview of deployment model.\n> \n>         Compute Node            Controller            Compute Node\n> \n>         Collectd  <----------> Ceilometer <-------->   Collectd\n> \n>         OvS DPDK                                       OvS DPDK\n> \n>         +-----+\n>         | VM  |\n>         +--+--+\n>        \\---+---/\n>            |\n>         +--+---+       +------------+----------+     +------+-------+\n>         | OVS  |-----> |   ovsevents plugin    | --> |   collectd   |\n>         +--+---+       +------------+----------+     +------+-------+\n> \n>         +------+-----+     +---------------+------------+     |\n>         | Ceilometer | <-- | collectd ceilometer plugin |  <---\n>         +------+-----+     +---------------+------------+\n> \n> Performance impact\n> ------------------\n> No noticeable performance or latency impact is observed with KA feature\n> enabled.\n> \n> Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy@intel.com>\n> ---\n>  Documentation/howto/dpdk.rst | 113\n> +++++++++++++++++++++++++++++++++++++++++++\n>  1 file changed, 113 insertions(+)\n> \n> diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst\n> index d123819..6fc1316 100644\n> --- a/Documentation/howto/dpdk.rst\n> +++ b/Documentation/howto/dpdk.rst\n> @@ -439,6 +439,119 @@ For certain traffic profiles with many parallel\n> flows, it's recommended to set\n> \n>  For more information on the EMC refer to :doc:`/intro/install/dpdk` .\n> \n> +.. _dpdk_keepalive:\n> +\n> +Keepalive\n> +---------\n> +\n> +OvS Keepalive(KA) feature is disabled by default. To enable KA feature::\n> +\n> +    $ ovs-vsctl --no-wait set Open_vSwitch .\n> + other_config:enable-keepalive=true\n> +\n> +The KA feature can't be enabled at run time and should be done at\n> +startup before ovs-vswitchd daemon is started.\n> +\n> +The default timer interval for monitoring packet processing threads is\n> 1000ms.\n> +To set a different timer value, run::\n> +\n> +    $ ovs-vsctl --no-wait set Open_vSwitch . \\\n> +        other_config:keepalive-interval=\"5000\"\n> +\n> +The events comprise of thread states and the last seen timestamps. The\n> +events are written in to process map periodically by keepalive thread.\n> +\n> +The events in the process map are retrieved by main(vswitchd) thread\n> +and updated in to keepalive column of Open_vSwitch table in OVSDB. Any\n> +external monitoring application can read the status from OVSDB at\n> +intervals or subscribe to the updates so that they get notified when the\n> changes happen on OvSDB.\n> +\n> +To monitor the datapath status using ovsdb-client, run::\n> +\n> +    $ ovsdb-client monitor Open_vSwitch\n> +    $ ovsdb-client monitor Open_vSwitch Open_vSwitch keepalive\n> +\n> +The datapath thread states are explained below::\n> +\n> +      KA_STATE_UNUSED  - Not registered to KA framework.\n> +      KA_STATE_ALIVE   - Thread alive.\n> +      KA_STATE_MISSING - Thread missed first heartbeat.\n> +      KA_STATE_DEAD    - Thread missed two heartbeats.\n> +      KA_STATE_GONE    - Thread missed two or more heartbeats and\n> burried.\n> +      KA_STATE_DOZING  - Thread is idle.\n> +      KA_STATE_SLEEP   - Thread is sleeping.\n> +\n> +To query the datapath status, run::\n> +\n> +    $ ovs-appctl keepalive/pmd-health-show\n> +\n> +`collectd <https://collectd.org/>`__ has built-in support for DPDK and\n> +provides a `ovs_events` and `ovs_stats` plugin that can be enabled to\n> +relay the datapath status and the PMD status to OpenStack service\n> +`Ceilometer <https://docs.openstack.org/developer/ceilometer/>`__.\n> +\n\nHi Bhanu, thanks for working on this,\n\nIs collectd the only external framework that works with this?\nI guess is there a risk that if work stopped on collectd does this feature become redundant?\n\n> +To install and configure `collectd`, run::\n> +\n> +    # Clone collectd from Git repository\n> +    $ git clone https://github.com/collectd/collectd.git\n> +\n> +    # configure and install collectd\n> +    $ cd collectd\n> +    $ ./build.sh\n> +    $ ./configure --enable-syslog --enable-logfile --with-libdpdk=/usr\n> +    $ make\n> +    $ make install\n> +\n> +`collectd` is installed in ``/opt/collectd`` by default. Edit the\n> +configuration file in ``/opt/collectd/etc/collectd.conf`` to enable\n> +logfile, dpdkevents and csv plugin::\n> +\n> +   LoadPlugin logfile\n> +   <Plugin logfile>\n> +       LogLevel debug\n> +       File \"/var/log/collectd/collectd.log\"\n> +       Timestamp true\n> +       PrintSeverity false\n> +   </Plugin>\n> +\n> +   <Plugin syslog>\n> +       LogLevel info\n> +   </Plugin>\n> +\n> +Enable `ovs_events` plugin and update the plugindetails as below::\n> +\n> +   LoadPlugin ovs_events\n> +\n> +   <Plugin ovs_events>\n> +     Port \"6640\"\n> +     Address \"127.0.0.1\"\n> +     Socket \"/usr/local/var/run/openvswitch/db.sock\"\n> +     SendNotification true\n> +     DispatchValues false\n> +   </Plugin>\n> +\n> +Enable `ovs_stats` plugin and update the plugindetails as below::\n> +\n> +   LoadPlugin ovs_stats\n> +\n> +   <Plugin ovs_stats>\n> +     Port \"6640\"\n> +     Address \"127.0.0.1\"\n> +     Socket \"/usr/local/var/run/openvswitch/db.sock\"\n> +     Bridges \"br0\"\n> +   </Plugin>\n> +\n> +Enable ``csv`` plugin as below::\n> +\n> +   LoadPlugin csv\n> +\n> +   <Plugin csv>\n> +       DataDir \"/var/log/collectd/csv\"\n> +       StoreRates false\n> +   </Plugin>\n> +\n> +With csv plugin enabled, *meter* or *gauge* file is created and\n> +timestamp and thread status gets updated which are sent to ceilometer\n> service.\n\nI guess one could argue that the collectd setup instructions above belong in collectd documentation and that we should just point a user to that documentation when setting up OVS with DPDK with it.\n\nIan\n> +\n>  .. _dpdk-ovs-in-guest:\n> \n>  OVS with DPDK Inside VMs\n> --\n> 2.4.11\n> \n> _______________________________________________\n> dev mailing list\n> dev@openvswitch.org\n> https://mail.openvswitch.org/mailman/listinfo/ovs-dev","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3zNHYD2jH6z9s7g\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 19 Jan 2018 21:45:52 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id 05D681011;\n\tFri, 19 Jan 2018 10:45:50 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id B1FCC1007\n\tfor <dev@openvswitch.org>; Fri, 19 Jan 2018 10:45:48 +0000 (UTC)","from mga14.intel.com (mga14.intel.com [192.55.52.115])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id D0804418\n\tfor <dev@openvswitch.org>; Fri, 19 Jan 2018 10:45:47 +0000 (UTC)","from fmsmga006.fm.intel.com ([10.253.24.20])\n\tby fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t19 Jan 2018 02:45:47 -0800","from irsmsx110.ger.corp.intel.com ([163.33.3.25])\n\tby fmsmga006.fm.intel.com with ESMTP; 19 Jan 2018 02:45:46 -0800","from irsmsx101.ger.corp.intel.com ([169.254.1.46]) by\n\tirsmsx110.ger.corp.intel.com ([163.33.3.25]) with mapi id\n\t14.03.0319.002; Fri, 19 Jan 2018 10:45:45 +0000"],"X-Greylist":"domain auto-whitelisted by SQLgrey-1.7.6","X-Amp-Result":"SKIPPED(no attachment in message)","X-Amp-File-Uploaded":"False","X-ExtLoop1":"1","X-IronPort-AV":"E=Sophos;i=\"5.46,381,1511856000\"; d=\"scan'208\";a=\"197026611\"","From":"\"Stokes, Ian\" <ian.stokes@intel.com>","To":"\"Bodireddy, Bhanuprakash\" <bhanuprakash.bodireddy@intel.com>,\n\t\"dev@openvswitch.org\" <dev@openvswitch.org>","Thread-Topic":"[ovs-dev] [PATCH v5 09/10] Documentation: Update DPDK doc with\n\tKeepalive feature.","Thread-Index":"AQHTLkPSgbTO0vfo9Ue5Ag7GNaaE2aN7x7ug","Date":"Fri, 19 Jan 2018 10:45:44 +0000","Message-ID":"<CD7C01071941AC429549C17338DB8A52891B1A8E@IRSMSX101.ger.corp.intel.com>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<1505493630-71065-10-git-send-email-bhanuprakash.bodireddy@intel.com>","In-Reply-To":"<1505493630-71065-10-git-send-email-bhanuprakash.bodireddy@intel.com>","Accept-Language":"en-IE, en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","x-titus-metadata-40":"eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZWJjYzMxYWMtYzIxZC00NGU2LWJhNGEtNzYxZDNlNDFlNjNhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6IlwvK1NMZmp1XC9lb3M5N09mRVFaRlplN2ZwWnpKT254eEErVFFyMHZSRE96dz0ifQ==","x-ctpclassification":"CTP_NT","dlp-product":"dlpe-windows","dlp-version":"11.0.0.116","dlp-reaction":"no-action","x-originating-ip":"[163.33.239.180]","MIME-Version":"1.0","X-Spam-Status":"No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, \n\tT_RP_MATCHES_RCVD autolearn=ham version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Subject":"Re: [ovs-dev] [PATCH v5 09/10] Documentation: Update DPDK doc\n\twith\tKeepalive feature.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1842523,"web_url":"http://patchwork.ozlabs.org/comment/1842523/","msgid":"<CD7C01071941AC429549C17338DB8A52891B1AA3@IRSMSX101.ger.corp.intel.com>","list_archive_url":null,"date":"2018-01-19T10:51:59","subject":"Re: [ovs-dev] [PATCH v5 00/10] Add OVS DPDK keep-alive\n\tfunctionality.","submitter":{"id":67333,"url":"http://patchwork.ozlabs.org/api/people/67333/","name":"Ian Stokes","email":"ian.stokes@intel.com"},"content":"> Keepalive feature is aimed at achieving Fastpath Service Assurance in OVS-\n> DPDK deployments. It adds support for monitoring the packet processing\n> threads by dispatching heartbeats at regular intervals.\n> \n\nHi All,\n\nThis feature has been kicking around for quite a while now. Previously there was concern regarding whether OVS was the correct place for such a feature as well as a lack of documentation detailing it's use.\n\nI think Bhanu has resolved the documentation issue in this patchset by providing fairly detailed steps for use and setup.\n\nThat leaves whether OVS is the correct place for the feature. At this point I think we need to ACK or NACK and provide our reasons for doing so.\n\n@Aaron & Flavio, you've been involved in reviewing this to date and have flagged some concerns which Bhanu has responded to.\n\nIs there anything from your side that is unclear or blocking the feature at this point?\n\nThanks\nIan\n\n> keepalive feature can be enabled through below OVSDB settings.\n> \n>     enable-keepalive=true\n>       - Keepalive feature is disabled by default and should be enabled\n>         at startup before ovs-vswitchd daemon is started.\n> \n>     keepalive-interval=\"5000\"\n>       - Timer interval in milliseconds for monitoring the packet\n>         processing cores.\n> \n> v4 -> v5\n>   * Add 3 more patches to the series\n>      - xnanosleep()\n>      - Documentation\n>      - Update to NEWS\n>   * Remove all references to core_id and instead implemented thread based\n> tracking.\n>   * Addressed most of the comments in v4.\n> \n> v3 -> v4\n>   * Split the functionality in to 2 parts. This patch series only updates\n>     PMD status to OVSDB. The incremental patch series to handle false\n> positives,\n>     negatives and more checking and stats.\n>   * Remove code from netdev layer and dependency on rte_keepalive lib.\n>   * Merged few patches and simplified the patch series.\n>   * Timestamp in human readable form.\n> \n> v2 -> v3\n>   * Rebase.\n>   * Verified with dpdk-stable-17.05.1 release.\n>   * Fixed build issues with MSVC and cross checked with appveyor.\n> \n> v1 -> v2\n>   * Rebase\n>   * Drop 01/20 Patch \"Consolidate process related APIs\" of V1 as it\n>     is already applied as separate patch.\n> \n> RFCv3 -> v1\n>   * Made changes to fix failures in some unit test cases.\n>   * some more code cleanup w.r.t process related APIs.\n> \n> RFCv2 -> RFCv3\n>   * Remove POSIX shared memory block implementation (suggested by Aaron).\n>   * Rework the logic to register and track threads instead of cores. This\n> way\n>     in the future any thread can be registered to KA framework. For now\n> only PMD\n>     threads are tracked (suggested by Aaron).\n>   * Refactor few APIs and further clean up the code.\n> \n> RFCv1 -> RFCv2\n>   * Merged the xml and schema commits to later commit where the actual\n>     implementation is done(suggested by Ben).\n>   * Fix ovs-appctl keepalive/* hang issue when KA disabled.\n>   * Fixed memory leaks with appctl commands for keepalive/pmd-health-show,\n>     pmd-xstats-show.\n>   * Refactor code and fixed APIs dealing with PMD health monitoring.\n> \n> \n> Bhanuprakash Bodireddy (10):\n>   process: Extend get_process_info() for additional fields.\n>   Keepalive: Add initial keepalive support.\n>   util: Add high resolution sleep support.\n>   dpif-netdev: Register packet processing cores to KA framework.\n>   dpif-netdev: Enable heartbeats for DPDK datapath.\n>   keepalive: Retrieve PMD status periodically.\n>   bridge: Update keepalive status in OVSDB.\n>   keepalive: Add support to query keepalive status and statistics.\n>   Documentation: Update DPDK doc with Keepalive feature.\n>   NEWS: Add keepalive support information in NEWS.\n> \n>  Documentation/howto/dpdk.rst | 113 +++++++++\n>  NEWS                         |   2 +\n>  lib/automake.mk              |   2 +\n>  lib/dpif-netdev.c            |  91 +++++++\n>  lib/keepalive.c              | 556\n> +++++++++++++++++++++++++++++++++++++++++++\n>  lib/keepalive.h              | 111 +++++++++\n>  lib/ovs-thread.c             |   6 +\n>  lib/ovs-thread.h             |   1 +\n>  lib/process.c                |  43 ++--\n>  lib/process.h                |   2 +\n>  lib/timeval.c                |   2 +-\n>  lib/timeval.h                |   1 +\n>  lib/util.c                   |  41 ++++\n>  lib/util.h                   |   2 +\n>  vswitchd/bridge.c            |  29 +++\n>  vswitchd/vswitch.ovsschema   |   8 +-\n>  vswitchd/vswitch.xml         |  49 ++++\n>  17 files changed, 1036 insertions(+), 23 deletions(-)  create mode 100644\n> lib/keepalive.c  create mode 100644 lib/keepalive.h\n> \n> --\n> 2.4.11\n> \n> _______________________________________________\n> dev mailing list\n> dev@openvswitch.org\n> https://mail.openvswitch.org/mailman/listinfo/ovs-dev","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3zNHhQ4B7Tz9ryv\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 19 Jan 2018 21:52:06 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id 7A9B010FF;\n\tFri, 19 Jan 2018 10:52:04 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 6267F10F3\n\tfor <dev@openvswitch.org>; Fri, 19 Jan 2018 10:52:03 +0000 (UTC)","from mga02.intel.com (mga02.intel.com [134.134.136.20])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id B340E418\n\tfor <dev@openvswitch.org>; Fri, 19 Jan 2018 10:52:02 +0000 (UTC)","from fmsmga004.fm.intel.com ([10.253.24.48])\n\tby orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t19 Jan 2018 02:52:02 -0800","from irsmsx104.ger.corp.intel.com ([163.33.3.159])\n\tby fmsmga004.fm.intel.com with ESMTP; 19 Jan 2018 02:52:01 -0800","from irsmsx101.ger.corp.intel.com ([169.254.1.46]) by\n\tIRSMSX104.ger.corp.intel.com ([163.33.3.159]) with mapi id\n\t14.03.0319.002; Fri, 19 Jan 2018 10:51:59 +0000"],"X-Greylist":"domain auto-whitelisted by SQLgrey-1.7.6","X-Amp-Result":"SKIPPED(no attachment in message)","X-Amp-File-Uploaded":"False","X-ExtLoop1":"1","X-IronPort-AV":"E=Sophos;i=\"5.46,381,1511856000\"; d=\"scan'208\";a=\"23005700\"","From":"\"Stokes, Ian\" <ian.stokes@intel.com>","To":"\"Bodireddy, Bhanuprakash\" <bhanuprakash.bodireddy@intel.com>,\n\t\"dev@openvswitch.org\" <dev@openvswitch.org>","Thread-Topic":"[ovs-dev] [PATCH v5 00/10] Add OVS DPDK keep-alive\n\tfunctionality.","Thread-Index":"AQHTLkLjCHu394LUgkOPllAhDEdti6N7yNNQ","Date":"Fri, 19 Jan 2018 10:51:59 +0000","Message-ID":"<CD7C01071941AC429549C17338DB8A52891B1AA3@IRSMSX101.ger.corp.intel.com>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>","In-Reply-To":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>","Accept-Language":"en-IE, en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","x-titus-metadata-40":"eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZjQ3NGQ0ZjUtMTI5OC00YzhlLWIzY2ItZTExZDdiNDc4NDljIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6IkRLTGRzclNqbUYrZFhFTENvSWh5ZUlHYlBBQW1SSUJ5WkRIaGNQNUw0Vjg9In0=","x-ctpclassification":"CTP_NT","dlp-product":"dlpe-windows","dlp-version":"11.0.0.116","dlp-reaction":"no-action","x-originating-ip":"[163.33.239.180]","MIME-Version":"1.0","X-Spam-Status":"No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED,\n\tT_RP_MATCHES_RCVD autolearn=ham version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Cc":"\"Flavio Leitner\n \\(fbl@sysclose.org\\)\" <fbl@sysclose.org>","Subject":"Re: [ovs-dev] [PATCH v5 00/10] Add OVS DPDK keep-alive\n\tfunctionality.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1842524,"web_url":"http://patchwork.ozlabs.org/comment/1842524/","msgid":"<CD7C01071941AC429549C17338DB8A52891B1ABC@IRSMSX101.ger.corp.intel.com>","list_archive_url":null,"date":"2018-01-19T10:54:09","subject":"Re: [ovs-dev] [PATCH v5 00/10] Add OVS DPDK keep-alive\n\tfunctionality.","submitter":{"id":67333,"url":"http://patchwork.ozlabs.org/api/people/67333/","name":"Ian Stokes","email":"ian.stokes@intel.com"},"content":"+ Aaron\n> > Keepalive feature is aimed at achieving Fastpath Service Assurance in\n> > OVS- DPDK deployments. It adds support for monitoring the packet\n> > processing threads by dispatching heartbeats at regular intervals.\n> >\n> \n> Hi All,\n> \n> This feature has been kicking around for quite a while now. Previously\n> there was concern regarding whether OVS was the correct place for such a\n> feature as well as a lack of documentation detailing it's use.\n> \n> I think Bhanu has resolved the documentation issue in this patchset by\n> providing fairly detailed steps for use and setup.\n> \n> That leaves whether OVS is the correct place for the feature. At this\n> point I think we need to ACK or NACK and provide our reasons for doing so.\n> \n> @Aaron & Flavio, you've been involved in reviewing this to date and have\n> flagged some concerns which Bhanu has responded to.\n> \n> Is there anything from your side that is unclear or blocking the feature\n> at this point?\n> \n> Thanks\n> Ian\n> \n> > keepalive feature can be enabled through below OVSDB settings.\n> >\n> >     enable-keepalive=true\n> >       - Keepalive feature is disabled by default and should be enabled\n> >         at startup before ovs-vswitchd daemon is started.\n> >\n> >     keepalive-interval=\"5000\"\n> >       - Timer interval in milliseconds for monitoring the packet\n> >         processing cores.\n> >\n> > v4 -> v5\n> >   * Add 3 more patches to the series\n> >      - xnanosleep()\n> >      - Documentation\n> >      - Update to NEWS\n> >   * Remove all references to core_id and instead implemented thread\n> > based tracking.\n> >   * Addressed most of the comments in v4.\n> >\n> > v3 -> v4\n> >   * Split the functionality in to 2 parts. This patch series only\n> updates\n> >     PMD status to OVSDB. The incremental patch series to handle false\n> > positives,\n> >     negatives and more checking and stats.\n> >   * Remove code from netdev layer and dependency on rte_keepalive lib.\n> >   * Merged few patches and simplified the patch series.\n> >   * Timestamp in human readable form.\n> >\n> > v2 -> v3\n> >   * Rebase.\n> >   * Verified with dpdk-stable-17.05.1 release.\n> >   * Fixed build issues with MSVC and cross checked with appveyor.\n> >\n> > v1 -> v2\n> >   * Rebase\n> >   * Drop 01/20 Patch \"Consolidate process related APIs\" of V1 as it\n> >     is already applied as separate patch.\n> >\n> > RFCv3 -> v1\n> >   * Made changes to fix failures in some unit test cases.\n> >   * some more code cleanup w.r.t process related APIs.\n> >\n> > RFCv2 -> RFCv3\n> >   * Remove POSIX shared memory block implementation (suggested by\n> Aaron).\n> >   * Rework the logic to register and track threads instead of cores.\n> > This way\n> >     in the future any thread can be registered to KA framework. For\n> > now only PMD\n> >     threads are tracked (suggested by Aaron).\n> >   * Refactor few APIs and further clean up the code.\n> >\n> > RFCv1 -> RFCv2\n> >   * Merged the xml and schema commits to later commit where the actual\n> >     implementation is done(suggested by Ben).\n> >   * Fix ovs-appctl keepalive/* hang issue when KA disabled.\n> >   * Fixed memory leaks with appctl commands for keepalive/pmd-health-\n> show,\n> >     pmd-xstats-show.\n> >   * Refactor code and fixed APIs dealing with PMD health monitoring.\n> >\n> >\n> > Bhanuprakash Bodireddy (10):\n> >   process: Extend get_process_info() for additional fields.\n> >   Keepalive: Add initial keepalive support.\n> >   util: Add high resolution sleep support.\n> >   dpif-netdev: Register packet processing cores to KA framework.\n> >   dpif-netdev: Enable heartbeats for DPDK datapath.\n> >   keepalive: Retrieve PMD status periodically.\n> >   bridge: Update keepalive status in OVSDB.\n> >   keepalive: Add support to query keepalive status and statistics.\n> >   Documentation: Update DPDK doc with Keepalive feature.\n> >   NEWS: Add keepalive support information in NEWS.\n> >\n> >  Documentation/howto/dpdk.rst | 113 +++++++++\n> >  NEWS                         |   2 +\n> >  lib/automake.mk              |   2 +\n> >  lib/dpif-netdev.c            |  91 +++++++\n> >  lib/keepalive.c              | 556\n> > +++++++++++++++++++++++++++++++++++++++++++\n> >  lib/keepalive.h              | 111 +++++++++\n> >  lib/ovs-thread.c             |   6 +\n> >  lib/ovs-thread.h             |   1 +\n> >  lib/process.c                |  43 ++--\n> >  lib/process.h                |   2 +\n> >  lib/timeval.c                |   2 +-\n> >  lib/timeval.h                |   1 +\n> >  lib/util.c                   |  41 ++++\n> >  lib/util.h                   |   2 +\n> >  vswitchd/bridge.c            |  29 +++\n> >  vswitchd/vswitch.ovsschema   |   8 +-\n> >  vswitchd/vswitch.xml         |  49 ++++\n> >  17 files changed, 1036 insertions(+), 23 deletions(-)  create mode\n> > 100644 lib/keepalive.c  create mode 100644 lib/keepalive.h\n> >\n> > --\n> > 2.4.11\n> >\n> > _______________________________________________\n> > dev mailing list\n> > dev@openvswitch.org\n> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev\n> _______________________________________________\n> dev mailing list\n> dev@openvswitch.org\n> https://mail.openvswitch.org/mailman/listinfo/ovs-dev","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3zNHl02scMz9ryv\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 19 Jan 2018 21:54:19 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id EAB77E75;\n\tFri, 19 Jan 2018 10:54:14 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 765D0E46\n\tfor <dev@openvswitch.org>; Fri, 19 Jan 2018 10:54:13 +0000 (UTC)","from mga01.intel.com (mga01.intel.com [192.55.52.88])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id BCAFEF3\n\tfor <dev@openvswitch.org>; Fri, 19 Jan 2018 10:54:12 +0000 (UTC)","from fmsmga004.fm.intel.com ([10.253.24.48])\n\tby fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t19 Jan 2018 02:54:12 -0800","from irsmsx110.ger.corp.intel.com ([163.33.3.25])\n\tby fmsmga004.fm.intel.com with ESMTP; 19 Jan 2018 02:54:11 -0800","from irsmsx101.ger.corp.intel.com ([169.254.1.46]) by\n\tirsmsx110.ger.corp.intel.com ([163.33.3.25]) with mapi id\n\t14.03.0319.002; Fri, 19 Jan 2018 10:54:10 +0000"],"X-Greylist":"domain auto-whitelisted by SQLgrey-1.7.6","X-Amp-Result":"SKIPPED(no attachment in message)","X-Amp-File-Uploaded":"False","X-ExtLoop1":"1","X-IronPort-AV":"E=Sophos;i=\"5.46,381,1511856000\"; d=\"scan'208\";a=\"23005991\"","From":"\"Stokes, Ian\" <ian.stokes@intel.com>","To":"\"Stokes, Ian\" <ian.stokes@intel.com>, \"Bodireddy, Bhanuprakash\"\n\t<bhanuprakash.bodireddy@intel.com>, \"dev@openvswitch.org\"\n\t<dev@openvswitch.org>","Thread-Topic":"[ovs-dev] [PATCH v5 00/10] Add OVS DPDK keep-alive\n\tfunctionality.","Thread-Index":"AQHTLkLjCHu394LUgkOPllAhDEdti6N7yNNQgAACMNA=","Date":"Fri, 19 Jan 2018 10:54:09 +0000","Message-ID":"<CD7C01071941AC429549C17338DB8A52891B1ABC@IRSMSX101.ger.corp.intel.com>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<CD7C01071941AC429549C17338DB8A52891B1AA3@IRSMSX101.ger.corp.intel.com>","In-Reply-To":"<CD7C01071941AC429549C17338DB8A52891B1AA3@IRSMSX101.ger.corp.intel.com>","Accept-Language":"en-IE, en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","x-titus-metadata-40":"eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZjQ3NGQ0ZjUtMTI5OC00YzhlLWIzY2ItZTExZDdiNDc4NDljIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6IkRLTGRzclNqbUYrZFhFTENvSWh5ZUlHYlBBQW1SSUJ5WkRIaGNQNUw0Vjg9In0=","x-ctpclassification":"CTP_NT","dlp-product":"dlpe-windows","dlp-version":"11.0.0.116","dlp-reaction":"no-action","x-originating-ip":"[163.33.239.180]","MIME-Version":"1.0","X-Spam-Status":"No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, \n\tT_RP_MATCHES_RCVD autolearn=ham version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Cc":"\"Flavio Leitner \\(fbl@sysclose.org\\)\" <fbl@sysclose.org>","Subject":"Re: [ovs-dev] [PATCH v5 00/10] Add OVS DPDK keep-alive\n\tfunctionality.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1842566,"web_url":"http://patchwork.ozlabs.org/comment/1842566/","msgid":"<20180119121308.GB2324@plex.home>","list_archive_url":null,"date":"2018-01-19T12:13:08","subject":"Re: [ovs-dev] [PATCH v5 00/10] Add OVS DPDK keep-alive\n\tfunctionality.","submitter":{"id":3387,"url":"http://patchwork.ozlabs.org/api/people/3387/","name":"Flavio Leitner","email":"fbl@sysclose.org"},"content":"On Fri, Jan 19, 2018 at 10:51:59AM +0000, Stokes, Ian wrote:\n> > Keepalive feature is aimed at achieving Fastpath Service Assurance in OVS-\n> > DPDK deployments. It adds support for monitoring the packet processing\n> > threads by dispatching heartbeats at regular intervals.\n> > \n> \n> Hi All,\n> \n> This feature has been kicking around for quite a while now. Previously there was concern regarding whether OVS was the correct place for such a feature as well as a lack of documentation detailing it's use.\n> \n> I think Bhanu has resolved the documentation issue in this patchset by providing fairly detailed steps for use and setup.\n> \n> That leaves whether OVS is the correct place for the feature. At this point I think we need to ACK or NACK and provide our reasons for doing so.\n> \n> @Aaron & Flavio, you've been involved in reviewing this to date and have flagged some concerns which Bhanu has responded to.\n> \n> Is there anything from your side that is unclear or blocking the feature at this point?\n\nWell, I am very late to review the series and it has changed\nsignificantly between the patchset versions. My concern is that it is\nnot clear yet how it needs to be done. Also that it may provide a\nstatus that we can't actually trust and then we will end up with an\nexternal monitoring system as well.\n\nSo, consider myself on the fence. I have no real reason to NACK but\nI also don't have enough confidence to ACK at this point.\n\nfbl\n\n> \n> Thanks\n> Ian\n> \n> > keepalive feature can be enabled through below OVSDB settings.\n> > \n> >     enable-keepalive=true\n> >       - Keepalive feature is disabled by default and should be enabled\n> >         at startup before ovs-vswitchd daemon is started.\n> > \n> >     keepalive-interval=\"5000\"\n> >       - Timer interval in milliseconds for monitoring the packet\n> >         processing cores.\n> > \n> > v4 -> v5\n> >   * Add 3 more patches to the series\n> >      - xnanosleep()\n> >      - Documentation\n> >      - Update to NEWS\n> >   * Remove all references to core_id and instead implemented thread based\n> > tracking.\n> >   * Addressed most of the comments in v4.\n> > \n> > v3 -> v4\n> >   * Split the functionality in to 2 parts. This patch series only updates\n> >     PMD status to OVSDB. The incremental patch series to handle false\n> > positives,\n> >     negatives and more checking and stats.\n> >   * Remove code from netdev layer and dependency on rte_keepalive lib.\n> >   * Merged few patches and simplified the patch series.\n> >   * Timestamp in human readable form.\n> > \n> > v2 -> v3\n> >   * Rebase.\n> >   * Verified with dpdk-stable-17.05.1 release.\n> >   * Fixed build issues with MSVC and cross checked with appveyor.\n> > \n> > v1 -> v2\n> >   * Rebase\n> >   * Drop 01/20 Patch \"Consolidate process related APIs\" of V1 as it\n> >     is already applied as separate patch.\n> > \n> > RFCv3 -> v1\n> >   * Made changes to fix failures in some unit test cases.\n> >   * some more code cleanup w.r.t process related APIs.\n> > \n> > RFCv2 -> RFCv3\n> >   * Remove POSIX shared memory block implementation (suggested by Aaron).\n> >   * Rework the logic to register and track threads instead of cores. This\n> > way\n> >     in the future any thread can be registered to KA framework. For now\n> > only PMD\n> >     threads are tracked (suggested by Aaron).\n> >   * Refactor few APIs and further clean up the code.\n> > \n> > RFCv1 -> RFCv2\n> >   * Merged the xml and schema commits to later commit where the actual\n> >     implementation is done(suggested by Ben).\n> >   * Fix ovs-appctl keepalive/* hang issue when KA disabled.\n> >   * Fixed memory leaks with appctl commands for keepalive/pmd-health-show,\n> >     pmd-xstats-show.\n> >   * Refactor code and fixed APIs dealing with PMD health monitoring.\n> > \n> > \n> > Bhanuprakash Bodireddy (10):\n> >   process: Extend get_process_info() for additional fields.\n> >   Keepalive: Add initial keepalive support.\n> >   util: Add high resolution sleep support.\n> >   dpif-netdev: Register packet processing cores to KA framework.\n> >   dpif-netdev: Enable heartbeats for DPDK datapath.\n> >   keepalive: Retrieve PMD status periodically.\n> >   bridge: Update keepalive status in OVSDB.\n> >   keepalive: Add support to query keepalive status and statistics.\n> >   Documentation: Update DPDK doc with Keepalive feature.\n> >   NEWS: Add keepalive support information in NEWS.\n> > \n> >  Documentation/howto/dpdk.rst | 113 +++++++++\n> >  NEWS                         |   2 +\n> >  lib/automake.mk              |   2 +\n> >  lib/dpif-netdev.c            |  91 +++++++\n> >  lib/keepalive.c              | 556\n> > +++++++++++++++++++++++++++++++++++++++++++\n> >  lib/keepalive.h              | 111 +++++++++\n> >  lib/ovs-thread.c             |   6 +\n> >  lib/ovs-thread.h             |   1 +\n> >  lib/process.c                |  43 ++--\n> >  lib/process.h                |   2 +\n> >  lib/timeval.c                |   2 +-\n> >  lib/timeval.h                |   1 +\n> >  lib/util.c                   |  41 ++++\n> >  lib/util.h                   |   2 +\n> >  vswitchd/bridge.c            |  29 +++\n> >  vswitchd/vswitch.ovsschema   |   8 +-\n> >  vswitchd/vswitch.xml         |  49 ++++\n> >  17 files changed, 1036 insertions(+), 23 deletions(-)  create mode 100644\n> > lib/keepalive.c  create mode 100644 lib/keepalive.h\n> > \n> > --\n> > 2.4.11\n> > \n> > _______________________________________________\n> > dev mailing list\n> > dev@openvswitch.org\n> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=sysclose.org header.i=fbl@sysclose.org\n\theader.b=\"V2hlYNAs\"; dkim-atps=neutral"],"Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3zNKVF6vrNz9ryv\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 19 Jan 2018 23:13:21 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id C193310C0;\n\tFri, 19 Jan 2018 12:13:18 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 4359310B0\n\tfor <dev@openvswitch.org>; Fri, 19 Jan 2018 12:13:17 +0000 (UTC)","from sender-of-o51.zoho.com (sender-of-o51.zoho.com\n\t[135.84.80.216])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id 8EE441A6\n\tfor <dev@openvswitch.org>; Fri, 19 Jan 2018 12:13:16 +0000 (UTC)","from localhost (177.156.194.153 [177.156.194.153]) by\n\tmx.zohomail.com with SMTPS id 1516363994191310.56101106717597;\n\tFri, 19 Jan 2018 04:13:14 -0800 (PST)"],"X-Greylist":"from auto-whitelisted by SQLgrey-1.7.6","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1516363994;\n\ts=zoho; d=sysclose.org; i=fbl@sysclose.org;\n\th=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:Content-Type:In-Reply-To;\n\tl=5197; bh=jM6WYraKpFNbnr5kyK3t8LTCSfLWgsXa3v8e4NlS8F8=;\n\tb=V2hlYNAssi0sYc5CmwWKG/SbL4kbduLM9lEmexjBm24VDFy3QQjVJ6kuoyXDh+hh\n\tacgIsm49Pq8Qa/fCEOrnY6T1KlsicjV3w00ebtP1gAEa4Ywik7adKTjY4CE6H728ePm\n\t14t1K3xHelrC5Sg3YUSJP7nkY984FW5XqxE0bRcQ=","Date":"Fri, 19 Jan 2018 10:13:08 -0200","From":"Flavio Leitner <fbl@sysclose.org>","To":"\"Stokes, Ian\" <ian.stokes@intel.com>","Message-ID":"<20180119121308.GB2324@plex.home>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<CD7C01071941AC429549C17338DB8A52891B1AA3@IRSMSX101.ger.corp.intel.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<CD7C01071941AC429549C17338DB8A52891B1AA3@IRSMSX101.ger.corp.intel.com>","User-Agent":"Mutt/1.9.1 (2017-09-22)","X-ZohoMailClient":"External","X-Spam-Status":"No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,\n\tDKIM_VALID, DKIM_VALID_AU,\n\tRCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Cc":"\"dev@openvswitch.org\" <dev@openvswitch.org>","Subject":"Re: [ovs-dev] [PATCH v5 00/10] Add OVS DPDK keep-alive\n\tfunctionality.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}},{"id":1842685,"web_url":"http://patchwork.ozlabs.org/comment/1842685/","msgid":"<f7tpo65c1wy.fsf@dhcp-25.97.bos.redhat.com>","list_archive_url":null,"date":"2018-01-19T15:18:37","subject":"Re: [ovs-dev] [PATCH v5 00/10] Add OVS DPDK keep-alive\n\tfunctionality.","submitter":{"id":67184,"url":"http://patchwork.ozlabs.org/api/people/67184/","name":"Aaron Conole","email":"aconole@redhat.com"},"content":"\"Stokes, Ian\" <ian.stokes@intel.com> writes:\n\n> + Aaron\n>> > Keepalive feature is aimed at achieving Fastpath Service Assurance in\n>> > OVS- DPDK deployments. It adds support for monitoring the packet\n>> > processing threads by dispatching heartbeats at regular intervals.\n>> >\n>> \n>> Hi All,\n>> \n>> This feature has been kicking around for quite a while now. Previously\n>> there was concern regarding whether OVS was the correct place for such a\n>> feature as well as a lack of documentation detailing it's use.\n>> \n>> I think Bhanu has resolved the documentation issue in this patchset by\n>> providing fairly detailed steps for use and setup.\n>> \n>> That leaves whether OVS is the correct place for the feature. At this\n>> point I think we need to ACK or NACK and provide our reasons for doing so.\n>> \n>> @Aaron & Flavio, you've been involved in reviewing this to date and have\n>> flagged some concerns which Bhanu has responded to.\n>> \n>> Is there anything from your side that is unclear or blocking the feature\n>> at this point?\n\nHi Ian,\n\nI'll take a look through the series histories, and review the latest\n(which I believe is v6) this coming week.\n\n-Aaron\n\n>> Thanks\n>> Ian\n>> \n>> > keepalive feature can be enabled through below OVSDB settings.\n>> >\n>> >     enable-keepalive=true\n>> >       - Keepalive feature is disabled by default and should be enabled\n>> >         at startup before ovs-vswitchd daemon is started.\n>> >\n>> >     keepalive-interval=\"5000\"\n>> >       - Timer interval in milliseconds for monitoring the packet\n>> >         processing cores.\n>> >\n>> > v4 -> v5\n>> >   * Add 3 more patches to the series\n>> >      - xnanosleep()\n>> >      - Documentation\n>> >      - Update to NEWS\n>> >   * Remove all references to core_id and instead implemented thread\n>> > based tracking.\n>> >   * Addressed most of the comments in v4.\n>> >\n>> > v3 -> v4\n>> >   * Split the functionality in to 2 parts. This patch series only\n>> updates\n>> >     PMD status to OVSDB. The incremental patch series to handle false\n>> > positives,\n>> >     negatives and more checking and stats.\n>> >   * Remove code from netdev layer and dependency on rte_keepalive lib.\n>> >   * Merged few patches and simplified the patch series.\n>> >   * Timestamp in human readable form.\n>> >\n>> > v2 -> v3\n>> >   * Rebase.\n>> >   * Verified with dpdk-stable-17.05.1 release.\n>> >   * Fixed build issues with MSVC and cross checked with appveyor.\n>> >\n>> > v1 -> v2\n>> >   * Rebase\n>> >   * Drop 01/20 Patch \"Consolidate process related APIs\" of V1 as it\n>> >     is already applied as separate patch.\n>> >\n>> > RFCv3 -> v1\n>> >   * Made changes to fix failures in some unit test cases.\n>> >   * some more code cleanup w.r.t process related APIs.\n>> >\n>> > RFCv2 -> RFCv3\n>> >   * Remove POSIX shared memory block implementation (suggested by\n>> Aaron).\n>> >   * Rework the logic to register and track threads instead of cores.\n>> > This way\n>> >     in the future any thread can be registered to KA framework. For\n>> > now only PMD\n>> >     threads are tracked (suggested by Aaron).\n>> >   * Refactor few APIs and further clean up the code.\n>> >\n>> > RFCv1 -> RFCv2\n>> >   * Merged the xml and schema commits to later commit where the actual\n>> >     implementation is done(suggested by Ben).\n>> >   * Fix ovs-appctl keepalive/* hang issue when KA disabled.\n>> >   * Fixed memory leaks with appctl commands for keepalive/pmd-health-\n>> show,\n>> >     pmd-xstats-show.\n>> >   * Refactor code and fixed APIs dealing with PMD health monitoring.\n>> >\n>> >\n>> > Bhanuprakash Bodireddy (10):\n>> >   process: Extend get_process_info() for additional fields.\n>> >   Keepalive: Add initial keepalive support.\n>> >   util: Add high resolution sleep support.\n>> >   dpif-netdev: Register packet processing cores to KA framework.\n>> >   dpif-netdev: Enable heartbeats for DPDK datapath.\n>> >   keepalive: Retrieve PMD status periodically.\n>> >   bridge: Update keepalive status in OVSDB.\n>> >   keepalive: Add support to query keepalive status and statistics.\n>> >   Documentation: Update DPDK doc with Keepalive feature.\n>> >   NEWS: Add keepalive support information in NEWS.\n>> >\n>> >  Documentation/howto/dpdk.rst | 113 +++++++++\n>> >  NEWS                         |   2 +\n>> >  lib/automake.mk              |   2 +\n>> >  lib/dpif-netdev.c            |  91 +++++++\n>> >  lib/keepalive.c              | 556\n>> > +++++++++++++++++++++++++++++++++++++++++++\n>> >  lib/keepalive.h              | 111 +++++++++\n>> >  lib/ovs-thread.c             |   6 +\n>> >  lib/ovs-thread.h             |   1 +\n>> >  lib/process.c                |  43 ++--\n>> >  lib/process.h                |   2 +\n>> >  lib/timeval.c                |   2 +-\n>> >  lib/timeval.h                |   1 +\n>> >  lib/util.c                   |  41 ++++\n>> >  lib/util.h                   |   2 +\n>> >  vswitchd/bridge.c            |  29 +++\n>> >  vswitchd/vswitch.ovsschema   |   8 +-\n>> >  vswitchd/vswitch.xml         |  49 ++++\n>> >  17 files changed, 1036 insertions(+), 23 deletions(-)  create mode\n>> > 100644 lib/keepalive.c  create mode 100644 lib/keepalive.h\n>> >\n>> > --\n>> > 2.4.11\n>> >\n>> > _______________________________________________\n>> > dev mailing list\n>> > dev@openvswitch.org\n>> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev\n>> _______________________________________________\n>> dev mailing list\n>> dev@openvswitch.org\n>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3zNPc53nnGz9s7F\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat, 20 Jan 2018 02:18:45 +1100 (AEDT)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id 07AFDF7B;\n\tFri, 19 Jan 2018 15:18:42 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 44835F41\n\tfor <dev@openvswitch.org>; Fri, 19 Jan 2018 15:18:40 +0000 (UTC)","from mx1.redhat.com (mx1.redhat.com [209.132.183.28])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id 821BD477\n\tfor <dev@openvswitch.org>; Fri, 19 Jan 2018 15:18:39 +0000 (UTC)","from smtp.corp.redhat.com\n\t(int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 0F8E74AE97;\n\tFri, 19 Jan 2018 15:18:39 +0000 (UTC)","from dhcp-25.97.bos.redhat.com (unknown [10.18.25.61])\n\tby smtp.corp.redhat.com (Postfix) with ESMTPS id 850EE60BE7;\n\tFri, 19 Jan 2018 15:18:38 +0000 (UTC)"],"X-Greylist":["domain auto-whitelisted by SQLgrey-1.7.6","Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.39]);\n\tFri, 19 Jan 2018 15:18:39 +0000 (UTC)"],"From":"Aaron Conole <aconole@redhat.com>","To":"\"Stokes\\, Ian\" <ian.stokes@intel.com>","References":"<1505493630-71065-1-git-send-email-bhanuprakash.bodireddy@intel.com>\n\t<CD7C01071941AC429549C17338DB8A52891B1AA3@IRSMSX101.ger.corp.intel.com>\n\t<CD7C01071941AC429549C17338DB8A52891B1ABC@IRSMSX101.ger.corp.intel.com>","Date":"Fri, 19 Jan 2018 10:18:37 -0500","In-Reply-To":"<CD7C01071941AC429549C17338DB8A52891B1ABC@IRSMSX101.ger.corp.intel.com>\n\t(Ian Stokes's message of \"Fri, 19 Jan 2018 10:54:09 +0000\")","Message-ID":"<f7tpo65c1wy.fsf@dhcp-25.97.bos.redhat.com>","User-Agent":"Gnus/5.13 (Gnus v5.13) Emacs/26.0.90 (gnu/linux)","MIME-Version":"1.0","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.12","X-Spam-Status":"No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, \n\tT_RP_MATCHES_RCVD autolearn=ham version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Cc":"\"dev@openvswitch.org\" <dev@openvswitch.org>,\n\t\"Flavio Leitner \\(fbl@sysclose.org\\)\" <fbl@sysclose.org>","Subject":"Re: [ovs-dev] [PATCH v5 00/10] Add OVS DPDK keep-alive\n\tfunctionality.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"}}]