diff options
| author | 童宗振 <[email protected]> | 2024-03-13 10:46:27 +0000 |
|---|---|---|
| committer | 童宗振 <[email protected]> | 2024-03-13 10:46:27 +0000 |
| commit | 468c21fa9ca6c37b66839635dbf8cac8479c0c6c (patch) | |
| tree | 7615fd431a39a0b54cea96fdc3b46103aca73ca7 /app/src/monit.c | |
| parent | dde974556876ed3e6e10b8051dff9dbead329f69 (diff) | |
Dp trace perf opti
Diffstat (limited to 'app/src/monit.c')
| -rw-r--r-- | app/src/monit.c | 216 |
1 files changed, 112 insertions, 104 deletions
diff --git a/app/src/monit.c b/app/src/monit.c index a169ab7..e543b0f 100644 --- a/app/src/monit.c +++ b/app/src/monit.c @@ -1,11 +1,12 @@ /* \brief 应用状态监测数据输出 -* -* \author Lu Qiuwen<[email protected]> -* \date 2016-11-30 -*/ + * + * \author Lu Qiuwen<[email protected]> + * \date 2016-11-30 + */ -#include <mrapp.h> #include <cJSON.h> +#include <mrapp.h> +#include <mrdp_trace.h> unsigned int g_monit_interval = 1; @@ -18,12 +19,12 @@ int vdev_instance_stats_get(struct vdev_instance * vdi, struct vdev_stat_info * stat_info->nr_rxstream = vdi->nr_rxstream; stat_info->nr_txstream = vdi->nr_txstream; - if(vdi->nr_rxstream > 0) + if (vdi->nr_rxstream > 0) { st_cons_rx = vnode_mirror_cons_stat_get(vdi->vnode_rx_cons); } - if(vdi->nr_txstream > 0) + if (vdi->nr_txstream > 0) { st_prod_tx = vnode_mirror_prod_stat_get(vdi->vnode_tx_prod); st_prod_ftx = vnode_mirror_prod_stat_get(vdi->vnode_ftx_prod); @@ -68,14 +69,14 @@ void vdev_instance_stats_last_get(struct vdev_instance * vdi, struct vdev_stat_i static cJSON * __create_uint64_array(const uint64_t * value, int nr_value) { - struct cJSON * uint64_array = cJSON_CreateArray(); - for (int i = 0; i < nr_value; i++) - cJSON_AddItemToArray(uint64_array, cJSON_CreateNumber(value[i])); - return uint64_array; + struct cJSON * uint64_array = cJSON_CreateArray(); + for (int i = 0; i < nr_value; i++) + cJSON_AddItemToArray(uint64_array, cJSON_CreateNumber(value[i])); + return uint64_array; } -static cJSON * __create_uint64_delta_array(const uint64_t * value_large, - const uint64_t * value_small, int nr_value, int interval) +static cJSON * __create_uint64_delta_array(const uint64_t * value_large, const uint64_t * value_small, int nr_value, + int interval) { struct cJSON * uint64_array = cJSON_CreateArray(); for (int i = 0; i < nr_value; i++) @@ -108,19 +109,21 @@ static cJSON * __create_vdev_stats(struct vdev_instance * vdi) /* Gauge */ struct cJSON * j_vdev_gauge = cJSON_CreateObject(); -#define __JOIN_VDEV_VALUE_STATS_ITEM(item, streams) do { \ - cJSON_AddItemToObject(j_vdev_value, #item, \ - __create_uint64_array(_stat_info.item, streams)); \ -} while(0) - -#define __JOIN_VDEV_VALUE_BYTES_TO_BITS_STAT_ITEM(item, streams) do { \ - uint64_t __bits_item[MR_SID_MAX]; \ - for (int i = 0; i < streams; i++) \ - __bits_item[i] = _stat_info.item[i] * 8; \ - \ - cJSON_AddItemToObject(j_vdev_value, #item, __create_uint64_array( \ - __bits_item, streams)); \ -} while(0) +#define __JOIN_VDEV_VALUE_STATS_ITEM(item, streams) \ + do \ + { \ + cJSON_AddItemToObject(j_vdev_value, #item, __create_uint64_array(_stat_info.item, streams)); \ + } while (0) + +#define __JOIN_VDEV_VALUE_BYTES_TO_BITS_STAT_ITEM(item, streams) \ + do \ + { \ + uint64_t __bits_item[MR_SID_MAX]; \ + for (int i = 0; i < streams; i++) \ + __bits_item[i] = _stat_info.item[i] * 8; \ + \ + cJSON_AddItemToObject(j_vdev_value, #item, __create_uint64_array(__bits_item, streams)); \ + } while (0) __JOIN_VDEV_VALUE_STATS_ITEM(rx_on_line, nr_rx_stream); __JOIN_VDEV_VALUE_STATS_ITEM(rx_deliver, nr_rx_stream); @@ -142,25 +145,28 @@ static cJSON * __create_vdev_stats(struct vdev_instance * vdi) __JOIN_VDEV_VALUE_STATS_ITEM(ltx_missed, nr_tx_stream); __JOIN_VDEV_VALUE_BYTES_TO_BITS_STAT_ITEM(ltx_total_len, nr_tx_stream); -#define __JOIN_VDEV_SPEED_STATS_ITEM(item, streams) do { \ - cJSON_AddItemToObject(j_vdev_speed, #item, \ - __create_uint64_delta_array(_stat_info.item, \ - _stat_info_last.item, streams, g_monit_interval)); \ -} while(0) - -#define __JOIN_VDEV_SPEED_BYTES_TO_BITS_STAT_ITEM(item, streams) do { \ - uint64_t __bits_item[MR_SID_MAX]; \ - for (int i = 0; i < streams; i++) \ - __bits_item[i] = _stat_info.item[i] * 8; \ - \ - uint64_t __bits_item_last[MR_SID_MAX]; \ - for (int i = 0; i < streams; i++) \ - __bits_item_last[i] = _stat_info_last.item[i] * 8; \ - \ - cJSON_AddItemToObject(j_vdev_speed, #item, \ - __create_uint64_delta_array(__bits_item, \ - __bits_item_last, streams, g_monit_interval)); \ -} while(0) +#define __JOIN_VDEV_SPEED_STATS_ITEM(item, streams) \ + do \ + { \ + cJSON_AddItemToObject( \ + j_vdev_speed, #item, \ + __create_uint64_delta_array(_stat_info.item, _stat_info_last.item, streams, g_monit_interval)); \ + } while (0) + +#define __JOIN_VDEV_SPEED_BYTES_TO_BITS_STAT_ITEM(item, streams) \ + do \ + { \ + uint64_t __bits_item[MR_SID_MAX]; \ + for (int i = 0; i < streams; i++) \ + __bits_item[i] = _stat_info.item[i] * 8; \ + \ + uint64_t __bits_item_last[MR_SID_MAX]; \ + for (int i = 0; i < streams; i++) \ + __bits_item_last[i] = _stat_info_last.item[i] * 8; \ + \ + cJSON_AddItemToObject(j_vdev_speed, #item, \ + __create_uint64_delta_array(__bits_item, __bits_item_last, streams, g_monit_interval)); \ + } while (0) __JOIN_VDEV_SPEED_STATS_ITEM(rx_on_line, nr_rx_stream); __JOIN_VDEV_SPEED_STATS_ITEM(rx_deliver, nr_rx_stream); @@ -183,14 +189,14 @@ static cJSON * __create_vdev_stats(struct vdev_instance * vdi) __JOIN_VDEV_SPEED_BYTES_TO_BITS_STAT_ITEM(ltx_total_len, nr_tx_stream); cJSON * rx_q_len_array = cJSON_CreateArray(); - for(unsigned int i = 0; i < nr_rx_stream; i++) + for (unsigned int i = 0; i < nr_rx_stream; i++) { cJSON_AddItemToArray(rx_q_len_array, cJSON_CreateNumber(_stat_info.rx_q_len_max[i])); } cJSON_AddItemToObject(j_vdev_gauge, "rx_q_len", rx_q_len_array); cJSON * rx_q_avg_len_array = cJSON_CreateArray(); - for(unsigned int i = 0; i < nr_rx_stream; i++) + for (unsigned int i = 0; i < nr_rx_stream; i++) { cJSON_AddItemToArray(rx_q_avg_len_array, cJSON_CreateNumber(_stat_info.rx_q_len_avg_max[i])); } @@ -207,35 +213,36 @@ static cJSON * __create_vdev_stats(struct vdev_instance * vdi) // 运行时原始报文设备统计计数 static cJSON * monit_vdev(struct mr_instance * instance) { - struct cJSON * j_vdev_array = cJSON_CreateArray(); - for(int i = 0; i < instance->nr_vdevs; i++) - { + struct cJSON * j_vdev_array = cJSON_CreateArray(); + for (int i = 0; i < instance->nr_vdevs; i++) + { struct mr_vdev * vdev = &instance->vdevs[i]; - if (vdev == NULL) continue; - - 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_vdev_array, j_vdev); - } + if (vdev == NULL) + continue; + + 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_vdev_array, j_vdev); + } - return j_vdev_array; + return j_vdev_array; } static cJSON * monit_app_stat(struct mr_instance * instance) { struct cJSON * j_root = cJSON_CreateObject(); -#define _trans_app_stat(item) \ - uint64_t __trans_##item[MR_SID_MAX]; \ - for(int i = 0; i < instance->nr_dataplane_thread; i++) \ - { \ - __trans_##item[i] = instance->stat[i].item; \ - } \ +#define _trans_app_stat(item) \ + uint64_t __trans_##item[MR_SID_MAX]; \ + for (int i = 0; i < instance->nr_dataplane_thread; i++) \ + { \ + __trans_##item[i] = instance->stat[i].item; \ + } -#define _trans_app_stat_array(item) __trans_##item +#define _trans_app_stat_array(item) __trans_##item _trans_app_stat(packet_recv_count); _trans_app_stat(packet_recv_length); @@ -252,17 +259,17 @@ static cJSON * monit_app_stat(struct mr_instance * instance) uint64_t __trans_mbuf_in_use_count[MR_SID_MAX]; for (int i = 0; i < instance->nr_dataplane_thread; i++) { - __trans_mbuf_in_use_count[i] = __trans_packet_recv_count[i] + - __trans_mbuf_alloc_count[i] - __trans_packet_send_count[i] - - __trans_mbuf_free_count[i]; + __trans_mbuf_in_use_count[i] = __trans_packet_recv_count[i] + __trans_mbuf_alloc_count[i] - + __trans_packet_send_count[i] - __trans_mbuf_free_count[i]; } -#define _json_generate(item) \ -do { \ - cJSON_AddItemToObject(j_root, #item, __create_uint64_array( \ - _trans_app_stat_array(item), instance->nr_dataplane_thread)); \ -} while(0) \ - +#define _json_generate(item) \ + do \ + { \ + cJSON_AddItemToObject(j_root, #item, \ + __create_uint64_array(_trans_app_stat_array(item), instance->nr_dataplane_thread)); \ + } while (0) + _json_generate(packet_recv_count); _json_generate(packet_recv_length); _json_generate(packet_send_count); @@ -282,45 +289,46 @@ do { \ return j_root; } - 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; + struct cJSON * j_root = cJSON_CreateObject(); + cJSON_AddStringToObject(j_root, "symbol", instance->appsym); + return j_root; } static cJSON * monit_root(struct mr_instance * instance) { - struct cJSON * j_root = cJSON_CreateObject(); - cJSON_AddItemToObject(j_root, "appinfo", monit_app_info(instance)); - cJSON_AddItemToObject(j_root, "raw", monit_vdev(instance)); + struct cJSON * j_root = cJSON_CreateObject(); + cJSON_AddItemToObject(j_root, "appinfo", monit_app_info(instance)); + cJSON_AddItemToObject(j_root, "raw", monit_vdev(instance)); cJSON_AddItemToObject(j_root, "appstat", monit_app_stat(instance)); + cJSON_AddItemToObject(j_root, "dp-trace-path", marsio_dp_trace_monit_loop(instance)); + + if (instance->neigh != NULL) + { + struct cJSON * j_monit_neigh = neighbour_manager_monit(instance->neigh); + cJSON_AddItemToObject(j_root, "neigh", j_monit_neigh); + } - if (instance->neigh != NULL) - { - struct cJSON * j_monit_neigh = neighbour_manager_monit(instance->neigh); - cJSON_AddItemToObject(j_root, "neigh", j_monit_neigh); - } - - return j_root; + return j_root; } int mrapp_monit_loop(struct mr_instance * instance) { - cJSON * j_root = monit_root(instance); - char * str_json_print = cJSON_Print(j_root); - - FILE * fp_monit = fopen(instance->monit_file_path, "w"); - if (fp_monit == NULL) - { - MR_WARNING("monit file %s open failed, cannot dump program stat info : %s", - instance->monit_file_path, strerror(errno)); return 0; - } - - fprintf(fp_monit, "%s", str_json_print); - cJSON_Delete(j_root); + cJSON * j_root = monit_root(instance); + char * str_json_print = cJSON_Print(j_root); + + FILE * fp_monit = fopen(instance->monit_file_path, "w"); + if (fp_monit == NULL) + { + MR_WARNING("monit file %s open failed, cannot dump program stat info : %s", instance->monit_file_path, + strerror(errno)); + return 0; + } + + fprintf(fp_monit, "%s", str_json_print); + cJSON_Delete(j_root); free(str_json_print); - fclose(fp_monit); - return 0; + fclose(fp_monit); + return 0; }
\ No newline at end of file |
