summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDeepak S <deepak.s@linux.intel.com>2018-10-31 17:45:16 +0000
committerGerrit Code Review <gerrit@opnfv.org>2018-10-31 17:45:16 +0000
commit9e5b1c09840e5536ad74b4143e31cbd04d7e966c (patch)
treea0319ae58232efecfa1bea9e7f361ed36ff0efec
parent6d005f74525630cd63a759bff8cf2e9ae6b02e88 (diff)
parent085c7a581ff15b46207eb2fe27068f21796a01ca (diff)
Merge "Add support for counting non dataplane related packets"
-rw-r--r--VNFs/DPPD-PROX/cmd_parser.c34
-rw-r--r--VNFs/DPPD-PROX/display_tasks.c18
-rw-r--r--VNFs/DPPD-PROX/handle_lat.c11
-rw-r--r--VNFs/DPPD-PROX/packet_utils.c1
-rw-r--r--VNFs/DPPD-PROX/rx_pkt.c4
-rw-r--r--VNFs/DPPD-PROX/stats_parser.c19
-rw-r--r--VNFs/DPPD-PROX/stats_task.c16
-rw-r--r--VNFs/DPPD-PROX/stats_task.h16
8 files changed, 114 insertions, 5 deletions
diff --git a/VNFs/DPPD-PROX/cmd_parser.c b/VNFs/DPPD-PROX/cmd_parser.c
index b9817381..a1d101f8 100644
--- a/VNFs/DPPD-PROX/cmd_parser.c
+++ b/VNFs/DPPD-PROX/cmd_parser.c
@@ -1656,6 +1656,39 @@ static int parse_cmd_core_stats(const char *str, struct input *input)
return 0;
}
+static int parse_cmd_dp_core_stats(const char *str, struct input *input)
+{
+ unsigned lcores[RTE_MAX_LCORE], lcore_id, task_id, nb_cores;
+
+ if (parse_core_task(str, lcores, &task_id, &nb_cores))
+ return -1;
+
+ if (cores_task_are_valid(lcores, task_id, nb_cores)) {
+ for (unsigned int i = 0; i < nb_cores; i++) {
+ lcore_id = lcores[i];
+ uint64_t tot_rx = stats_core_task_tot_rx(lcore_id, task_id);
+ uint64_t tot_tx = stats_core_task_tot_tx(lcore_id, task_id);
+ uint64_t tot_rx_non_dp = stats_core_task_tot_rx_non_dp(lcore_id, task_id);
+ uint64_t tot_tx_non_dp = stats_core_task_tot_tx_non_dp(lcore_id, task_id);
+ uint64_t tot_drop = stats_core_task_tot_drop(lcore_id, task_id);
+ uint64_t last_tsc = stats_core_task_last_tsc(lcore_id, task_id);
+
+ if (input->reply) {
+ char buf[128];
+ snprintf(buf, sizeof(buf),
+ "%"PRIu64",%"PRIu64",%"PRIu64",%"PRIu64",%"PRIu64",%"PRIu64",%"PRIu64"\n",
+ tot_rx, tot_tx, tot_rx_non_dp, tot_tx_non_dp, tot_drop, last_tsc, rte_get_tsc_hz());
+ input->reply(input, buf, strlen(buf));
+ }
+ else {
+ plog_info("RX: %"PRIu64", TX: %"PRIu64", RX_NON_DP: %"PRIu64", TX_NON_DP: %"PRIu64", DROP: %"PRIu64"\n",
+ tot_rx, tot_tx, tot_rx_non_dp, tot_tx_non_dp, tot_drop);
+ }
+ }
+ }
+ return 0;
+}
+
static int parse_cmd_lat_stats(const char *str, struct input *input)
{
unsigned lcores[RTE_MAX_LCORE], lcore_id, task_id, nb_cores;
@@ -1975,6 +2008,7 @@ static struct cmd_str cmd_strings[] = {
{"lat packets", "<core id> <task id>", "Print the latency for each of the last set of packets", parse_cmd_lat_packets},
{"accuracy limit", "<core id> <task id> <nsec>", "Only consider latency of packets that were measured with an error no more than <nsec>", parse_cmd_accuracy},
{"core stats", "<core id> <task id>", "Print rx/tx/drop for task <task id> running on core <core id>", parse_cmd_core_stats},
+ {"dp core stats", "<core id> <task id>", "Print rx/tx/non_dp_rx/non_dp_tx/drop for task <task id> running on core <core id>", parse_cmd_dp_core_stats},
{"port_stats", "<port id>", "Print rate for no_mbufs, ierrors + imissed, rx_bytes, tx_bytes, rx_pkts, tx_pkts; totals for RX, TX, no_mbufs, ierrors + imissed for port <port id>", parse_cmd_port_stats},
{"multi port stats", "<port list>", "Get stats for multiple ports, semi-colon separated: port id, total for rx_pkts, tx_pkts, no_mbufs, ierrors + imissed, last_tsc", parse_cmd_multi_port_stats},
{"read reg", "", "Read register", parse_cmd_read_reg},
diff --git a/VNFs/DPPD-PROX/display_tasks.c b/VNFs/DPPD-PROX/display_tasks.c
index 75075a10..f7520092 100644
--- a/VNFs/DPPD-PROX/display_tasks.c
+++ b/VNFs/DPPD-PROX/display_tasks.c
@@ -56,6 +56,8 @@ static struct display_column *class_col;
static struct display_column *mbm_tot_col;
static struct display_column *mbm_loc_col;
static struct display_column *frac_col;
+static struct display_column *rx_non_dp_col;
+static struct display_column *tx_non_dp_col;
static void stats_display_core_task_entry(struct lcore_cfg *lconf, struct task_args *targ, unsigned row)
{
@@ -115,6 +117,12 @@ static void display_tasks_draw_frame(struct screen_state *state)
handled_col = display_table_add_col(stats);
display_column_init(handled_col, "Handled (K)", 9);
+ rx_non_dp_col = display_table_add_col(stats);
+ display_column_init(rx_non_dp_col, "Rx non DP (K)", 9);
+
+ tx_non_dp_col = display_table_add_col(stats);
+ display_column_init(tx_non_dp_col, "Tx non DP (K)", 9);
+
if (stats_cpu_freq_enabled()) {
struct display_table *other = display_page_add_table(&display_page_tasks);
@@ -151,6 +159,12 @@ static void display_tasks_draw_frame(struct screen_state *state)
handled_col = display_table_add_col(stats);
display_column_init(handled_col, "Handled (K)", 14);
+ rx_non_dp_col = display_table_add_col(stats);
+ display_column_init(rx_non_dp_col, "RX non DP (K)", 14);
+
+ tx_non_dp_col = display_table_add_col(stats);
+ display_column_init(tx_non_dp_col, "TX non DP (K)", 14);
+
if (stats_cmt_enabled()) {
struct display_table *other = display_page_add_table(&display_page_tasks);
@@ -231,6 +245,8 @@ static void display_core_task_stats_per_sec(const struct task_stats_disp *t, str
print_kpps(tx_fail_col, row, last->drop_tx_fail - prev->drop_tx_fail, delta_t);
print_kpps(discard_col, row, last->drop_discard - prev->drop_discard, delta_t);
print_kpps(handled_col, row, last->drop_handled - prev->drop_handled, delta_t);
+ print_kpps(rx_non_dp_col, row, last->rx_non_dp - prev->rx_non_dp, delta_t);
+ print_kpps(tx_non_dp_col, row, last->tx_non_dp - prev->tx_non_dp, delta_t);
if (stats_cpu_freq_enabled()) {
uint8_t lcore_stat_id = t->lcore_stat_id;
@@ -285,6 +301,8 @@ static void display_core_task_stats_tot(const struct task_stats_disp *t, struct
display_column_print(tx_fail_col, row, "%lu", ts->tot_drop_tx_fail);
display_column_print(discard_col, row, "%lu", ts->tot_drop_discard);
display_column_print(handled_col, row, "%lu", ts->tot_drop_handled);
+ display_column_print(rx_non_dp_col, row, "%lu", ts->tot_rx_non_dp);
+ display_column_print(tx_non_dp_col, row, "%lu", ts->tot_tx_non_dp);
if (stats_cmt_enabled()) {
struct lcore_stats *c = stats_get_lcore_stats(t->lcore_stat_id);
diff --git a/VNFs/DPPD-PROX/handle_lat.c b/VNFs/DPPD-PROX/handle_lat.c
index 8285686b..a0e5fb42 100644
--- a/VNFs/DPPD-PROX/handle_lat.c
+++ b/VNFs/DPPD-PROX/handle_lat.c
@@ -527,6 +527,7 @@ static int handle_lat_bulk(struct task_base *tbase, struct rte_mbuf **mbufs, uin
task_lat_update_lat_test(task);
// Remember those packets with bad length or bad signature
+ uint32_t non_dp_count = 0;
uint64_t pkt_bad_len_sig[(MAX_RX_PKT_ALL + 63) / 64];
#define BIT64_SET(a64, bit) a64[bit / 64] |= (((uint64_t)1) << (bit & 63))
#define BIT64_CLR(a64, bit) a64[bit / 64] &= ~(((uint64_t)1) << (bit & 63))
@@ -540,9 +541,10 @@ static int handle_lat_bulk(struct task_base *tbase, struct rte_mbuf **mbufs, uin
task->rx_pkt_meta[j].hdr = rte_pktmbuf_mtod(mbuf, uint8_t *);
// Remember those packets which are too short to hold the values that we expect
- if (unlikely(rte_pktmbuf_pkt_len(mbuf) < task->min_pkt_len))
+ if (unlikely(rte_pktmbuf_pkt_len(mbuf) < task->min_pkt_len)) {
BIT64_SET(pkt_bad_len_sig, j);
- else
+ non_dp_count++;
+ } else
BIT64_CLR(pkt_bad_len_sig, j);
}
@@ -553,8 +555,10 @@ static int handle_lat_bulk(struct task_base *tbase, struct rte_mbuf **mbufs, uin
// Remember those packets with bad signature
if (likely(*(uint32_t *)(task->rx_pkt_meta[j].hdr + task->sig_pos) == task->sig))
task->rx_pkt_meta[j].pkt_tx_time = *(uint32_t *)(task->rx_pkt_meta[j].hdr + task->lat_pos);
- else
+ else {
BIT64_SET(pkt_bad_len_sig, j);
+ non_dp_count++;
+ }
}
} else {
for (uint16_t j = 0; j < n_pkts; ++j) {
@@ -584,6 +588,7 @@ static int handle_lat_bulk(struct task_base *tbase, struct rte_mbuf **mbufs, uin
rx_time_err = pkt_rx_time64 - (task->begin >> LATENCY_ACCURACY);
}
+ TASK_STATS_ADD_RX_NON_DP(&tbase->aux->stats, non_dp_count);
for (uint16_t j = 0; j < n_pkts; ++j) {
// Used to display % of packets within accuracy limit vs. total number of packets (used_col)
task->lat_test->tot_all_pkts++;
diff --git a/VNFs/DPPD-PROX/packet_utils.c b/VNFs/DPPD-PROX/packet_utils.c
index 9e5bcde4..9d170949 100644
--- a/VNFs/DPPD-PROX/packet_utils.c
+++ b/VNFs/DPPD-PROX/packet_utils.c
@@ -266,6 +266,7 @@ void handle_ctrl_plane_pkts(struct task_base *tbase, struct rte_mbuf **mbufs, ui
break;
case ARP_REPLY_FROM_CTRL:
case ARP_REQ_FROM_CTRL:
+ TASK_STATS_ADD_TX_NON_DP(&tbase->aux->stats, 1);
out[0] = 0;
tbase->aux->tx_pkt_l2(tbase, &mbufs[j], 1, out);
break;
diff --git a/VNFs/DPPD-PROX/rx_pkt.c b/VNFs/DPPD-PROX/rx_pkt.c
index f6adeb4b..2571b8a4 100644
--- a/VNFs/DPPD-PROX/rx_pkt.c
+++ b/VNFs/DPPD-PROX/rx_pkt.c
@@ -145,7 +145,7 @@ static uint16_t rx_pkt_hw_param(struct task_base *tbase, struct rte_mbuf ***mbuf
}
if (skip)
- TASK_STATS_ADD_DROP_HANDLED(&tbase->aux->stats, skip);
+ TASK_STATS_ADD_RX_NON_DP(&tbase->aux->stats, skip);
if (likely(nb_rx > 0)) {
TASK_STATS_ADD_RX(&tbase->aux->stats, nb_rx);
return nb_rx - skip;
@@ -201,7 +201,7 @@ static inline uint16_t rx_pkt_hw1_param(struct task_base *tbase, struct rte_mbuf
}
if (skip)
- TASK_STATS_ADD_DROP_HANDLED(&tbase->aux->stats, skip);
+ TASK_STATS_ADD_RX_NON_DP(&tbase->aux->stats, skip);
if (likely(nb_rx > 0)) {
TASK_STATS_ADD_RX(&tbase->aux->stats, nb_rx);
return nb_rx - skip;
diff --git a/VNFs/DPPD-PROX/stats_parser.c b/VNFs/DPPD-PROX/stats_parser.c
index 37e1781b..73db5010 100644
--- a/VNFs/DPPD-PROX/stats_parser.c
+++ b/VNFs/DPPD-PROX/stats_parser.c
@@ -149,6 +149,23 @@ static uint64_t sp_task_drop_handled(int argc, const char *argv[])
return stats_get_task_stats_sample(c, t, 1)->drop_handled;
}
+static uint64_t sp_task_rx_non_dp(int argc, const char *argv[])
+{
+ struct task_stats_sample *last;
+ uint32_t c, t;
+ if (args_to_core_task(argv[0], argv[1], &c, &t))
+ return -1;
+ return stats_get_task_stats_sample(c, t, 1)->rx_non_dp;
+}
+
+static uint64_t sp_task_tx_non_dp(int argc, const char *argv[])
+{
+ struct task_stats_sample *last;
+ uint32_t c, t;
+ if (args_to_core_task(argv[0], argv[1], &c, &t))
+ return -1;
+ return stats_get_task_stats_sample(c, t, 1)->tx_non_dp;
+}
static uint64_t sp_task_rx_bytes(int argc, const char *argv[])
{
return -1;
@@ -790,6 +807,8 @@ struct stats_path_str stats_paths[] = {
{"task.core(#).task(#).rx_prio(#)", sp_task_rx_prio},
{"task.core(#).task(#).max_irq", sp_task_max_irq},
{"task.core(#).task(#).irq(#)", sp_task_irq},
+ {"task.core(#).task(#).rx_non_dp", sp_task_rx_non_dp},
+ {"task.core(#).task(#).tx_non_dp", sp_task_tx_non_dp},
{"port(#).no_mbufs", sp_port_no_mbufs},
{"port(#).ierrors", sp_port_ierrors},
diff --git a/VNFs/DPPD-PROX/stats_task.c b/VNFs/DPPD-PROX/stats_task.c
index 6b4dc2dd..2aed7720 100644
--- a/VNFs/DPPD-PROX/stats_task.c
+++ b/VNFs/DPPD-PROX/stats_task.c
@@ -58,6 +58,8 @@ void stats_task_reset(void)
cur_task_stats->tot_drop_tx_fail = 0;
cur_task_stats->tot_drop_discard = 0;
cur_task_stats->tot_drop_handled = 0;
+ cur_task_stats->tot_rx_non_dp = 0;
+ cur_task_stats->tot_tx_non_dp = 0;
}
}
@@ -78,6 +80,16 @@ uint64_t stats_core_task_tot_drop(uint8_t lcore_id, uint8_t task_id)
lcore_task_stats_all[lcore_id].task_stats[task_id].tot_drop_handled;
}
+uint64_t stats_core_task_tot_tx_non_dp(uint8_t lcore_id, uint8_t task_id)
+{
+ return lcore_task_stats_all[lcore_id].task_stats[task_id].tot_tx_non_dp;
+}
+
+uint64_t stats_core_task_tot_rx_non_dp(uint8_t lcore_id, uint8_t task_id)
+{
+ return lcore_task_stats_all[lcore_id].task_stats[task_id].tot_rx_non_dp;
+}
+
uint64_t stats_core_task_last_tsc(uint8_t lcore_id, uint8_t task_id)
{
return lcore_task_stats_all[lcore_id].task_stats[task_id].sample[last_stat].tsc;
@@ -102,6 +114,8 @@ void stats_task_post_proc(void)
cur_task_stats->tot_drop_tx_fail += last->drop_tx_fail - prev->drop_tx_fail;
cur_task_stats->tot_drop_discard += last->drop_discard - prev->drop_discard;
cur_task_stats->tot_drop_handled += last->drop_handled - prev->drop_handled;
+ cur_task_stats->tot_rx_non_dp += last->rx_non_dp - prev->rx_non_dp;
+ cur_task_stats->tot_tx_non_dp += last->tx_non_dp - prev->tx_non_dp;
}
}
@@ -127,6 +141,8 @@ void stats_task_update(void)
last->tx_bytes = stats->tx_bytes;
last->rx_bytes = stats->rx_bytes;
last->drop_bytes = stats->drop_bytes;
+ last->rx_non_dp = stats->rx_non_dp;
+ last->tx_non_dp = stats->tx_non_dp;
after = rte_rdtsc();
last->tsc = (before >> 1) + (after >> 1);
}
diff --git a/VNFs/DPPD-PROX/stats_task.h b/VNFs/DPPD-PROX/stats_task.h
index 156eb326..362b718c 100644
--- a/VNFs/DPPD-PROX/stats_task.h
+++ b/VNFs/DPPD-PROX/stats_task.h
@@ -45,6 +45,8 @@ struct task_rt_stats {
uint64_t rx_bytes;
uint64_t tx_bytes;
uint64_t drop_bytes;
+ uint64_t rx_non_dp;
+ uint64_t tx_non_dp;
} __attribute__((packed)) __rte_cache_aligned;
#ifdef PROX_STATS
@@ -72,6 +74,14 @@ struct task_rt_stats {
(stats)->rx_pkt_count += ntx; \
} while (0) \
+#define TASK_STATS_ADD_RX_NON_DP(stats, ntx) do { \
+ (stats)->rx_non_dp += ntx; \
+ } while(0)
+
+#define TASK_STATS_ADD_TX_NON_DP(stats, ntx) do { \
+ (stats)->tx_non_dp += ntx; \
+ } while(0)
+
#define TASK_STATS_ADD_RX_BYTES(stats, bytes) do { \
(stats)->rx_bytes += bytes; \
} while (0) \
@@ -109,6 +119,8 @@ struct task_stats_sample {
uint64_t rx_bytes;
uint64_t tx_bytes;
uint64_t drop_bytes;
+ uint64_t rx_non_dp;
+ uint64_t tx_non_dp;
};
struct task_stats {
@@ -117,6 +129,8 @@ struct task_stats {
uint64_t tot_drop_discard;
uint64_t tot_drop_handled;
uint64_t tot_rx_pkt_count;
+ uint64_t tot_tx_non_dp;
+ uint64_t tot_rx_non_dp;
struct task_stats_sample sample[2];
@@ -141,5 +155,7 @@ uint64_t stats_core_task_tot_rx(uint8_t lcore_id, uint8_t task_id);
uint64_t stats_core_task_tot_tx(uint8_t lcore_id, uint8_t task_id);
uint64_t stats_core_task_tot_drop(uint8_t lcore_id, uint8_t task_id);
uint64_t stats_core_task_last_tsc(uint8_t lcore_id, uint8_t task_id);
+uint64_t stats_core_task_tot_rx_non_dp(uint8_t lcore_id, uint8_t task_id);
+uint64_t stats_core_task_tot_tx_non_dp(uint8_t lcore_id, uint8_t task_id);
#endif /* _STATS_TASK_H_ */