Răsfoiți Sursa

stats: add knet 'handle' stats

knet handle stats show compression and crypto statistics. With these
you can see the effectiveness of compression and the overheads of both
crypto and compression.

Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
Reviewed-by: Jan Friesse <jfriesse@redhat.com>
Christine Caulfield 8 ani în urmă
părinte
comite
ed235edfe3
3 a modificat fișierele cu 51 adăugiri și 1 ștergeri
  1. 37 1
      exec/stats.c
  2. 11 0
      exec/totemknet.c
  3. 3 0
      include/corosync/totem/totemstats.h

+ 37 - 1
exec/stats.c

@@ -62,7 +62,7 @@ static qb_map_t *stats_map;
 
 
 /* Convert iterator number to text and a stats pointer */
 /* Convert iterator number to text and a stats pointer */
 struct cs_stats_conv {
 struct cs_stats_conv {
-	enum {STAT_PG, STAT_SRP, STAT_KNET, STAT_IPCSC, STAT_IPCSG} type;
+	enum {STAT_PG, STAT_SRP, STAT_KNET, STAT_KNET_HANDLE, STAT_IPCSC, STAT_IPCSG} type;
 	const char *name;
 	const char *name;
 	const size_t offset;
 	const size_t offset;
 	const icmap_value_types_t value_type;
 	const icmap_value_types_t value_type;
@@ -145,6 +145,29 @@ struct cs_stats_conv cs_knet_stats[] = {
 	{ STAT_KNET, "down_count",       offsetof(struct knet_link_status, stats.down_count),       ICMAP_VALUETYPE_UINT32},
 	{ STAT_KNET, "down_count",       offsetof(struct knet_link_status, stats.down_count),       ICMAP_VALUETYPE_UINT32},
 	{ STAT_KNET, "up_count",         offsetof(struct knet_link_status, stats.up_count),         ICMAP_VALUETYPE_UINT32},
 	{ STAT_KNET, "up_count",         offsetof(struct knet_link_status, stats.up_count),         ICMAP_VALUETYPE_UINT32},
 };
 };
+struct cs_stats_conv cs_knet_handle_stats[] = {
+	{ STAT_KNET_HANDLE, "tx_uncompressed_packets",      offsetof(struct knet_handle_stats, tx_uncompressed_packets),      ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "tx_compressed_packets",        offsetof(struct knet_handle_stats, tx_compressed_packets),        ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "tx_compressed_original_bytes", offsetof(struct knet_handle_stats, tx_compressed_original_bytes), ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "tx_compressed_size_bytes",     offsetof(struct knet_handle_stats, tx_compressed_size_bytes),     ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "tx_compress_time_min",         offsetof(struct knet_handle_stats, tx_compress_time_min),         ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "tx_compress_time_max",         offsetof(struct knet_handle_stats, tx_compress_time_max),         ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "tx_compress_time_ave",         offsetof(struct knet_handle_stats, tx_compress_time_ave),         ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "rx_compressed_packets",        offsetof(struct knet_handle_stats, rx_compressed_packets),        ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "rx_compressed_original_bytes", offsetof(struct knet_handle_stats, rx_compressed_original_bytes), ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "rx_compressed_size_bytes",     offsetof(struct knet_handle_stats, rx_compressed_size_bytes),     ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "rx_compress_time_min",         offsetof(struct knet_handle_stats, rx_compress_time_min),         ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "rx_compress_time_max",         offsetof(struct knet_handle_stats, rx_compress_time_max),         ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "rx_compress_time_ave",         offsetof(struct knet_handle_stats, rx_compress_time_ave),         ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "tx_crypt_time_min",            offsetof(struct knet_handle_stats, tx_crypt_time_min),            ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "tx_crypt_time_max",            offsetof(struct knet_handle_stats, tx_crypt_time_max),            ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "tx_crypt_time_ave",            offsetof(struct knet_handle_stats, tx_crypt_time_ave),            ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "tx_crypt_byte_overhead",       offsetof(struct knet_handle_stats, tx_crypt_byte_overhead),       ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "rx_crypt_time_min",            offsetof(struct knet_handle_stats, rx_crypt_time_min),            ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "rx_crypt_time_max",            offsetof(struct knet_handle_stats, rx_crypt_time_max),            ICMAP_VALUETYPE_UINT64},
+	{ STAT_KNET_HANDLE, "rx_crypt_time_ave",            offsetof(struct knet_handle_stats, rx_crypt_time_ave),            ICMAP_VALUETYPE_UINT64},
+};
+
 struct cs_stats_conv cs_ipcs_conn_stats[] = {
 struct cs_stats_conv cs_ipcs_conn_stats[] = {
 	{ STAT_IPCSC, "queueing",        offsetof(struct ipcs_conn_stats, cnx.queuing),          ICMAP_VALUETYPE_INT32},
 	{ STAT_IPCSC, "queueing",        offsetof(struct ipcs_conn_stats, cnx.queuing),          ICMAP_VALUETYPE_INT32},
 	{ STAT_IPCSC, "queued",          offsetof(struct ipcs_conn_stats, cnx.queued),           ICMAP_VALUETYPE_UINT32},
 	{ STAT_IPCSC, "queued",          offsetof(struct ipcs_conn_stats, cnx.queued),           ICMAP_VALUETYPE_UINT32},
@@ -168,6 +191,7 @@ struct cs_stats_conv cs_ipcs_global_stats[] = {
 #define NUM_PG_STATS (sizeof(cs_pg_stats) / sizeof(struct cs_stats_conv))
 #define NUM_PG_STATS (sizeof(cs_pg_stats) / sizeof(struct cs_stats_conv))
 #define NUM_SRP_STATS (sizeof(cs_srp_stats) / sizeof(struct cs_stats_conv))
 #define NUM_SRP_STATS (sizeof(cs_srp_stats) / sizeof(struct cs_stats_conv))
 #define NUM_KNET_STATS (sizeof(cs_knet_stats) / sizeof(struct cs_stats_conv))
 #define NUM_KNET_STATS (sizeof(cs_knet_stats) / sizeof(struct cs_stats_conv))
+#define NUM_KNET_HANDLE_STATS (sizeof(cs_knet_handle_stats) / sizeof(struct cs_stats_conv))
 #define NUM_IPCSC_STATS (sizeof(cs_ipcs_conn_stats) / sizeof(struct cs_stats_conv))
 #define NUM_IPCSC_STATS (sizeof(cs_ipcs_conn_stats) / sizeof(struct cs_stats_conv))
 #define NUM_IPCSG_STATS (sizeof(cs_ipcs_global_stats) / sizeof(struct cs_stats_conv))
 #define NUM_IPCSG_STATS (sizeof(cs_ipcs_global_stats) / sizeof(struct cs_stats_conv))
 
 
@@ -256,6 +280,10 @@ cs_error_t stats_map_init(const struct corosync_api_v1 *corosync_api)
 		sprintf(param, "stats.ipcs.%s", cs_ipcs_global_stats[i].name);
 		sprintf(param, "stats.ipcs.%s", cs_ipcs_global_stats[i].name);
 		stats_add_entry(param, &cs_ipcs_global_stats[i]);
 		stats_add_entry(param, &cs_ipcs_global_stats[i]);
 	}
 	}
+	for (i = 0; i<NUM_KNET_HANDLE_STATS; i++) {
+		sprintf(param, "stats.knet.handle.%s", cs_knet_handle_stats[i].name);
+		stats_add_entry(param, &cs_knet_handle_stats[i]);
+	}
 
 
 	/* KNET and IPCS stats are added when appropriate */
 	/* KNET and IPCS stats are added when appropriate */
 	return CS_OK;
 	return CS_OK;
@@ -272,6 +300,7 @@ cs_error_t stats_map_get(const char *key_name,
 	struct knet_link_status link_status;
 	struct knet_link_status link_status;
 	struct ipcs_conn_stats ipcs_conn_stats;
 	struct ipcs_conn_stats ipcs_conn_stats;
 	struct ipcs_global_stats ipcs_global_stats;
 	struct ipcs_global_stats ipcs_global_stats;
+	struct knet_handle_stats knet_handle_stats;
 	int res;
 	int res;
 	int nodeid;
 	int nodeid;
 	int link_no;
 	int link_no;
@@ -294,6 +323,13 @@ cs_error_t stats_map_get(const char *key_name,
 			pg_stats = api->totem_get_stats();
 			pg_stats = api->totem_get_stats();
 			stats_map_set_value(statinfo, pg_stats->srp, value, value_len, type);
 			stats_map_set_value(statinfo, pg_stats->srp, value, value_len, type);
 			break;
 			break;
+		case STAT_KNET_HANDLE:
+			res = totemknet_handle_get_stats(&knet_handle_stats);
+			if (res) {
+				return res;
+			}
+			stats_map_set_value(statinfo, &knet_handle_stats, value, value_len, type);
+			break;
 		case STAT_KNET:
 		case STAT_KNET:
 			if (sscanf(key_name, "stats.knet.node%d.link%d", &nodeid, &link_no) != 2) {
 			if (sscanf(key_name, "stats.knet.node%d.link%d", &nodeid, &link_no) != 2) {
 				return CS_ERR_NOT_EXIST;
 				return CS_ERR_NOT_EXIST;

+ 11 - 0
exec/totemknet.c

@@ -1273,6 +1273,17 @@ int totemknet_link_get_status (
 	return (ret);
 	return (ret);
 }
 }
 
 
+int totemknet_handle_get_stats (
+	struct knet_handle_stats *stats)
+{
+	/* We are probably not using knet */
+	if (!global_instance) {
+		return CS_ERR_NOT_EXIST;
+	}
+
+	return knet_handle_get_stats(global_instance->knet_handle, stats, sizeof(struct knet_handle_stats));
+}
+
 static void timer_function_merge_detect_timeout (
 static void timer_function_merge_detect_timeout (
 	void *data)
 	void *data)
 {
 {

+ 3 - 0
include/corosync/totem/totemstats.h

@@ -102,6 +102,9 @@ extern int totemknet_link_get_status (
 	knet_node_id_t node, uint8_t link,
 	knet_node_id_t node, uint8_t link,
 	struct knet_link_status *status);
 	struct knet_link_status *status);
 
 
+int totemknet_handle_get_stats (
+	struct knet_handle_stats *stats);
+
 void stats_knet_add_member(knet_node_id_t nodeid, uint8_t link);
 void stats_knet_add_member(knet_node_id_t nodeid, uint8_t link);
 
 
 void stats_knet_del_member(knet_node_id_t nodeid, uint8_t link);
 void stats_knet_del_member(knet_node_id_t nodeid, uint8_t link);