@@ -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,59 @@ 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 loop_forever = 1, verbose_interval = 20, worker_count;
+ odp_thrmask_t thrd_mask;
+
+ start = odp_time_cycles();
+ do {
+ pkts = 0;
+ 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();
+ pkts = odp_atomic_load_u64(&counters.icmp);
+ if (pkts != 0)
+ printf(" total receive(icmp: %" PRIu64 ")\n", pkts);
+
+ if (args->appl.mode == APPL_MODE_RCV)
+ continue;
+
+ 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);
+ }
+
+ 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;
+ }
+
+ pkts_prev = pkts;
+ } while (loop_forever);
+}
+
/**
* ODP packet example main function
*/
@@ -796,6 +839,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);
Signed-off-by: Balakrishna.Garapati <balakrishna.garapati@linaro.org> --- Fixed the comments with some redesign example/generator/odp_generator.c | 73 +++++++++++++++++++++++++++++++-------- 1 file changed, 59 insertions(+), 14 deletions(-)