>From: Ilya Maximets [mailto:i.maxim...@samsung.com]
>Sent: Monday, December 11, 2017 1:19 PM
>To: ovs-dev@openvswitch.org
>Cc: Heetae Ahn <heetae82....@samsung.com>; Fischetti, Antonio
><antonio.fische...@intel.com>; Loftus, Ciara <ciara.lof...@intel.com>;
>Kavanagh, Mark B <mark.b.kavan...@intel.com>; Stokes, Ian
><ian.sto...@intel.com>; Wojciechowicz, RobertX
><robertx.wojciechow...@intel.com>; Flavio Leitner <f...@redhat.com>; Ilya
>Maximets <i.maxim...@samsung.com>
>Subject: [PATCH v4 2/2] netdev-dpdk: Add debug appctl to get mempool
>information.
>
>New appctl 'netdev-dpdk/get-mempool-info' implemented to get result
>of 'rte_mempool_list_dump()' function if no arguments passed and
>'rte_mempool_dump()' if DPDK netdev passed as argument.
>
>Could be used for debugging mbuf leaks and other mempool related
>issues. Most useful in pair with `grep -v "cache_count.*=0"`.
>
>Signed-off-by: Ilya Maximets <i.maxim...@samsung.com>
>---
> NEWS                        |  1 +
> lib/netdev-dpdk-unixctl.man |  5 +++++
> lib/netdev-dpdk.c           | 54
>+++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 60 insertions(+)
>
>diff --git a/NEWS b/NEWS
>index 69d5dab..e60514e 100644
>--- a/NEWS
>+++ b/NEWS
>@@ -18,6 +18,7 @@ Post-v2.8.0
>    - DPDK:
>      * Add support for DPDK v17.11
>      * Add support for vHost IOMMU
>+     * New debug appctl command 'netdev-dpdk/get-mempool-info'.
>      * All the netdev-dpdk appctl commands described in ovs-vswitchd man
>page.
>
> v2.8.0 - 31 Aug 2017
>diff --git a/lib/netdev-dpdk-unixctl.man b/lib/netdev-dpdk-unixctl.man
>index 5af6eca..ac274cd 100644
>--- a/lib/netdev-dpdk-unixctl.man
>+++ b/lib/netdev-dpdk-unixctl.man
>@@ -7,3 +7,8 @@ If \fIinterface\fR is not specified, then it applies to all
>DPDK ports.
> Detaches device with corresponding \fIpci-address\fR from DPDK.  This command
> can be used to detach device if it wasn't detached automatically after port
> deletion. Refer to the documentation for details and instructions.

Hi Ilya, 

I would still prefer if the pointer to documentation were more specific; 
however, I won't block on that basis alone.

Acked-by: Mark Kavanagh <mark.b.kavan...@intel.com>
Tested-by: Mark Kavanagh <mark.b.kavan...@intel.com> 

Thanks for the series,
Mark

>+.IP "\fBnetdev-dpdk/get-mempool-info\fR [\fIinterface\fR]"
>+Prints the debug information about memory pool used by DPDK \fIinterface\fR.
>+If called without arguments, information of all the available mempools will
>+be printed. For additional mempool statistics enable
>+\fBCONFIG_RTE_LIBRTE_MEMPOOL_DEBUG\fR while building DPDK.
>diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
>index 8f22264..3bf461b 100644
>--- a/lib/netdev-dpdk.c
>+++ b/lib/netdev-dpdk.c
>@@ -2586,6 +2586,56 @@ error:
>     free(response);
> }
>
>+static void
>+netdev_dpdk_get_mempool_info(struct unixctl_conn *conn,
>+                             int argc, const char *argv[],
>+                             void *aux OVS_UNUSED)
>+{
>+    size_t size;
>+    FILE *stream;
>+    char *response = NULL;
>+    struct netdev *netdev = NULL;
>+
>+    if (argc == 2) {
>+        netdev = netdev_from_name(argv[1]);
>+        if (!netdev || !is_dpdk_class(netdev->netdev_class)) {
>+            unixctl_command_reply_error(conn, "Not a DPDK Interface");
>+            goto out;
>+        }
>+    }
>+
>+    stream = open_memstream(&response, &size);
>+    if (!stream) {
>+        response = xasprintf("Unable to open memstream: %s.",
>+                             ovs_strerror(errno));
>+        unixctl_command_reply_error(conn, response);
>+        goto out;
>+    }
>+
>+    if (netdev) {
>+        struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
>+
>+        ovs_mutex_lock(&dev->mutex);
>+        ovs_mutex_lock(&dpdk_mp_mutex);
>+
>+        rte_mempool_dump(stream, dev->mp);
>+
>+        ovs_mutex_unlock(&dpdk_mp_mutex);
>+        ovs_mutex_unlock(&dev->mutex);
>+    } else {
>+        ovs_mutex_lock(&dpdk_mp_mutex);
>+        rte_mempool_list_dump(stream);
>+        ovs_mutex_unlock(&dpdk_mp_mutex);
>+    }
>+
>+    fclose(stream);
>+
>+    unixctl_command_reply(conn, response);
>+out:
>+    free(response);
>+    netdev_close(netdev);
>+}
>+
> /*
>  * Set virtqueue flags so that we do not receive interrupts.
>  */
>@@ -2842,6 +2892,10 @@ netdev_dpdk_class_init(void)
>                                  "pci address of device", 1, 1,
>                                  netdev_dpdk_detach, NULL);
>
>+        unixctl_command_register("netdev-dpdk/get-mempool-info",
>+                                 "[netdev]", 0, 1,
>+                                 netdev_dpdk_get_mempool_info, NULL);
>+
>         ovsthread_once_done(&once);
>     }
>
>--
>2.7.4

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to