aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vnet/devices/af_packet/node.c1
-rw-r--r--src/vnet/devices/devices.c14
-rw-r--r--src/vnet/devices/devices.h36
-rw-r--r--src/vnet/devices/dpdk/dpdk.h34
-rwxr-xr-xsrc/vnet/devices/dpdk/init.c8
-rw-r--r--src/vnet/devices/dpdk/node.c3
-rw-r--r--src/vnet/devices/netmap/node.c2
-rw-r--r--src/vnet/devices/ssvm/node.c2
-rw-r--r--src/vnet/devices/virtio/vhost-user.c2
-rw-r--r--src/vpp/api/gmon.c10
10 files changed, 59 insertions, 53 deletions
diff --git a/src/vnet/devices/af_packet/node.c b/src/vnet/devices/af_packet/node.c
index 476ccca9d39..69fc11c927e 100644
--- a/src/vnet/devices/af_packet/node.c
+++ b/src/vnet/devices/af_packet/node.c
@@ -239,6 +239,7 @@ af_packet_device_input_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
+ VNET_INTERFACE_COUNTER_RX,
os_get_cpu_number (), apif->hw_if_index, n_rx_packets, n_rx_bytes);
+ vnet_device_increment_rx_packets (cpu_index, n_rx_packets);
return n_rx_packets;
}
diff --git a/src/vnet/devices/devices.c b/src/vnet/devices/devices.c
index cd4386ebdca..c81043c6ac9 100644
--- a/src/vnet/devices/devices.c
+++ b/src/vnet/devices/devices.c
@@ -19,6 +19,8 @@
#include <vnet/ip/ip.h>
#include <vnet/ethernet/ethernet.h>
+vnet_device_main_t vnet_device_main;
+
static uword
device_input_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
vlib_frame_t * frame)
@@ -82,6 +84,18 @@ VNET_FEATURE_INIT (ethernet_input, static) = {
};
/* *INDENT-ON* */
+static clib_error_t *
+vnet_device_init (vlib_main_t * vm)
+{
+ vnet_device_main_t *vdm = &vnet_device_main;
+ vlib_thread_main_t *tm = vlib_get_thread_main ();
+
+ vec_validate_aligned (vdm->workers, tm->n_vlib_mains - 1,
+ CLIB_CACHE_LINE_BYTES);
+ return 0;
+}
+
+VLIB_INIT_FUNCTION (vnet_device_init);
/*
* fd.io coding-style-patch-verification: ON
*
diff --git a/src/vnet/devices/devices.h b/src/vnet/devices/devices.h
index c46dab904c3..a5cbc35e682 100644
--- a/src/vnet/devices/devices.h
+++ b/src/vnet/devices/devices.h
@@ -39,9 +39,45 @@ typedef enum
[VNET_DEVICE_INPUT_NEXT_MPLS_INPUT] = "mpls-input", \
}
+typedef struct
+{
+ CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
+
+ /* total input packet counter */
+ u64 aggregate_rx_packets;
+} vnet_device_per_worker_data_t;
+
+typedef struct
+{
+ vnet_device_per_worker_data_t *workers;
+} vnet_device_main_t;
+
+extern vnet_device_main_t vnet_device_main;
extern vlib_node_registration_t device_input_node;
extern const u32 device_input_next_node_advance[];
+static inline u64
+vnet_get_aggregate_rx_packets (void)
+{
+ vnet_device_main_t *vdm = &vnet_device_main;
+ u64 sum = 0;
+ vnet_device_per_worker_data_t *pwd;
+
+ vec_foreach (pwd, vdm->workers) sum += pwd->aggregate_rx_packets;
+
+ return sum;
+}
+
+static inline void
+vnet_device_increment_rx_packets (u32 cpu_index, u64 count)
+{
+ vnet_device_main_t *vdm = &vnet_device_main;
+ vnet_device_per_worker_data_t *pwd;
+
+ pwd = vec_elt_at_index (vdm->workers, cpu_index);
+ pwd->aggregate_rx_packets += count;
+}
+
#endif /* included_vnet_vnet_device_h */
/*
diff --git a/src/vnet/devices/dpdk/dpdk.h b/src/vnet/devices/dpdk/dpdk.h
index 79c694f7cbc..bf9f2768e08 100644
--- a/src/vnet/devices/dpdk/dpdk.h
+++ b/src/vnet/devices/dpdk/dpdk.h
@@ -225,22 +225,6 @@ typedef struct
typedef struct
{
- CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
-
- /* total input packet counter */
- u64 aggregate_rx_packets;
-} dpdk_worker_t;
-
-typedef struct
-{
- CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
-
- /* total input packet counter */
- u64 aggregate_rx_packets;
-} dpdk_hqos_thread_t;
-
-typedef struct
-{
u32 device;
u16 queue_id;
} dpdk_device_and_queue_t;
@@ -360,12 +344,6 @@ typedef struct
/* vlib buffer free list, must be same size as an rte_mbuf */
u32 vlib_buffer_free_list_index;
- /* dpdk worker "threads" */
- dpdk_worker_t *workers;
-
- /* dpdk HQoS "threads" */
- dpdk_hqos_thread_t *hqos_threads;
-
/* Ethernet input node index */
u32 ethernet_input_node_index;
@@ -475,18 +453,6 @@ void dpdk_update_link_state (dpdk_device_t * xd, f64 now);
void dpdk_device_lock_init (dpdk_device_t * xd);
void dpdk_device_lock_free (dpdk_device_t * xd);
-static inline u64
-vnet_get_aggregate_rx_packets (void)
-{
- dpdk_main_t *dm = &dpdk_main;
- u64 sum = 0;
- dpdk_worker_t *dw;
-
- vec_foreach (dw, dm->workers) sum += dw->aggregate_rx_packets;
-
- return sum;
-}
-
void dpdk_rx_trace (dpdk_main_t * dm,
vlib_node_runtime_t * node,
dpdk_device_t * xd,
diff --git a/src/vnet/devices/dpdk/init.c b/src/vnet/devices/dpdk/init.c
index f4700133d21..29423e152c4 100755
--- a/src/vnet/devices/dpdk/init.c
+++ b/src/vnet/devices/dpdk/init.c
@@ -277,9 +277,6 @@ dpdk_lib_init (dpdk_main_t * dm)
vec_validate_aligned (dm->devices_by_cpu, tm->n_vlib_mains - 1,
CLIB_CACHE_LINE_BYTES);
- vec_validate_aligned (dm->workers, tm->n_vlib_mains - 1,
- CLIB_CACHE_LINE_BYTES);
-
dm->hqos_cpu_first_index = 0;
dm->hqos_cpu_count = 0;
@@ -296,9 +293,6 @@ dpdk_lib_init (dpdk_main_t * dm)
vec_validate_aligned (dm->devices_by_hqos_cpu, tm->n_vlib_mains - 1,
CLIB_CACHE_LINE_BYTES);
- vec_validate_aligned (dm->hqos_threads, tm->n_vlib_mains - 1,
- CLIB_CACHE_LINE_BYTES);
-
nports = rte_eth_dev_count ();
if (nports < 1)
{
@@ -1756,8 +1750,6 @@ dpdk_init (vlib_main_t * vm)
STATIC_ASSERT (offsetof (dpdk_device_t, cacheline1) ==
CLIB_CACHE_LINE_BYTES,
"Data in cache line 0 is bigger than cache line size");
- STATIC_ASSERT (offsetof (dpdk_worker_t, cacheline0) == 0,
- "Cache line marker must be 1st element in dpdk_worker_t");
STATIC_ASSERT (offsetof (frame_queue_trace_t, cacheline0) == 0,
"Cache line marker must be 1st element in frame_queue_trace_t");
diff --git a/src/vnet/devices/dpdk/node.c b/src/vnet/devices/dpdk/node.c
index bde9dfae76d..0d64ae089e7 100644
--- a/src/vnet/devices/dpdk/node.c
+++ b/src/vnet/devices/dpdk/node.c
@@ -556,8 +556,7 @@ dpdk_device_input (dpdk_main_t * dm, dpdk_device_t * xd,
+ VNET_INTERFACE_COUNTER_RX,
cpu_index, xd->vlib_sw_if_index, mb_index, n_rx_bytes);
- dpdk_worker_t *dw = vec_elt_at_index (dm->workers, cpu_index);
- dw->aggregate_rx_packets += mb_index;
+ vnet_device_increment_rx_packets (cpu_index, mb_index);
return mb_index;
}
diff --git a/src/vnet/devices/netmap/node.c b/src/vnet/devices/netmap/node.c
index 19895e4754a..835209a3449 100644
--- a/src/vnet/devices/netmap/node.c
+++ b/src/vnet/devices/netmap/node.c
@@ -249,6 +249,8 @@ netmap_device_input_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
+ VNET_INTERFACE_COUNTER_RX,
os_get_cpu_number (), nif->hw_if_index, n_rx_packets, n_rx_bytes);
+ vnet_device_increment_rx_packets (cpu_index, n_rx_packets);
+
return n_rx_packets;
}
diff --git a/src/vnet/devices/ssvm/node.c b/src/vnet/devices/ssvm/node.c
index 3a695b1d8c0..a6c9dfd771d 100644
--- a/src/vnet/devices/ssvm/node.c
+++ b/src/vnet/devices/ssvm/node.c
@@ -287,6 +287,8 @@ out:
+ VNET_INTERFACE_COUNTER_RX, cpu_index,
intfc->vlib_hw_if_index, rx_queue_index, n_rx_bytes);
+ vnet_device_increment_rx_packets (cpu_index, rx_queue_index);
+
return rx_queue_index;
}
diff --git a/src/vnet/devices/virtio/vhost-user.c b/src/vnet/devices/virtio/vhost-user.c
index c43f6e67789..f490f0c1b41 100644
--- a/src/vnet/devices/virtio/vhost-user.c
+++ b/src/vnet/devices/virtio/vhost-user.c
@@ -1819,6 +1819,8 @@ vhost_user_if_input (vlib_main_t * vm,
+ VNET_INTERFACE_COUNTER_RX,
os_get_cpu_number (), vui->sw_if_index, n_rx_packets, n_rx_bytes);
+ vnet_device_increment_rx_packets (cpu_index, n_rx_packets);
+
return n_rx_packets;
}
diff --git a/src/vpp/api/gmon.c b/src/vpp/api/gmon.c
index 20deb6a2792..b28608f0890 100644
--- a/src/vpp/api/gmon.c
+++ b/src/vpp/api/gmon.c
@@ -59,17 +59,9 @@ typedef struct
} gmon_main_t;
-#if DPDK == 0
-static inline u64
-vnet_get_aggregate_rx_packets (void)
-{
- return 0;
-}
-#else
#include <vlib/vlib.h>
#include <vnet/vnet.h>
-#include <vnet/devices/dpdk/dpdk.h>
-#endif
+#include <vnet/devices/devices.h>
gmon_main_t gmon_main;