]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: threads/debug: only report lock stats for used operations
authorWilly Tarreau <w@1wt.eu>
Thu, 22 Oct 2020 06:04:23 +0000 (08:04 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 22 Oct 2020 15:32:28 +0000 (17:32 +0200)
In addition to the previous simplification, most locks don't use the
seek or read lock (e.g. spinlocks etc) so let's split the dump into
distinct operations (write/seek/read) and only report those which
were used. Now the output size is roughly divided by 5 compared
to previous ones.

include/haproxy/thread.h

index 84571217c52bd400768e82dae3f283d681270b29..e4d630ddf3018404f6a2c5815ddbd8fb0ad88881 100644 (file)
@@ -464,36 +464,44 @@ static inline void show_lock_stats()
                }
 
                fprintf(stderr,
-                       "Stats about Lock %s: \n"
-                       "\t # write lock  : %lu\n"
-                       "\t # write unlock: %lu (%ld)\n"
-                       "\t # wait time for write     : %.3f msec\n"
-                       "\t # wait time for write/lock: %.3f nsec\n"
-                       "\t # seek lock   : %lu\n"
-                       "\t # seek unlock : %lu (%ld)\n"
-                       "\t # wait time for seek      : %.3f msec\n"
-                       "\t # wait time for seek/lock : %.3f nsec\n"
-                       "\t # read lock   : %lu\n"
-                       "\t # read unlock : %lu (%ld)\n"
-                       "\t # wait time for read      : %.3f msec\n"
-                       "\t # wait time for read/lock : %.3f nsec\n",
-
-                       lock_label(lbl),
-                       lock_stats[lbl].num_write_locked,
-                       lock_stats[lbl].num_write_unlocked,
-                       lock_stats[lbl].num_write_unlocked - lock_stats[lbl].num_write_locked,
-                       (double)lock_stats[lbl].nsec_wait_for_write / 1000000.0,
-                       lock_stats[lbl].num_write_locked ? ((double)lock_stats[lbl].nsec_wait_for_write / (double)lock_stats[lbl].num_write_locked) : 0,
-                       lock_stats[lbl].num_seek_locked,
-                       lock_stats[lbl].num_seek_unlocked,
-                       lock_stats[lbl].num_seek_unlocked - lock_stats[lbl].num_seek_locked,
-                       (double)lock_stats[lbl].nsec_wait_for_seek / 1000000.0,
-                       lock_stats[lbl].num_seek_locked ? ((double)lock_stats[lbl].nsec_wait_for_seek / (double)lock_stats[lbl].num_seek_locked) : 0,
-                       lock_stats[lbl].num_read_locked,
-                       lock_stats[lbl].num_read_unlocked,
-                       lock_stats[lbl].num_read_unlocked - lock_stats[lbl].num_read_locked,
-                       (double)lock_stats[lbl].nsec_wait_for_read / 1000000.0,
-                       lock_stats[lbl].num_read_locked ? ((double)lock_stats[lbl].nsec_wait_for_read / (double)lock_stats[lbl].num_read_locked) : 0);
+                       "Stats about Lock %s: \n",
+                       lock_label(lbl));
+
+               if (lock_stats[lbl].num_write_locked)
+                       fprintf(stderr,
+                               "\t # write lock  : %lu\n"
+                               "\t # write unlock: %lu (%ld)\n"
+                               "\t # wait time for write     : %.3f msec\n"
+                               "\t # wait time for write/lock: %.3f nsec\n",
+                               lock_stats[lbl].num_write_locked,
+                               lock_stats[lbl].num_write_unlocked,
+                               lock_stats[lbl].num_write_unlocked - lock_stats[lbl].num_write_locked,
+                               (double)lock_stats[lbl].nsec_wait_for_write / 1000000.0,
+                               lock_stats[lbl].num_write_locked ? ((double)lock_stats[lbl].nsec_wait_for_write / (double)lock_stats[lbl].num_write_locked) : 0);
+
+               if (lock_stats[lbl].num_seek_locked)
+                       fprintf(stderr,
+                               "\t # seek lock   : %lu\n"
+                               "\t # seek unlock : %lu (%ld)\n"
+                               "\t # wait time for seek      : %.3f msec\n"
+                               "\t # wait time for seek/lock : %.3f nsec\n",
+                               lock_stats[lbl].num_seek_locked,
+                               lock_stats[lbl].num_seek_unlocked,
+                               lock_stats[lbl].num_seek_unlocked - lock_stats[lbl].num_seek_locked,
+                               (double)lock_stats[lbl].nsec_wait_for_seek / 1000000.0,
+                               lock_stats[lbl].num_seek_locked ? ((double)lock_stats[lbl].nsec_wait_for_seek / (double)lock_stats[lbl].num_seek_locked) : 0);
+
+               if (lock_stats[lbl].num_read_locked)
+                       fprintf(stderr,
+                               "\t # read lock   : %lu\n"
+                               "\t # read unlock : %lu (%ld)\n"
+                               "\t # wait time for read      : %.3f msec\n"
+                               "\t # wait time for read/lock : %.3f nsec\n",
+                               lock_stats[lbl].num_read_locked,
+                               lock_stats[lbl].num_read_unlocked,
+                               lock_stats[lbl].num_read_unlocked - lock_stats[lbl].num_read_locked,
+                               (double)lock_stats[lbl].nsec_wait_for_read / 1000000.0,
+                               lock_stats[lbl].num_read_locked ? ((double)lock_stats[lbl].nsec_wait_for_read / (double)lock_stats[lbl].num_read_locked) : 0);
        }
 }