This commit registers the packet processing cores for keepalive monitoring. Also the pmd threads respond to heartbeats by marking themselves alive. When the pmd thread is teared down due to datapath reconfiguration the core state is marked as 'sleep'.
Signed-off-by: Bhanuprakash Bodireddy <[email protected]> --- lib/dpif-netdev.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index a14a2eb..7cb3631 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -3249,6 +3249,14 @@ rxq_scheduling(struct dp_netdev *dp, bool pinned) OVS_REQUIRES(dp->port_mutex) } static void +ka_register_core(unsigned core_id OVS_UNUSED) +{ +#ifdef DPDK_NETDEV + dpdk_ka_register_core(core_id); +#endif +} + +static void reconfigure_pmd_threads(struct dp_netdev *dp) OVS_REQUIRES(dp->port_mutex) { @@ -3296,6 +3304,9 @@ reconfigure_pmd_threads(struct dp_netdev *dp) dp_netdev_configure_pmd(pmd, dp, core->core_id, core->numa_id); pmd->thread = ovs_thread_create("pmd", pmd_thread_main, pmd); + + /* Register core for KeepAlive detection. */ + ka_register_core(core->core_id); } /* Log the number of pmd threads per numa node. */ @@ -3664,6 +3675,9 @@ pmd_thread_main(void *f_) ovs_numa_thread_setaffinity_core(pmd->core_id); dpdk_set_lcore_id(pmd->core_id); poll_cnt = pmd_load_queues_and_ports(pmd, &poll_list); + + /* Store the pmd thread_id in shared memory. */ + dpdk_ka_get_tid(pmd->core_id); reload: emc_cache_init(&pmd->flow_cache); @@ -3688,6 +3702,9 @@ reload: poll_list[i].port_no); } + /* Mark packet processing core alive if KeepAlive is enabled. */ + ka_mark_core_alive(); + if (lc++ > 1024) { bool reload; @@ -3718,6 +3735,8 @@ reload: goto reload; } + ka_mark_core_sleep(); + free(poll_list); pmd_free_cached_ports(pmd); return NULL; -- 2.4.11 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
