devices: vnet_get_aggregate_rx_packets should not be dpdk specific 62/5562/3
authorDamjan Marion <damarion@cisco.com>
Tue, 28 Feb 2017 20:55:28 +0000 (21:55 +0100)
committerNeale Ranns <nranns@cisco.com>
Wed, 1 Mar 2017 11:11:37 +0000 (11:11 +0000)
Change-Id: I1152db4b7d1602653d7d8b2c6cb28cf5c526c4ca
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/vnet/devices/af_packet/node.c
src/vnet/devices/devices.c
src/vnet/devices/devices.h
src/vnet/devices/dpdk/dpdk.h
src/vnet/devices/dpdk/init.c
src/vnet/devices/dpdk/node.c
src/vnet/devices/netmap/node.c
src/vnet/devices/ssvm/node.c
src/vnet/devices/virtio/vhost-user.c
src/vpp/api/gmon.c

index 476ccca..69fc11c 100644 (file)
@@ -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;
 }
 
index cd4386e..c81043c 100644 (file)
@@ -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
  *
index c46dab9..a5cbc35 100644 (file)
@@ -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 */
 
 /*
index 79c694f..bf9f276 100644 (file)
@@ -223,22 +223,6 @@ typedef struct
 #define DPDK_LINK_POLL_INTERVAL       (3.0)
 #define DPDK_MIN_LINK_POLL_INTERVAL   (0.001)  /* 1msec */
 
-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;
@@ -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,
index f470013..29423e1 100755 (executable)
@@ -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");
 
index bde9dfa..0d64ae0 100644 (file)
@@ -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;
 }
index 19895e4..835209a 100644 (file)
@@ -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;
 }
 
index 3a695b1..a6c9dfd 100644 (file)
@@ -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;
 }
 
index c43f6e6..f490f0c 100644 (file)
@@ -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;
 }
 
index 20deb6a..b28608f 100644 (file)
@@ -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;