]> git.droids-corp.org - dpdk.git/commitdiff
app/procinfo: add --iter-mempool
authorVipin Varghese <vipin.varghese@intel.com>
Thu, 10 Jan 2019 21:36:45 +0000 (03:06 +0530)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 11 Jan 2019 14:45:30 +0000 (15:45 +0100)
Function iter_mempool is used for iterating slected mempool elements
and display the contents of elements for a max of 256 bytes. In case
of invalid or no name for mempool, no information is displayed.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
app/proc-info/main.c
doc/guides/tools/proc_info.rst

index 4aeab926db811cd3b6abed1ea80d148408ecc45a..b9acfa9ec78ba794c5881d716b35dce5aef32dc7 100644 (file)
@@ -33,6 +33,7 @@
 #include <rte_security.h>
 #include <rte_cryptodev.h>
 #include <rte_tm.h>
+#include <rte_hexdump.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -88,6 +89,9 @@ static char *ring_name;
 /**< Enable show mempool. */
 static uint32_t enable_shw_mempool;
 static char *mempool_name;
+/**< Enable iter mempool. */
+static uint32_t enable_iter_mempool;
+static char *mempool_iter_name;
 
 /**< display usage */
 static void
@@ -112,7 +116,8 @@ proc_info_usage(const char *prgname)
                "  --show-tm: to display traffic manager information for ports\n"
                "  --show-crypto: to display crypto information\n"
                "  --show-ring[=name]: to display ring information\n"
-               "  --show-mempool[=name]: to display mempool information\n",
+               "  --show-mempool[=name]: to display mempool information\n"
+               "  --iter-mempool=name: iterate mempool elements to display content\n",
                prgname);
 }
 
@@ -224,6 +229,7 @@ proc_info_parse_args(int argc, char **argv)
                {"show-crypto", 0, NULL, 0},
                {"show-ring", optional_argument, NULL, 0},
                {"show-mempool", optional_argument, NULL, 0},
+               {"iter-mempool", required_argument, NULL, 0},
                {NULL, 0, 0, 0}
        };
 
@@ -284,6 +290,10 @@ proc_info_parse_args(int argc, char **argv)
                                        "show-mempool", MAX_LONG_OPT_SZ)) {
                                enable_shw_mempool = 1;
                                mempool_name = optarg;
+                       } else if (!strncmp(long_option[option_index].name,
+                                       "iter-mempool", MAX_LONG_OPT_SZ)) {
+                               enable_iter_mempool = 1;
+                               mempool_iter_name = optarg;
                        }
                        break;
                case 1:
@@ -1179,6 +1189,40 @@ show_mempool(char *name)
        STATS_BDR_STR(50, "");
 }
 
+static void
+mempool_itr_obj(struct rte_mempool *mp, void *opaque,
+               void *obj, unsigned int obj_idx)
+{
+       printf("  - obj_idx %u opaque %p obj %p\n",
+                       obj_idx, opaque, obj);
+
+       if (obj)
+               rte_hexdump(stdout, " Obj Content",
+                               obj, (mp->elt_size > 256)?256:mp->elt_size);
+}
+
+static void
+iter_mempool(char *name)
+{
+       snprintf(bdr_str, MAX_STRING_LEN, " iter - MEMPOOL %"PRIu64,
+                       rte_get_tsc_hz());
+       STATS_BDR_STR(10, bdr_str);
+
+       if (name != NULL) {
+               struct rte_mempool *ptr = rte_mempool_lookup(name);
+               if (ptr != NULL) {
+                       /* iterate each object */
+                       uint32_t ret = rte_mempool_obj_iter(ptr,
+                                       mempool_itr_obj, NULL);
+                       printf("\n  - iterated %u objects\n", ret);
+                       STATS_BDR_STR(50, "");
+                       return;
+               }
+       }
+
+       STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -1270,6 +1314,8 @@ main(int argc, char **argv)
                show_ring(ring_name);
        if (enable_shw_mempool)
                show_mempool(mempool_name);
+       if (enable_iter_mempool)
+               iter_mempool(mempool_iter_name);
 
        ret = rte_eal_cleanup();
        if (ret)
index 42c5d45e0baddbc156faa3c5b3d9ec7b7bdbe811..6bdf5a861b3d0d1ce61040850c39016e68446c3c 100644 (file)
@@ -19,7 +19,7 @@ The application has a number of command line options:
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
    --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto |
-   --show-ring[=name] | --show-mempool[=name] ]
+   --show-ring[=name] | --show-mempool[=name] | --iter-mempool=name ]
 
 Parameters
 ~~~~~~~~~~
@@ -65,6 +65,10 @@ The show-mempool parameter display current allocation of all mempool
 debug information. Specifying the name allows to display details for specific
 specific mempool. For invalid or no mempool name, whole list is dump.
 
+**--iter-mempool=name**
+The iter-mempool parameter iterates and displays mempool elements specified
+by name. For invalid or no mempool name no elements are displayed.
+
 Limitations
 -----------