From 82e429794b348cd80c1d1b011e21ffac98bc6e88 Mon Sep 17 00:00:00 2001
From: Simon Riggs <simon@2ndQuadrant.com>
Date: Tue, 9 Oct 2012 08:15:23 +0100
Subject: [PATCH] Add microsecs/op display to pg_test_fsync utility

e.g. fsync  2103.613 ops/sec (   475 microsecs/op)

Peter Geoghegan
---
 contrib/pg_test_fsync/pg_test_fsync.c |  6 ++++--
 doc/src/sgml/pgtestfsync.sgml         | 13 ++++++++-----
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/contrib/pg_test_fsync/pg_test_fsync.c b/contrib/pg_test_fsync/pg_test_fsync.c
index 9fe2301e419..7f7368a3156 100644
--- a/contrib/pg_test_fsync/pg_test_fsync.c
+++ b/contrib/pg_test_fsync/pg_test_fsync.c
@@ -25,7 +25,8 @@
 
 #define LABEL_FORMAT		"        %-32s"
 #define NA_FORMAT			"%18s"
-#define OPS_FORMAT			"%9.3f ops/sec"
+#define OPS_FORMAT			"%9.3f ops/sec (%6.f microsecs/op)"
+#define USECS_SEC			1000000
 
 /* These are macros to avoid timing the function call overhead. */
 #ifndef WIN32
@@ -568,8 +569,9 @@ print_elapse(struct timeval start_t, struct timeval stop_t, int ops)
 	double		total_time = (stop_t.tv_sec - start_t.tv_sec) +
 	(stop_t.tv_usec - start_t.tv_usec) * 0.000001;
 	double		per_second = ops / total_time;
+	double		avg_op_time_us = (total_time / ops) * USECS_SEC;
 
-	printf(OPS_FORMAT "\n", per_second);
+	printf(OPS_FORMAT "\n", per_second, avg_op_time_us);
 }
 
 #ifndef WIN32
diff --git a/doc/src/sgml/pgtestfsync.sgml b/doc/src/sgml/pgtestfsync.sgml
index 95ba3b81e0c..00ef209fa25 100644
--- a/doc/src/sgml/pgtestfsync.sgml
+++ b/doc/src/sgml/pgtestfsync.sgml
@@ -30,11 +30,14 @@
   <application>pg_test_fsync</> is intended to give you a reasonable
   idea of what the fastest <xref linkend="guc-wal-sync-method"> is on your
   specific system,
-  as well as supplying diagnostic information in the event of an
-  identified I/O problem.  However, differences shown by <application>pg_test_fsync</application>
-  might not make any difference in real database throughput, especially
-  since many database servers are not speed-limited by their transaction
-  logs.
+  as well as supplying diagnostic information in the event of an identified I/O
+  problem.  However, differences shown by
+  <application>pg_test_fsync</application> might not make any significant
+  difference in real database throughput, especially since many database servers
+  are not speed-limited by their transaction logs.
+  <application>pg_test_fsync</application> reports average file sync operation
+  time in microseconds for each wal_sync_method, which can be used to inform
+  efforts to optimize the value of <varname>commit_delay</varname>.
  </para>
  </refsect1>
 
-- 
GitLab