Signed-off-by: Balakrishna.Garapati <balakrishna.garap...@linaro.org>
---
 Made updates to print recv stats based on mode

 example/generator/odp_generator.c | 81 ++++++++++++++++++++++++++++++++-------
 1 file changed, 67 insertions(+), 14 deletions(-)

diff --git a/example/generator/odp_generator.c 
b/example/generator/odp_generator.c
index bdee222..5d1c54a 100644
--- a/example/generator/odp_generator.c
+++ b/example/generator/odp_generator.c
@@ -101,6 +101,7 @@ static void usage(char *progname);
 static int scan_ip(char *buf, unsigned int *paddr);
 static int scan_mac(char *in, odph_ethaddr_t *des);
 static void tv_sub(struct timeval *recvtime, struct timeval *sendtime);
+static void print_global_stats(int num_workers);
 
 /**
  * Sleep for the specified amount of milliseconds
@@ -371,7 +372,6 @@ static odp_pktio_t create_pktio(const char *dev, odp_pool_t 
pool)
 static void *gen_send_thread(void *arg)
 {
        int thr;
-       uint64_t start, now, diff;
        odp_pktio_t pktio;
        thread_args_t *thr_args;
        odp_queue_t outq_def;
@@ -393,7 +393,6 @@ static void *gen_send_thread(void *arg)
                return NULL;
        }
 
-       start = odp_time_cycles();
        printf("  [%02i] created mode: SEND\n", thr);
        for (;;) {
                int err;
@@ -434,15 +433,6 @@ static void *gen_send_thread(void *arg)
                    >= (unsigned int)args->appl.number) {
                        break;
                }
-
-               now = odp_time_cycles();
-               diff = odp_time_diff_cycles(start, now);
-               if (odp_time_cycles_to_ns(diff) > 20 * ODP_TIME_SEC) {
-                       start = odp_time_cycles();
-                       printf("  [%02i] total send: %ju\n",
-                              thr, odp_atomic_load_u64(&counters.seq));
-                       fflush(stdout);
-               }
        }
 
        /* receive number of reply pks until timeout */
@@ -502,16 +492,16 @@ static void print_pkts(int thr, odp_packet_t pkt_tbl[], 
unsigned len)
                        continue;
 
                odp_atomic_inc_u64(&counters.ip);
-               rlen += sprintf(msg, "receive Packet proto:IP ");
                buf = odp_packet_data(pkt);
                ip = (odph_ipv4hdr_t *)(buf + odp_packet_l3_offset(pkt));
-               rlen += sprintf(msg + rlen, "id %d ",
-                               odp_be_to_cpu_16(ip->id));
                offset = odp_packet_l4_offset(pkt);
 
                /* udp */
                if (ip->proto == ODPH_IPPROTO_UDP) {
                        odp_atomic_inc_u64(&counters.udp);
+                       rlen += sprintf(msg, "receive Packet proto:IP ");
+                       rlen += sprintf(msg + rlen, "id %d ",
+                                       odp_be_to_cpu_16(ip->id));
                        udp = (odph_udphdr_t *)(buf + offset);
                        rlen += sprintf(msg + rlen, "UDP payload %d ",
                                        odp_be_to_cpu_16(udp->length) -
@@ -589,6 +579,67 @@ static void *gen_recv_thread(void *arg)
 
        return arg;
 }
+
+/**
+ * printing verbose statistics
+ *
+ */
+static void print_global_stats(int num_workers)
+{
+       uint64_t start, now, diff;
+       uint64_t pkts, pkts_prev = 0, pps, maximum_pps = 0;
+       int verbose_interval = 20, worker_count;
+       odp_thrmask_t thrd_mask;
+
+       start = odp_time_cycles();
+       while (1) {
+               now = odp_time_cycles();
+               diff = odp_time_diff_cycles(start, now);
+               if (odp_time_cycles_to_ns(diff) <
+                   verbose_interval * ODP_TIME_SEC) {
+                       continue;
+               }
+
+               start = odp_time_cycles();
+
+               worker_count = odp_thrmask_worker(&thrd_mask);
+               if (worker_count < num_workers)
+                       break;
+               if (args->appl.mode == APPL_MODE_PING) {
+                       if (worker_count == num_workers)
+                               break;
+               }
+
+               if (args->appl.mode == APPL_MODE_RCV) {
+                       pkts = odp_atomic_load_u64(&counters.udp);
+                       if (pkts != 0)
+                               printf(" total receive(UDP: %" PRIu64 ")\n",
+                                      pkts);
+                       continue;
+               }
+
+               if (args->appl.mode == APPL_MODE_PING) {
+                       pkts = odp_atomic_load_u64(&counters.icmp);
+                       if (pkts != 0)
+                               printf(" total receive(ICMP: %" PRIu64 ")\n",
+                                      pkts);
+               }
+
+               pkts = odp_atomic_load_u64(&counters.seq);
+               printf(" total sent: %" PRIu64 "\n", pkts);
+
+       if (args->appl.mode == APPL_MODE_UDP) {
+                       pps = (pkts - pkts_prev) / verbose_interval;
+                       if (pps > maximum_pps)
+                               maximum_pps = pps;
+                       printf(" %" PRIu64 " pps, %" PRIu64 " max pps\n",
+                              pps, maximum_pps);
+               }
+
+               pkts_prev = pkts;
+       };
+}
+
 /**
  * ODP packet example main function
  */
@@ -796,6 +847,8 @@ int main(int argc, char *argv[])
                }
        }
 
+       print_global_stats(num_workers);
+
        /* Master thread waits for other threads to exit */
        odph_linux_pthread_join(thread_tbl, num_workers);
 
-- 
1.9.1

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to