[prev in list] [next in list] [prev in thread] [next in thread] 

List:       qemu-block
Subject:    [Qemu-block] [PATCH v2 18/18] block/pcache: add tracepoints
From:       Pavel Butsykin <pbutsykin () virtuozzo ! com>
Date:       2016-12-30 14:31:42
Message-ID: 20161230143142.18214-19-pbutsykin () virtuozzo ! com
[Download RAW message or body]

Signed-off-by: Pavel Butsykin <pbutsykin@virtuozzo.com>
---
 block/pcache.c     | 20 ++++++++++++++++++++
 block/trace-events | 10 ++++++++++
 2 files changed, 30 insertions(+)

diff --git a/block/pcache.c b/block/pcache.c
index 6d2b54cf78..2bce3efc59 100644
--- a/block/pcache.c
+++ b/block/pcache.c
@@ -15,6 +15,7 @@
 #include "qapi/error.h"
 #include "qapi/qmp/qstring.h"
 #include "qemu/rbcache.h"
+#include "trace.h"
 
 #define PCACHE_OPT_STATS_SIZE "pcache-stats-size"
 #define PCACHE_OPT_MAX_AIO_SIZE "pcache-max-aio-size"
@@ -348,12 +349,18 @@ static void coroutine_fn pcache_co_readahead(BlockDriverState \
*bs,  node->status |= NODE_STATUS_COMPLETED;
 
     if (ret < 0) {
+        trace_pcache_readahead_fail(ret, node->common.offset,
+                                    node->common.bytes);
         rbcache_remove(s->cache, &node->common);
     }
 
     QTAILQ_FOREACH_SAFE(rlink, &node->wait_list, entry, next) {
         QTAILQ_REMOVE(&node->wait_list, rlink, entry);
         rlink->ret = ret;
+
+        trace_pcache_readahead_pending_node_complete(ret, node->common.offset,
+            node->common.bytes, offset, bytes);
+
         qemu_coroutine_enter(rlink->co);
     }
 
@@ -509,6 +516,10 @@ static int pickup_parts_of_cache(BlockDriverState *bs, \
PCacheNode *node,  ret = part->rlink.ret;
             }
         }
+        if (part->rlink.ret < 0) {
+            trace_pcache_read_part_fail(ret, part->node->common.offset,
+                                        part->node->common.bytes);
+        }
         pcache_node_unref(part->node);
     }
 
@@ -618,6 +629,8 @@ static void pcache_write_through(BlockDriverState *bs, uint64_t \
offset,  
         if (node->status & NODE_STATUS_COMPLETED) {
             write_cache_data(node, offset, bytes, qiov);
+            trace_pcache_write_through(offset, bytes, node->common.offset,
+                                       node->common.bytes);
         }
     } while (end_offs > chunk_offset);
 
@@ -631,6 +644,8 @@ static void pcache_write_through(BlockDriverState *bs, uint64_t \
offset,  continue;
         }
         write_cache_data(node, offset, bytes, qiov);
+        trace_pcache_write_through_removed_node(offset, bytes,
+                node->common.offset, node->common.bytes);
     }
 }
 
@@ -663,6 +678,9 @@ static int pcache_state_init(QemuOpts *opts, BDRVPCacheState *s)
                                           PCACHE_DEFAULT_READAHEAD_SIZE);
     QLIST_INIT(&s->remove_node_list);
 
+    trace_pcache_state_init(stats_size, s->max_aio_size, cache_size,
+                            s->readahead_size);
+
     if (s->readahead_size < s->max_aio_size) {
         error_report("Readahead size can't be less than maximum request size"
                      "that can be handled by pcache");
@@ -704,6 +722,8 @@ static void pcache_close(BlockDriverState *bs)
 {
     BDRVPCacheState *s = bs->opaque;
 
+    trace_pcache_close(s->req_stats, s->cache);
+
     rbcache_destroy(s->req_stats);
     rbcache_destroy(s->cache);
 
diff --git a/block/trace-events b/block/trace-events
index cfc05f2478..d9cef3bcec 100644
--- a/block/trace-events
+++ b/block/trace-events
@@ -112,3 +112,13 @@ qed_aio_write_data(void *s, void *acb, int ret, uint64_t offset, \
size_t len) "s  qed_aio_write_prefill(void *s, void *acb, uint64_t start, size_t len, \
uint64_t offset) "s %p acb %p start %"PRIu64" len %zu offset %"PRIu64  \
qed_aio_write_postfill(void *s, void *acb, uint64_t start, size_t len, uint64_t \
offset) "s %p acb %p start %"PRIu64" len %zu offset %"PRIu64  qed_aio_write_main(void \
*s, void *acb, int ret, uint64_t offset, size_t len) "s %p acb %p ret %d offset \
%"PRIu64" len %zu" +
+# block/pcache.c
+pcache_readahead_fail(int ret, uint64_t offset, uint64_t bytes) "ret: %d offset: \
%"PRIu64" bytes: %"PRIu64 +pcache_readahead_pending_node_complete(int ret, uint64_t \
node_offset, uint64_t node_bytes, uint64_t read_offset, uint64_t read_bytes) "ret: %d \
node: %"PRIu64" %"PRIu64" pending read: %"PRIu64" %"PRIu64 \
+pcache_aio_read_cb_fail(int ret, uint64_t offset, uint64_t bytes) "ret: %d offset: \
%"PRIu64" bytes: %"PRIu64 +pcache_read_part_fail(int ret, uint64_t offset, uint64_t \
bytes) "ret: %d offset: %"PRIu64" bytes: %"PRIu64 +pcache_write_through(uint64_t \
req_offset, uint64_t req_bytes, uint64_t node_offset, uint64_t node_bytes) "request: \
%"PRIu64" %"PRIu64" node: %"PRIu64" %"PRIu64 \
+pcache_write_through_removed_node(uint64_t req_offset, uint64_t req_bytes, uint64_t \
node_offset, uint64_t node_bytes) "request: %"PRIu64" %"PRIu64" node: %"PRIu64" \
%"PRIu64 +pcache_state_init(uint64_t stats_size, uint64_t max_aio_size, uint64_t \
cache_size, uint64_t readahead_size) "pool statistics size: %"PRIu64" max aio size: \
%"PRIu64" cache size: %"PRIu64" readahead size: %"PRIu64 +pcache_close(void \
                *req_stats, void *cache) "pool statistics: %p cache: %p"
-- 
2.11.0


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic