Signed-off-by: Pavel Butsykin <pbutsy...@virtuozzo.com> --- block/pcache.c | 21 +++++++++++++++++++++ block/trace-events | 9 +++++++++ 2 files changed, 30 insertions(+)
diff --git a/block/pcache.c b/block/pcache.c index a592ea0..1821557 100644 --- a/block/pcache.c +++ b/block/pcache.c @@ -14,6 +14,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" @@ -206,7 +207,15 @@ static void pcache_aio_read_cb(void *opaque, int ret) { PCacheAIOCBRead *acb = opaque; + if (ret < 0) { + trace_pcache_aio_read_cb_fail(ret, acb->offset, acb->bytes); + } + if (acb->part.qiov.niov != 0) { + if (ret < 0) { + trace_pcache_aio_read_cb_part_fail(ret, acb->part.offset, + acb->part.bytes); + } qemu_iovec_destroy(&acb->part.qiov); } @@ -227,6 +236,8 @@ static void pcache_aio_readahead_cb(void *opaque, int ret) node->status = NODE_STATUS_COMPLETED; } else { BDRVPCacheState *s = acb->bs->opaque; + trace_pcache_aio_readahead_cb_fail(ret, node->common.offset, + node->common.bytes); rbcache_remove(s->cache, &node->common); } } @@ -240,6 +251,9 @@ static void pcache_aio_readahead_cb(void *opaque, int ret) if (ret == 0) { read_cache_data(acb_read, node, acb_read->offset, acb_read->bytes); } + trace_pcache_aio_readahead_cb_read_complete( + ret, node->common.offset, node->common.bytes, + acb_read->offset, acb_read->bytes); aio_read_complete(acb_read, ret); } @@ -598,6 +612,8 @@ static void pcache_aio_write_cb(void *opaque, int ret) if (node->status == NODE_STATUS_COMPLETED) { write_cache_data(acb->qiov, node, acb->offset, acb->bytes); + trace_pcache_aio_write_cb_through(acb->offset, acb->bytes, + node->common.offset, node->common.bytes); } } while (end_offs > offset); @@ -639,6 +655,9 @@ static void pcache_state_init(QemuOpts *opts, BDRVPCacheState *s) RBCACHE_LRU, s); s->readahead_size = qemu_opt_get_size(opts, PCACHE_OPT_READAHEAD_SIZE, PCACHE_DEFAULT_READAHEAD_SIZE); + + trace_pcache_state_init(stats_size, s->max_aio_size, cache_size, + s->readahead_size); } static int pcache_file_open(BlockDriverState *bs, QDict *options, int flags, @@ -674,6 +693,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 05fa13c..30223da 100644 --- a/block/trace-events +++ b/block/trace-events @@ -114,3 +114,12 @@ 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_aio_readahead_cb_fail(int ret, uint64_t offset, uint64_t bytes) "ret: %d offset: %"PRIu64" bytes: %"PRIu64 +pcache_aio_readahead_cb_read_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_aio_read_cb_part_fail(int ret, uint64_t offset, uint64_t bytes) "ret: %d offset: %"PRIu64" bytes: %"PRIu64 +pcache_aio_write_cb_through(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.10.1