[ovs-dev] [PATCH v7 0/5] Stopwatch Library

Mark Michelson mmichels at redhat.com
Wed Mar 28 21:35:04 UTC 2018


This set of commits adds a new library for OVS that allows for measuring
the performance of operations in OVS and compiling statistics from these
measurements.

For developers, this can provide a measurement of something that is
either finer or coarser-grained than what is easily measured with a
profiler.

v6 -> v7:
* Changed the measurement in ovn-controller to be more narrow, and
  changed the name of the measurement as well.
* Changed return type of some internal stopwatch functions to 'void'
  since return type was irrelevant.

v5 -> v6:
* Fixed mixed-case constant name in ovn-controller.c
* Removed FIXME comments in test-stopwatch.c
* Fixed clang warning about uninitialized fields in initializer.

v4 -> v5:
* The library has changed from focusing on "performance" to being a
  stopwatch.
* Jakub Sitnicki wrote some tests, and these are included here.
* Based on tests, the 95th percentile is now calculated in the
  traditional way for the first 50 measurements and then switches
  to P-square.
* The sample structure has been removed since storing the end time
  was not necessary.
* A new boolean indicating a sample is in progress has been added. This
  corrects an issue that prevented a timestamp of 0 from being used as a
  start time.
* A bug was fixed where the minimum time was always 0.

v3 -> v4:
* The samples vector has been removed in favor of using moving
  calculations. The average is calculated using a common exponential
  weighted moving average. The 95th percentile is calculated using the
  P-square algorithm. This greatly reduces the memory overhead since
  there is no longer a need to maintain any sort of history of samples.

* A performance/reset CLI command has been added.

* The wording of the commit in patch 2 has been altered to more
  accurately describe what is being measured.

v2 -> v3:
* A background thread has been introduced that maintains the performance
  structures.
* To reduce contention in the threads that are reporting performance
  measurements, they no longer acquire a mutex. Instead, they pass
  information over a pipe to the background thread.
* To reduce memory usage, the sample vectors have a maximum size they
  can reach. In addition, the measured intervals are now smaller. Rather
  than one minute, five minute, and ten minute measurements, we now do
  ten second, thirty second, and one minute measurements.

v1 -> v2:
In version 1, there was a patch included that would save statistics to
the OVS database. Based on feedback from that, I decided to forgo
database support for the time being. If database support were to be
added, using a time series database rather than the OVS database would
be the way to go.

Removal of the database patch had a snowball effect that has reduced the
overall size of the patchset.

Jakub Sitnicki (3):
  stopwatch: Add API for retrieving calculated statistics
  stopwatch: Add API for waiting until samples have been processed
  tests: Add tests for stopwatch module

Mark Michelson (2):
  Add stopwatch timing API
  Measure timing of ovn-controller flow creation.

 lib/automake.mk                 |   2 +
 lib/stopwatch.c                 | 535 ++++++++++++++++++++++++++++++++++++++++
 lib/stopwatch.h                 |  57 +++++
 ovn/controller/ovn-controller.c |  13 +
 tests/automake.mk               |   3 +-
 tests/library.at                |   5 +
 tests/test-stopwatch.c          | 195 +++++++++++++++
 7 files changed, 809 insertions(+), 1 deletion(-)
 create mode 100644 lib/stopwatch.c
 create mode 100644 lib/stopwatch.h
 create mode 100644 tests/test-stopwatch.c

-- 
2.14.3



More information about the dev mailing list