"Bodireddy, Bhanuprakash" <bhanuprakash.bodire...@intel.com> writes:

>>"Bodireddy, Bhanuprakash" <bhanuprakash.bodire...@intel.com> writes:
>>
>>>>Bhanuprakash Bodireddy <bhanuprakash.bodire...@intel.com> writes:
>>>>
>>>>> This commit registers the packet processing PMD cores to keepalive
>>>>> framework. Only PMDs that have rxqs mapped will be registered and
>>>>> actively monitored by KA framework.
>>>>>
>>>>> This commit spawns a keepalive thread that will dispatch heartbeats
>>>>> to PMD cores. The pmd threads respond to heartbeats by marking
>>>>> themselves alive. As long as PMD responds to heartbeats it is considered
>>'healthy'.
>>>>>
>>>>> Signed-off-by: Bhanuprakash Bodireddy
>>>>> <bhanuprakash.bodire...@intel.com>
>>>>> ---
>>>>
>>>>I'm really confused with this patch.  I've stopped reviewing the series.
>>>>
>>>>It seems like there's a mix of 'track by core id' and 'track by thread id'.
>>>>
>>>>I don't think it's possible to do anything by core id.  We can never
>>>>know what else has been scheduled on those cores, and we cannot be
>>>>sure that a taskset or other scheduler provisioning call will move the
>>threads.
>>>
>>> [BHANU] I have already answered this in other thread.
>>> one can't correlate threads with cores and we shouldn't be tracking by
>>> cores. However with PMD threads there is 1:1 mapping of PMD and the
>>> core-id and it's safe to temporarily write PMD liveness info in to an
>>> array indexed by core id before updating this in to HMAP.
>>
>>The core-id as a concept here is deceptive.  An external entity (such as
>>taskset) can rebalance the PMDs.  External entities can be scheduled on the
>>cores.  I think it's dangerous to have anything called core-id in this series 
>>or
>>feature, because people will naturally infer things which aren't true.
>>Additionally, it will lead to things like "well, we know that core x,y,z are
>>running at A%, so we can schedule things thusly..."
>>
>>Makes sense?
>>
>
> The concerns above makes sense and you have a valid point. 
> Unfortunately the logic that you see w.r.t PMD, core_id mapping is something 
> that was
> implemented in rte_keepalive library and I inherited it. As the 1:1
> mapping of a thread(PMD)
> to core is deceptive and makes little sense, I reworked on a different
> approach with no impact
> on datapath performance. I was testing this last few days to check for
> perf impacts and other
> possible issues.
>
> Previous design:
> --------------------
> As part of heartbeat mechanism (dispath_heartbeats()),  in keepalive_info 
> structure
> we had arrays indexed by core-ids used by PMDs and Keepalive thread for 
> heart-beating.
> The arrays were used to keep the logic simple and lock-free.
>
> Also Keepalive thread was updating the status periodically in to
> 'process_list' map using callback function.
>
> New design:
> -------------------
> we already have a 'process_list' map where all the PMD threads are
> added by main(vswitchd)
> thread. In this new approach, I take a copy of the 'process_list',
> let's call it 'cached_process_list'
> and use this cached map for heartbeating between Keepalive and PMD
> threads. No locks are
> needed on the 'cached_process_list' there by not impacting the datapath 
> performance.
>
> Also whenever there is datapath reconfiguration(triggered by
> pmd-cpu-mask), the 'process_list' map
> will be updated and also the cached_process_list will be reloaded from
> the main map there by having
> the maps in sync.  This is handled as part of
> ka_register_datapath_threads().  I have been testing this
> and seems to be working fine.
>
> This way we can completely avoid all references to core_id in this
> series. Let me know if you have
> any comments on this new approach.

Sounds good to me.  Looking forward to the code :-)

> Regards,
> Bhanuprakash.
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to