[ovs-dev] [PATCH v10 3/3] dpif-netdev: Detection and logging of suspicious PMD iterations

Stokes, Ian ian.stokes at intel.com
Tue Mar 27 14:41:50 UTC 2018


> This patch enhances dpif-netdev-perf to detect iterations with suspicious
> statistics according to the following criteria:
> 
> - iteration lasts longer than US_THR microseconds (default 250).
>   This can be used to capture events where a PMD is blocked or
>   interrupted for such a period of time that there is a risk for
>   dropped packets on any of its Rx queues.
> 
> - max vhost qlen exceeds a threshold Q_THR (default 128). This can
>   be used to infer virtio queue overruns and dropped packets inside
>   a VM, which are not visible in OVS otherwise.
> 
> Such suspicious iterations can be logged together with their iteration
> statistics to be able to correlate them to packet drop or other events
> outside OVS.
> 
> A new command is introduced to enable/disable logging at run-time and to
> adjust the above thresholds for suspicious iterations:
> 
> ovs-appctl dpif-netdev/pmd-perf-log-set on | off
>     [-b before] [-a after] [-e|-ne] [-us usec] [-q qlen]
> 
> Turn logging on or off at run-time (on|off).
> 
> -b before:  The number of iterations before the suspicious iteration to
>             be logged (default 5).
> -a after:   The number of iterations after the suspicious iteration to
>             be logged (default 5).
> -e:         Extend logging interval if another suspicious iteration is
>             detected before logging occurs.
> -ne:        Do not extend logging interval (default).
> -q qlen:    Suspicious vhost queue fill level threshold. Increase this
>             to 512 if the Qemu supports 1024 virtio queue length.
>             (default 128).
> -us usec:   change the duration threshold for a suspicious iteration
>             (default 250 us).
> 
> Note: Logging of suspicious iterations itself consumes a considerable
> amount of processing cycles of a PMD which may be visible in the iteration
> history. In the worst case this can lead OVS to detect another suspicious
> iteration caused by logging.
> 
> If more than 100 iterations around a suspicious iteration have been logged
> once, OVS falls back to the safe default values (-b 5/-a 5/-ne) to avoid
> that logging itself causes continuos further logging.
> 
> Signed-off-by: Jan Scheurich <jan.scheurich at ericsson.com>
> Acked-by: Billy O'Mahony <billy.o.mahony at intel.com>
> ---
>  NEWS                        |   2 +
>  lib/dpif-netdev-perf.c      | 201
> ++++++++++++++++++++++++++++++++++++++++++++
>  lib/dpif-netdev-perf.h      |  42 +++++++++
>  lib/dpif-netdev-unixctl.man |  59 +++++++++++++
>  lib/dpif-netdev.c           |   5 ++
>  5 files changed, 309 insertions(+)
> 
> diff --git a/NEWS b/NEWS
> index 8f66fd3..61148b1 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -76,6 +76,8 @@ v2.9.0 - 19 Feb 2018
>       * Commands ovs-appctl dpif-netdev/pmd-*-show can now work on a
> single PMD
>       * Detailed PMD performance metrics available with new command
>           ovs-appctl dpif-netdev/pmd-perf-show
> +     * Supervision of PMD performance metrics and logging of suspicious
> +       iterations
>     - vswitchd:
>       * Datapath IDs may now be specified as 0x1 (etc.) instead of 16
> digits.
>       * Configuring a controller, or unconfiguring all controllers, now
> deletes diff --git a/lib/dpif-netdev-perf.c b/lib/dpif-netdev-perf.c index
> 2b36410..410a209 100644
> --- a/lib/dpif-netdev-perf.c
> +++ b/lib/dpif-netdev-perf.c
> @@ -25,6 +25,24 @@
> 
>  VLOG_DEFINE_THIS_MODULE(pmd_perf);
> 
> +#define ITER_US_THRESHOLD 250   /* Warning threshold for iteration
> duration
> +                                   in microseconds. */
> +#define VHOST_QUEUE_FULL 128    /* Size of the virtio TX queue. */
> +#define LOG_IT_BEFORE 5         /* Number of iterations to log before
> +                                   suspicious iteration. */
> +#define LOG_IT_AFTER 5          /* Number of iterations to log after
> +                                   suspicious iteration. */
> +
> +bool log_enabled = false;
> +bool log_extend = false;

Will cause compilation error 'error: symbol 'log_extend' was not declared. Should it be static?'

You could declare it as an extern similar to 'bool log_enabled' in dpif-netdev-perf.h.

Thanks
Ian


More information about the dev mailing list