diff options
| author | Qiuwen Lu <[email protected]> | 2017-03-23 13:54:35 +0800 |
|---|---|---|
| committer | Qiuwen Lu <[email protected]> | 2017-03-23 13:54:35 +0800 |
| commit | 42df3214fc22ce3a55c028bdb3d3a4dfa131bf4d (patch) | |
| tree | cc93df82e14c32ca5e46c28f24c184eeb056dd5c /app | |
| parent | 83de81b8f4b4fe4faabc23517efa791430f65ac2 (diff) | |
增加应用端收发包统计功能
Diffstat (limited to 'app')
| -rw-r--r-- | app/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | app/src/marsio.c | 4 | ||||
| -rw-r--r-- | app/src/monit.c | 88 | ||||
| -rw-r--r-- | app/src/rawio.c | 5 |
4 files changed, 67 insertions, 32 deletions
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index ca892a4..16b4ee9 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -7,7 +7,7 @@ include_directories(${DPDK_INCLUDE_DIR}) include_directories(include) add_definitions(${DPDK_C_PREDEFINED}) -add_library(marsio SHARED src/marsio.c src/arp.c src/neigh.c src/rawio.c src/mrb.c src/sendpath.c) +add_library(marsio SHARED src/marsio.c src/arp.c src/neigh.c src/rawio.c src/mrb.c src/sendpath.c src/monit.c) set_target_properties(marsio PROPERTIES VERSION ${MARSIO_VERSION_MAJOR}.${MARSIO_VERSION_MINOR}) set_target_properties(marsio PROPERTIES SOVERSION ${MARSIO_VERSION_MAJOR}) diff --git a/app/src/marsio.c b/app/src/marsio.c index 2d7c4db..8fe0e14 100644 --- a/app/src/marsio.c +++ b/app/src/marsio.c @@ -108,6 +108,8 @@ static int mrapp_app_register(struct mr_instance * instance) return RT_SUCCESS; } +extern int mrapp_monit_loop(struct mr_instance * instance); + void * mrapp_ctrlplane_thread(void * args) { struct mr_instance * _instance = (struct mr_instance *)args; @@ -115,7 +117,7 @@ void * mrapp_ctrlplane_thread(void * args) while (1) { - //mrapp_monit_loop(_instance); + mrapp_monit_loop(_instance); sleep(1); } } diff --git a/app/src/monit.c b/app/src/monit.c index c3ccbfa..203e6e5 100644 --- a/app/src/monit.c +++ b/app/src/monit.c @@ -4,11 +4,38 @@ * \date 2016-11-30
*/
-#include <mr_common.h>
-#include <mr_rtdev.h>
#include <mrapp.h>
-
-#include "cJSON.h"
+#include <cJSON.h>
+ +int vdev_instance_stats_get(struct vdev_instance * vdi, struct vdev_stat_info * stat_info) +{ + struct vnode_cons_stat * st_cons_rx = vnode_mirror_cons_stat_get(vdi->vnode_rx_cons); + struct vnode_prod_stat * st_prod_tx = vnode_mirror_prod_stat_get(vdi->vnode_tx_prod); + struct vnode_prod_stat * st_prod_ftx = vnode_mirror_prod_stat_get(vdi->vnode_ftx_prod); + stat_info->nr_rxstream = vdi->nr_rxstream; + stat_info->nr_txstream = vdi->nr_txstream; + + for (int i = 0; i < vdi->nr_rxstream; i++) + { + stat_info->rx_on_line[i] = rte_atomic64_read(&st_cons_rx[i].on_line); + stat_info->rx_deliver[i] = rte_atomic64_read(&st_cons_rx[i].recieved); + stat_info->rx_missed[i] = rte_atomic64_read(&st_cons_rx[i].missed); + } + + for (int i = 0; i < vdi->nr_txstream; i++) + { + stat_info->tx_on_line[i] = rte_atomic64_read(&st_prod_tx[i].on_line); + stat_info->tx_deliver[i] = rte_atomic64_read(&st_prod_tx[i].sent); + stat_info->tx_missed[i] = rte_atomic64_read(&st_prod_tx[i].missed); + + stat_info->ftx_on_line[i] = rte_atomic64_read(&st_prod_ftx[i].on_line); + stat_info->ftx_deliver[i] = rte_atomic64_read(&st_prod_ftx[i].sent); + stat_info->ftx_missed[i] = rte_atomic64_read(&st_prod_ftx[i].missed); + } + + return 0; +} + static cJSON * __create_uint64_array(const uint64_t * value, int nr_value)
{
@@ -18,18 +45,18 @@ static cJSON * __create_uint64_array(const uint64_t * value, int nr_value) return uint64_array;
}
-static cJSON * __create_vdev_stats(struct rtdev_app_desc * dev_desc)
+static cJSON * __create_vdev_stats(struct vdev_instance * vdi)
{
- struct rtdev_stat_info _stat_info;
- mr_rtdev_app_stats_get(dev_desc, &_stat_info);
+ struct vdev_stat_info _stat_info;
+ vdev_instance_stats_get(vdi, &_stat_info);
- struct cJSON * j_raw_device_stats = cJSON_CreateObject();
- unsigned int nr_rx_stream = dev_desc->nr_rx_stream;
- unsigned int nr_tx_stream = dev_desc->nr_tx_stream;
+ struct cJSON * j_vdi_stats = cJSON_CreateObject();
+ unsigned int nr_rx_stream = _stat_info.nr_rxstream;
+ unsigned int nr_tx_stream = _stat_info.nr_txstream;
-#define __JOIN_RAW_DEVICE_STATS_ITEM(item, streams) do { \
- cJSON_AddItemToObject(j_raw_device_stats, #item, \
- __create_uint64_array(_stat_info.item, streams)); \
+#define __JOIN_RAW_DEVICE_STATS_ITEM(item, streams) do { \
+ cJSON_AddItemToObject(j_vdi_stats, #item, \
+ __create_uint64_array(_stat_info.item, streams)); \
} while(0)
__JOIN_RAW_DEVICE_STATS_ITEM(rx_on_line, nr_rx_stream);
@@ -40,38 +67,39 @@ static cJSON * __create_vdev_stats(struct rtdev_app_desc * dev_desc) __JOIN_RAW_DEVICE_STATS_ITEM(tx_missed, nr_tx_stream);
__JOIN_RAW_DEVICE_STATS_ITEM(ftx_on_line, nr_tx_stream);
__JOIN_RAW_DEVICE_STATS_ITEM(ftx_deliver, nr_tx_stream);
- __JOIN_RAW_DEVICE_STATS_ITEM(ftx_missed, nr_tx_stream);
- return j_raw_device_stats;
+ __JOIN_RAW_DEVICE_STATS_ITEM(ftx_missed, nr_tx_stream); +
+ return j_vdi_stats;
}
// 运行时原始报文设备统计计数
-static cJSON * monit_vdev(struct mrapp_instance * instance)
+static cJSON * monit_vdev(struct mr_instance * instance)
{
struct cJSON * j_raw_device_array = cJSON_CreateArray();
- for(int i = 0; i < RTE_DIM(instance->raw_socket); i++)
+ for(int i = 0; i < instance->nr_vdevs; i++)
{
- struct raw_socket * socket = instance->raw_socket[i];
- if (socket == NULL) continue;
+ struct mr_vdev * vdev = &instance->vdevs[i];
+ if (vdev == NULL) continue;
- cJSON * j_raw_device = cJSON_CreateObject();
- cJSON_AddStringToObject(j_raw_device, "symbol", socket->devsym);
- cJSON_AddNumberToObject(j_raw_device, "rxstreams", socket->nr_rxstream);
- cJSON_AddNumberToObject(j_raw_device, "txstreams", socket->nr_txstream);
- cJSON_AddItemToObject(j_raw_device, "stats", __create_vdev_stats(socket->rtdev_desc));
- cJSON_AddItemToArray(j_raw_device_array, j_raw_device);
+ cJSON * j_vdev = cJSON_CreateObject();
+ cJSON_AddStringToObject(j_vdev, "symbol", vdev->devsym);
+ cJSON_AddNumberToObject(j_vdev, "rxstreams", vdev->nr_rxstream);
+ cJSON_AddNumberToObject(j_vdev, "txstreams", vdev->nr_txstream);
+ cJSON_AddItemToObject(j_vdev, "stats", __create_vdev_stats(vdev->vdi));
+ cJSON_AddItemToArray(j_raw_device_array, j_vdev);
}
return j_raw_device_array;
}
-static cJSON * monit_app_info(struct mrapp_instance * instance)
+static cJSON * monit_app_info(struct mr_instance * instance)
{
struct cJSON * j_root = cJSON_CreateObject();
cJSON_AddStringToObject(j_root, "symbol", instance->appsym);
return j_root;
}
-static cJSON * monit_root(struct mrapp_instance * instance)
+static cJSON * monit_root(struct mr_instance * instance)
{
struct cJSON * j_root = cJSON_CreateObject();
cJSON_AddItemToObject(j_root, "appinfo", monit_app_info(instance));
@@ -79,13 +107,13 @@ static cJSON * monit_root(struct mrapp_instance * instance) return j_root;
}
-int mrapp_monit_loop(struct mrapp_instance * instance)
+int mrapp_monit_loop(struct mr_instance * instance)
{
FILE * fp_monit = fopen(instance->monit_file_path, "w");
if(fp_monit == NULL)
{
- MR_LOG(INFO, MRLIB, "Open monit result file %s failed: %s \n",
- instance->monit_file_path, strerror(errno));
+ MR_ERROR("Open monit result file %s failed: %s \n", + instance->monit_file_path, strerror(errno));
return 0;
}
diff --git a/app/src/rawio.c b/app/src/rawio.c index 20e6cf1..0cb46df 100644 --- a/app/src/rawio.c +++ b/app/src/rawio.c @@ -74,6 +74,11 @@ err: return RT_ERR; } +int marsio_idle_poll(struct mr_instance * instance) +{ + return 0; +} + int marsio_udp_header_construct(marsio_buff_t * buff, uint16_t s_port, uint16_t d_port) { struct rte_mbuf * mbuf = (struct rte_mbuf *)buff; |
