mirror of
https://github.com/openvswitch/ovs
synced 2025-09-03 07:45:30 +00:00
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@samsung.com> Acked-by: Mark Kavanagh <mark.b.kavanagh@intel.com> Tested-by: Mark Kavanagh <mark.b.kavanagh@intel.com> Acked-by: Antonio Fischetti <antonio.fischetti@intel.com> Acked-by: Flavio Leitner <fbl@redhat.com> Signed-off-by: Ian Stokes <ian.stokes@intel.com>
This commit is contained in:
committed by
Ian Stokes
parent
40f185ac70
commit
be48173310
@@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user