app/pdump: exit with primary process
authorSuanming Mou <mousuanming@huawei.com>
Wed, 15 May 2019 05:10:39 +0000 (05:10 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 10 Jul 2019 22:26:17 +0000 (00:26 +0200)
The pdump tool works as the secondary process. When the primary process
exits and the residual secondary process keeps running, it will make the
primary process can't start up again. Since the ex-fbarry files are still
attached by the secondary process pdump, the 'new' primary process can't
get these files locked.

The patch is to set up an alarm which runs every 0.5s periodically
to monitor the primary process in the pdump. Once the primary exits,
so will the pdump.

Signed-off-by: Suanming Mou <mousuanming@huawei.com>
Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Reshma Pattan <reshma.pattan@intel.com>
app/pdump/main.c
doc/guides/rel_notes/release_19_08.rst
doc/guides/tools/pdump.rst

index cd0986aee8c60ab7f3ddc5bb10e1fcbcb629a2b0..c1b901279f4b335efc05ea405e0247c10b7fc23a 100644 (file)
@@ -13,6 +13,7 @@
 #include <net/if.h>
 
 #include <rte_eal.h>
+#include <rte_alarm.h>
 #include <rte_common.h>
 #include <rte_debug.h>
 #include <rte_ethdev.h>
@@ -65,6 +66,8 @@
 #define SIZE 256
 #define BURST_SIZE 32
 #define NUM_VDEVS 2
+/* Maximum delay for exiting after primary process. */
+#define MONITOR_INTERVAL (500 * 1000)
 
 /* true if x is a power of 2 */
 #define POWEROF2(x) ((((x)-1) & (x)) == 0)
@@ -412,6 +415,21 @@ launch_args_parse(int argc, char **argv, char *prgname)
        return 0;
 }
 
+static void
+monitor_primary(void *arg __rte_unused)
+{
+       if (quit_signal)
+               return;
+
+       if (rte_eal_primary_proc_alive(NULL)) {
+               rte_eal_alarm_set(MONITOR_INTERVAL, monitor_primary, NULL);
+               return;
+       }
+
+       printf("Primary process is no longer active, exiting...\n");
+       quit_signal = 1;
+}
+
 static void
 print_pdump_stats(void)
 {
@@ -536,6 +554,21 @@ cleanup_pdump_resources(void)
        cleanup_rings();
 }
 
+static void
+disable_primary_monitor(void)
+{
+       int ret;
+
+       /*
+        * Cancel monitoring of primary process.
+        * There will be no error if no alarm is set
+        * (in case primary process kill was detected earlier).
+        */
+       ret = rte_eal_alarm_cancel(monitor_primary, NULL);
+       if (ret < 0)
+               printf("Fail to disable monitor:%d\n", ret);
+}
+
 static void
 signal_handler(int sig_num)
 {
@@ -910,6 +943,17 @@ dump_packets(void)
                ;
 }
 
+static void
+enable_primary_monitor(void)
+{
+       int ret;
+
+       /* Once primary exits, so will pdump. */
+       ret = rte_eal_alarm_set(MONITOR_INTERVAL, monitor_primary, NULL);
+       if (ret < 0)
+               printf("Fail to enable monitor:%d\n", ret);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -953,8 +997,10 @@ main(int argc, char **argv)
        /* create mempool, ring and vdevs info */
        create_mp_ring_vdev();
        enable_pdump();
+       enable_primary_monitor();
        dump_packets();
 
+       disable_primary_monitor();
        cleanup_pdump_resources();
        /* dump debug stats */
        print_pdump_stats();
index ac496b37a165e6971fbe47fd883d2f412f36dc35..4a1fd8dd8a021743bc18f66c405f0052dff81728 100644 (file)
@@ -204,6 +204,10 @@ New Features
   Added telemetry mode to l3fwd-power application to report
   application level busyness, empty and full polls of rte_eth_rx_burst().
 
+* **Updated the pdump application.**
+
+  Add support for pdump to exit with primary process.
+
 
 Removed Items
 -------------
index 53cd2b464c178608cb6728e4ed3bd259e0bf1a37..8a499c6c5b8d7518479f1da3157b679e4a7ef901 100644 (file)
@@ -26,6 +26,9 @@ a DPDK secondary process and is capable of enabling packet capture on dpdk ports
         Once the libpcap development files are installed, the libpcap based PMD
         can be enabled by setting CONFIG_RTE_LIBRTE_PMD_PCAP=y and recompiling the DPDK.
 
+      * The ``dpdk-pdump`` tool runs as a DPDK secondary process. It exits when
+        the primary application exits.
+
 
 Running the Application
 -----------------------