ovsdb: Add per transaction commit instruction counter
authorAndy Zhou <azhou@nicira.com>
Mon, 1 Jun 2015 21:48:24 +0000 (14:48 -0700)
committerAndy Zhou <azhou@nicira.com>
Fri, 17 Jul 2015 19:24:22 +0000 (12:24 -0700)
Measure user space only instruction counters for commit each
transaction. This measurement is mainly useful for
tuning OVSDB internal implementation, such as how OVSDB scales over
number of client connections.

A simple usage example:

ovs-appctl -t ovsdb-server ovsdb-server/perf-counters-clear
ovs-vsctl add-port br0 p3
ovs-appctl -t ovsdb-server ovsdb-server/perf-counters-show
ovsdb_txn_commit            2      906922 453461.0

The commands above show that the 'add-port br p3' command caused ovsdb
to execute 2 transactions. Each transaction takes 453461 instructions,
total 906922 instructions. The number will vary based on number of
ovsdb clients connected.

Signed-off-by: Andy Zhou <azhou@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
ovsdb/transaction.c

index 9e03963..83ddaff 100644 (file)
@@ -27,6 +27,7 @@
 #include "ovsdb.h"
 #include "row.h"
 #include "table.h"
+#include "perf-counter.h"
 #include "uuid.h"
 
 struct ovsdb_txn {
@@ -747,8 +748,8 @@ check_index_uniqueness(struct ovsdb_txn *txn OVS_UNUSED,
     return NULL;
 }
 
-struct ovsdb_error *
-ovsdb_txn_commit(struct ovsdb_txn *txn, bool durable)
+static struct ovsdb_error *
+ovsdb_txn_commit_(struct ovsdb_txn *txn, bool durable)
 {
     struct ovsdb_replica *replica;
     struct ovsdb_error *error;
@@ -821,6 +822,15 @@ ovsdb_txn_commit(struct ovsdb_txn *txn, bool durable)
     return NULL;
 }
 
+struct ovsdb_error *
+ovsdb_txn_commit(struct ovsdb_txn *txn, bool durable)
+{
+   struct ovsdb_error *err;
+
+   PERF(__func__, err = ovsdb_txn_commit_(txn, durable));
+   return err;
+}
+
 void
 ovsdb_txn_for_each_change(const struct ovsdb_txn *txn,
                           ovsdb_txn_row_cb_func *cb, void *aux)