On 08.12.2017 19:36, Kavanagh, Mark B wrote: >> From: Ilya Maximets [mailto:[email protected]] >> Sent: Friday, December 8, 2017 3:38 PM >> To: [email protected] >> Cc: Heetae Ahn <[email protected]>; Fischetti, Antonio >> <[email protected]>; Loftus, Ciara <[email protected]>; >> Kavanagh, Mark B <[email protected]>; Stokes, Ian >> <[email protected]>; Wojciechowicz, RobertX >> <[email protected]>; Flavio Leitner <[email protected]>; Ilya >> Maximets <[email protected]> >> Subject: [PATCH v3 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 <[email protected]> >> Acked-by: Antonio Fischetti <[email protected]> > > > Hey Ilya, > > This is a really useful patch. When testing, I found the most helpful metrics > to be the stats that are enabled when DPDK is built with > CONFIG_RTE_LIBRTE_MEMPOOL_DEBUG=y. > > It might be a good idea to mention this somewhere in the documentation - > thoughts?
I added a note to man page in v4. > > Other than that, LGTM: > Tested-by: Mark Kavanagh <[email protected]> > Acked-by: Mark Kavanagh <[email protected]> > > Cheers, > Mark > > >> --- >> NEWS | 1 + >> lib/netdev-dpdk-unixctl.man | 4 ++++ >> lib/netdev-dpdk.c | 54 >> +++++++++++++++++++++++++++++++++++++++++++++ >> 3 files changed, 59 insertions(+) >> >> diff --git a/NEWS b/NEWS >> index e9fb279..5e13038 100644 >> --- a/NEWS >> +++ b/NEWS >> @@ -16,6 +16,7 @@ Post-v2.8.0 >> - "flush-conntrack" in ovs-dpctl and ovs-appctl now accept a 5-tuple to >> delete a specific connection tracking entry. >> - DPDK: >> + * 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 a4b7f60..73b2e10 100644 >> --- a/lib/netdev-dpdk-unixctl.man >> +++ b/lib/netdev-dpdk-unixctl.man >> @@ -7,3 +7,7 @@ to \fIstate\fR. \fIstate\fR can be "up" or "down". >> 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. >> +.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. >> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c >> index faff842..26c8e94 100644 >> --- a/lib/netdev-dpdk.c >> +++ b/lib/netdev-dpdk.c >> @@ -2560,6 +2560,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. >> */ >> @@ -2816,6 +2866,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 [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
