[ovs-dev] [PATCH 1/1] dpif-netdev: The pmd-*-show commands will show info in core order
Ben Pfaff
blp at ovn.org
Thu May 4 00:09:51 UTC 2017
On Tue, Apr 25, 2017 at 05:12:49PM +0200, Eelco Chaudron wrote:
> On 15/04/17 06:33, Ben Pfaff wrote:
> >On Wed, Mar 22, 2017 at 11:10:23AM +0100, Eelco Chaudron wrote:
> >>The "ovs-appctl dpif-netdev/pmd-rxq-show" and "ovs-appctl
> >>dpif-netdev/pmd-stats-show" commands show their output per core_id,
> >>sorted on the hash location. My OCD was kicking in when using these
> >>commands, hence this change to display them in natural core_id order.
> >>
> >>In addition I had to change a test case that would fail if the cores
> >>where not in order in the hash list. This is due to OVS assigning
> >>queues to cores based on the order in the hash list. The test case now
> >>checks if any core has the set of queues in the given order.
> >>
> >>Manually tested this on my setup, and ran clang-analyze.
> >>
> >>Signed-off-by: Eelco Chaudron <echaudro at redhat.com>
> >This should be helpful, thanks.
> >
> >sorted_poll_thread_list() worries me. It calls cmap_count() and then
> >uses CMAP_FOR_EACH to iterate the list and assumes (asserts, even) that
> >the number of pmds does not change during iteration. Is this safe?
> >If it is, then a clearer comment would be helpful, and it would be wise
> >to have an assertion for the exact number at the end.
> >
> >Thanks,
> >
> >Ben.
>
> Hi Ben,
>
> To be honest I copied it from a couple of functions above,
> sorted_poll_list(),
> without giving it the proper attention.
>
> So when looking at it more in depth, I see it needs to be handled
> differently.
> Creation/deletion of the threads is protected with the dp->port_mutex,
> however
> the show commands are only protected by the dp_netdev_mutex. So in theory
> both
> activities can happen in parallel. So to avoid an assert, I guess just
> printing
> data in transition is safer.
>
> I guess the following change should fix it:
>
> CMAP_FOR_EACH (pmd, node, &dp->poll_threads) {
> - ovs_assert(k < n_pmds);
> + if (k >= n_pmds) {
> + break;
> + }
> pmd_list[k++] = pmd;
> }
>
> In addition I also changed the calling function, and made it safe in case
> the
> ltist shrunk:
>
> sorted_poll_thread_list(dp, &pmd_list, &n);
> for (i = 0; i < n; i++) {
> pmd = pmd_list[i];
> + if (!pmd) {
> + break;
> + }
>
> if (type == PMD_INFO_SHOW_RXQ) {
>
>
> Let me know if you want another patch?
Thank you for thinking it through, this makes more sense to me now.
Please do post a v2 when you are ready.
More information about the dev
mailing list