devices: vnet_get_aggregate_rx_packets should not be dpdk specific

Change-Id: I1152db4b7d1602653d7d8b2c6cb28cf5c526c4ca
Signed-off-by: Damjan Marion <damarion@cisco.com>
This commit is contained in:
Damjan Marion
2017-02-28 21:55:28 +01:00
committed by Neale Ranns
parent f7c379403a
commit b3bb10101c
10 changed files with 59 additions and 53 deletions

View 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;
}

View 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
*

View 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 */
/*

View 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,

View File

@ -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");

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;