From: Yuval Shaia <yuval.shaia@oracle.com>
To: dgilbert@redhat.com, yuval.shaia@oracle.com,
marcel.apfelbaum@gmail.com, armbru@redhat.com,
qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 06/10] hw/pvrdma: Dump device statistics counters to file
Date: Thu, 31 Jan 2019 15:08:46 +0200 [thread overview]
Message-ID: <20190131130850.6850-7-yuval.shaia@oracle.com> (raw)
In-Reply-To: <20190131130850.6850-1-yuval.shaia@oracle.com>
Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com>
---
hw/rdma/vmw/pvrdma.h | 1 +
hw/rdma/vmw/pvrdma_main.c | 72 +++++++++++++++++++++++++++++++++++++++
2 files changed, 73 insertions(+)
diff --git a/hw/rdma/vmw/pvrdma.h b/hw/rdma/vmw/pvrdma.h
index 167706ec2c..dc10f21ca0 100644
--- a/hw/rdma/vmw/pvrdma.h
+++ b/hw/rdma/vmw/pvrdma.h
@@ -133,5 +133,6 @@ static inline void post_interrupt(PVRDMADev *dev, unsigned vector)
}
int pvrdma_exec_cmd(PVRDMADev *dev);
+void pvrdma_dump_statistics(FILE *f, fprintf_function fprintf_func);
#endif
diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c
index cf82e78f08..79900076ec 100644
--- a/hw/rdma/vmw/pvrdma_main.c
+++ b/hw/rdma/vmw/pvrdma_main.c
@@ -14,6 +14,7 @@
*/
#include "qemu/osdep.h"
+#include "qemu/units.h"
#include "qapi/error.h"
#include "hw/hw.h"
#include "hw/pci/pci.h"
@@ -36,6 +37,8 @@
#include "standard-headers/drivers/infiniband/hw/vmw_pvrdma/pvrdma_dev_api.h"
#include "pvrdma_qp_ops.h"
+GSList *devices;
+
static Property pvrdma_dev_properties[] = {
DEFINE_PROP_STRING("netdev", PVRDMADev, backend_eth_device_name),
DEFINE_PROP_STRING("ibdev", PVRDMADev, backend_device_name),
@@ -55,6 +58,72 @@ static Property pvrdma_dev_properties[] = {
DEFINE_PROP_END_OF_LIST(),
};
+static void pvrdma_dump_device_statistics(gpointer data, gpointer user_data)
+{
+ CPUListState *s = user_data;
+ PCIDevice *pdev = data;
+ PVRDMADev *dev = PVRDMA_DEV(pdev);
+
+ (*s->cpu_fprintf)(s->file, "%s_%x.%x\n", pdev->name,
+ PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn));
+ (*s->cpu_fprintf)(s->file, "\tcommands : %" PRId64 "\n",
+ dev->stats.commands);
+ (*s->cpu_fprintf)(s->file, "\ttx : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.tx);
+ (*s->cpu_fprintf)(s->file, "\ttx_len : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.tx_len);
+ (*s->cpu_fprintf)(s->file, "\ttx_err : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.tx_err);
+ (*s->cpu_fprintf)(s->file, "\trx_bufs : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.rx_bufs);
+ (*s->cpu_fprintf)(s->file, "\trx_bufs_len : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.rx_bufs_len);
+ (*s->cpu_fprintf)(s->file, "\trx_bufs_err : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.rx_bufs_err);
+ (*s->cpu_fprintf)(s->file, "\tcompletions : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.completions);
+ (*s->cpu_fprintf)(s->file, "\tpoll_cq (bk) : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.poll_cq_from_bk);
+ (*s->cpu_fprintf)(s->file, "\tpoll_cq_ppoll_to : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.poll_cq_ppoll_to);
+ (*s->cpu_fprintf)(s->file, "\tpoll_cq (fe) : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.poll_cq_from_guest);
+ (*s->cpu_fprintf)(s->file, "\tmad_tx : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.mad_tx);
+ (*s->cpu_fprintf)(s->file, "\tmad_tx_err : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.mad_tx_err);
+ (*s->cpu_fprintf)(s->file, "\tmad_rx : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.mad_rx);
+ (*s->cpu_fprintf)(s->file, "\tmad_rx_err : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.mad_rx_err);
+ (*s->cpu_fprintf)(s->file, "\tmad_rx_bufs : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.mad_rx_bufs);
+ (*s->cpu_fprintf)(s->file, "\tmad_rx_bufs_err : %" PRId64 "\n",
+ dev->rdma_dev_res.stats.mad_rx_bufs_err);
+ (*s->cpu_fprintf)(s->file, "\tPDs : %" PRId32 "\n",
+ dev->rdma_dev_res.pd_tbl.used);
+ (*s->cpu_fprintf)(s->file, "\tMRs : %" PRId32 "\n",
+ dev->rdma_dev_res.mr_tbl.used);
+ (*s->cpu_fprintf)(s->file, "\tUCs : %" PRId32 "\n",
+ dev->rdma_dev_res.uc_tbl.used);
+ (*s->cpu_fprintf)(s->file, "\tQPs : %" PRId32 "\n",
+ dev->rdma_dev_res.qp_tbl.used);
+ (*s->cpu_fprintf)(s->file, "\tCQs : %" PRId32 "\n",
+ dev->rdma_dev_res.cq_tbl.used);
+ (*s->cpu_fprintf)(s->file, "\tCEQ_CTXs : %" PRId32 "\n",
+ dev->rdma_dev_res.cqe_ctx_tbl.used);
+}
+
+void pvrdma_dump_statistics(FILE *f, fprintf_function fprintf_func)
+{
+ CPUListState s = {
+ .file = f,
+ .cpu_fprintf = fprintf_func,
+ };
+
+ g_slist_foreach(devices, pvrdma_dump_device_statistics, &s);
+}
+
static void free_dev_ring(PCIDevice *pci_dev, PvrdmaRing *ring,
void *ring_state)
{
@@ -618,6 +687,8 @@ static void pvrdma_realize(PCIDevice *pdev, Error **errp)
dev->shutdown_notifier.notify = pvrdma_shutdown_notifier;
qemu_register_shutdown_notifier(&dev->shutdown_notifier);
+ devices = g_slist_append(devices, pdev);
+
out:
if (rc) {
pvrdma_fini(pdev);
@@ -627,6 +698,7 @@ out:
static void pvrdma_exit(PCIDevice *pdev)
{
+ devices = g_slist_remove(devices, pdev);
pvrdma_fini(pdev);
}
--
2.17.2
next prev parent reply other threads:[~2019-01-31 13:09 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-31 13:08 [Qemu-devel] [PATCH 00/10] Misc fixes to pvrdma device Yuval Shaia
2019-01-31 13:08 ` [Qemu-devel] [PATCH 01/10] hw/rdma: Switch to generic error reporting way Yuval Shaia
2019-02-01 12:36 ` Dr. David Alan Gilbert
2019-02-03 7:32 ` Yuval Shaia
2019-01-31 13:08 ` [Qemu-devel] [PATCH 02/10] hw/rdma: Introduce locked qlist Yuval Shaia
2019-02-07 9:05 ` Marcel Apfelbaum
2019-02-07 10:28 ` Yuval Shaia
2019-01-31 13:08 ` [Qemu-devel] [PATCH 03/10] hw/rdma: Warn when too many consecutive poll CQ triggered on an empty CQ Yuval Shaia
2019-02-06 10:14 ` Marcel Apfelbaum
2019-02-06 14:59 ` Yuval Shaia
2019-02-06 15:02 ` Yuval Shaia
2019-01-31 13:08 ` [Qemu-devel] [PATCH 04/10] hw/rdma: Protect against concurrent execution of poll_cq Yuval Shaia
2019-02-05 20:14 ` Marcel Apfelbaum
2019-01-31 13:08 ` [Qemu-devel] [PATCH 05/10] hw/pvrdma: Add device statistics counters Yuval Shaia
2019-02-06 10:17 ` Marcel Apfelbaum
2019-02-06 14:44 ` Yuval Shaia
2019-01-31 13:08 ` Yuval Shaia [this message]
2019-02-04 13:03 ` [Qemu-devel] [PATCH 06/10] hw/pvrdma: Dump device statistics counters to file Markus Armbruster
2019-02-04 16:14 ` Yuval Shaia
2019-02-04 18:21 ` Markus Armbruster
2019-01-31 13:08 ` [Qemu-devel] [PATCH 07/10] monitor: Expose pvrdma device statistics counters Yuval Shaia
2019-01-31 13:17 ` Eric Blake
2019-01-31 20:08 ` Yuval Shaia
2019-01-31 20:52 ` Eric Blake
2019-02-01 7:33 ` Markus Armbruster
2019-02-01 11:42 ` Dr. David Alan Gilbert
2019-02-03 7:12 ` Yuval Shaia
2019-02-03 7:06 ` Yuval Shaia
2019-02-04 8:23 ` Markus Armbruster
2019-02-04 16:07 ` Yuval Shaia
2019-02-05 7:21 ` Markus Armbruster
2019-02-04 8:00 ` Markus Armbruster
2019-01-31 13:08 ` [Qemu-devel] [PATCH 08/10] hw/rdma: Free all MAD receive buffers when device is closed Yuval Shaia
2019-02-06 10:19 ` Marcel Apfelbaum
2019-01-31 13:08 ` [Qemu-devel] [PATCH 09/10] hw/rdma: Free all receive buffers when QP is destroyed Yuval Shaia
2019-02-06 10:23 ` Marcel Apfelbaum
2019-02-06 15:55 ` Yuval Shaia
2019-01-31 13:08 ` [Qemu-devel] [PATCH 10/10] hw/pvrdma: Delete unneeded function argument Yuval Shaia
2019-02-05 20:16 ` Marcel Apfelbaum
2019-02-02 13:50 ` [Qemu-devel] [PATCH 00/10] Misc fixes to pvrdma device no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190131130850.6850-7-yuval.shaia@oracle.com \
--to=yuval.shaia@oracle.com \
--cc=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).