[Libguestfs] [nbdkit PATCH v2 21/24] stats: Implement .cache

Eric Blake eblake at redhat.com
Thu May 16 03:58:11 UTC 2019


In the stats filter, all we need to do is copy-and-paste existing
per-command stats to one more class of commands (well, technically,
this isn't enabled until a later patch flips the default for
.can_cache to pass-through).

Signed-off-by: Eric Blake <eblake at redhat.com>
---
 filters/stats/stats.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/filters/stats/stats.c b/filters/stats/stats.c
index 785cce6..037fc61 100644
--- a/filters/stats/stats.c
+++ b/filters/stats/stats.c
@@ -61,6 +61,7 @@ static uint64_t pwrite_ops, pwrite_bytes;
 static uint64_t trim_ops, trim_bytes;
 static uint64_t zero_ops, zero_bytes;
 static uint64_t extents_ops, extents_bytes;
+static uint64_t cache_ops, cache_bytes;

 static inline double
 calc_bps (uint64_t bytes, int64_t usecs)
@@ -88,6 +89,9 @@ print_stats (int64_t usecs)
   if (extents_ops > 0)
     fprintf (fp, "extents: %" PRIu64 " ops, %" PRIu64 " bytes, %g bits/s\n",
              extents_ops, extents_bytes, calc_bps (extents_bytes, usecs));
+  if (cache_ops > 0)
+    fprintf (fp, "cache: %" PRIu64 " ops, %" PRIu64 " bytes, %g bits/s\n",
+             cache_ops, cache_bytes, calc_bps (cache_bytes, usecs));

   fflush (fp);
 }
@@ -246,6 +250,24 @@ stats_extents (struct nbdkit_next_ops *next_ops, void *nxdata,
   return r;
 }

+/* Cache. */
+static int
+stats_cache (struct nbdkit_next_ops *next_ops, void *nxdata,
+             void *handle,
+             uint32_t count, uint64_t offset, uint32_t flags,
+             int *err)
+{
+  int r;
+
+  r = next_ops->cache (nxdata, count, offset, flags, err);
+  if (r == 0) {
+    ACQUIRE_LOCK_FOR_CURRENT_SCOPE (&lock);
+    cache_ops++;
+    cache_bytes += count;
+  }
+  return r;
+}
+
 static struct nbdkit_filter filter = {
   .name              = "stats",
   .longname          = "nbdkit stats filter",
@@ -258,6 +280,7 @@ static struct nbdkit_filter filter = {
   .trim              = stats_trim,
   .zero              = stats_zero,
   .extents           = stats_extents,
+  .cache             = stats_cache,
 };

 NBDKIT_REGISTER_FILTER(filter)
-- 
2.20.1




More information about the Libguestfs mailing list