[ovs-dev] [PATCH v3 2/2] netdev-dpdk: Add debug appctl to get mempool information.
Ilya Maximets
i.maximets at samsung.com
Mon Dec 11 13:18:03 UTC 2017
On 08.12.2017 19:36, Kavanagh, Mark B wrote:
>> From: Ilya Maximets [mailto:i.maximets at samsung.com]
>> Sent: Friday, December 8, 2017 3:38 PM
>> To: ovs-dev at openvswitch.org
>> Cc: Heetae Ahn <heetae82.ahn at samsung.com>; Fischetti, Antonio
>> <antonio.fischetti at intel.com>; Loftus, Ciara <ciara.loftus at intel.com>;
>> Kavanagh, Mark B <mark.b.kavanagh at intel.com>; Stokes, Ian
>> <ian.stokes at intel.com>; Wojciechowicz, RobertX
>> <robertx.wojciechowicz at intel.com>; Flavio Leitner <fbl at redhat.com>; Ilya
>> Maximets <i.maximets at samsung.com>
>> 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 <i.maximets at samsung.com>
>> Acked-by: Antonio Fischetti <antonio.fischetti at intel.com>
>
>
> 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 <mark.b.kavanagh at intel.com>
> Acked-by: Mark Kavanagh <mark.b.kavanagh at intel.com>
>
> 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
>
>
>
>
More information about the dev
mailing list