mirror of
https://github.com/openvswitch/ovs
synced 2025-10-15 14:17:18 +00:00
dpif-netdev: Detection and logging of suspicious PMD iterations
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@ericsson.com> Acked-by: Billy O'Mahony <billy.o.mahony@intel.com> Signed-off-by: Ian Stokes <ian.stokes@intel.com>
This commit is contained in:
committed by
Ian Stokes
parent
79f368756c
commit
7178fefbdf
@@ -175,6 +175,14 @@ struct pmd_perf_stats {
|
||||
struct history iterations;
|
||||
/* Millisecond history buffer. */
|
||||
struct history milliseconds;
|
||||
/* Suspicious iteration log. */
|
||||
uint32_t log_susp_it;
|
||||
/* Start of iteration range to log. */
|
||||
uint32_t log_begin_it;
|
||||
/* End of iteration range to log. */
|
||||
uint32_t log_end_it;
|
||||
/* Reason for logging suspicious iteration. */
|
||||
char *log_reason;
|
||||
};
|
||||
|
||||
/* Support for accurate timing of PMD execution on TSC clock cycle level.
|
||||
@@ -350,6 +358,16 @@ history_store(struct history *h, struct iter_stats *is)
|
||||
return history_next(h);
|
||||
}
|
||||
|
||||
/* Data and function related to logging of suspicious iterations. */
|
||||
|
||||
extern bool log_enabled;
|
||||
extern bool log_extend;
|
||||
extern uint32_t log_q_thr;
|
||||
extern uint64_t iter_cycle_threshold;
|
||||
|
||||
void pmd_perf_set_log_susp_iteration(struct pmd_perf_stats *s, char *reason);
|
||||
void pmd_perf_log_susp_iteration_neighborhood(struct pmd_perf_stats *s);
|
||||
|
||||
/* Functions recording PMD metrics per iteration. */
|
||||
|
||||
void
|
||||
@@ -375,6 +393,9 @@ void pmd_perf_format_iteration_history(struct ds *str,
|
||||
int n_iter);
|
||||
void pmd_perf_format_ms_history(struct ds *str, struct pmd_perf_stats *s,
|
||||
int n_ms);
|
||||
void pmd_perf_log_set_cmd(struct unixctl_conn *conn,
|
||||
int argc, const char *argv[],
|
||||
void *aux OVS_UNUSED);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
Reference in New Issue
Block a user