aboutsummaryrefslogtreecommitdiff
path: root/src/protocol/pair1
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2020-11-11 21:29:54 -0800
committerGarrett D'Amore <garrett@damore.org>2020-11-11 23:51:13 -0800
commit66ff33813a8cd9d4cba96280bb613762fb0c2ce2 (patch)
tree4d9230b87715ebb1ff876894cd805ee4da42eccb /src/protocol/pair1
parent53f20bbc4a2bd0d333e0307640883a778de31e2b (diff)
downloadnng-66ff33813a8cd9d4cba96280bb613762fb0c2ce2.tar.gz
nng-66ff33813a8cd9d4cba96280bb613762fb0c2ce2.tar.bz2
nng-66ff33813a8cd9d4cba96280bb613762fb0c2ce2.zip
fixes #1323 stats framework is *way* to heavy
This should reduce the amount of copying, and the overall size used by pipes and other objects quite a bit. (On my system, the sizeof nni_pipe shrank by 400 bytes, for example.)
Diffstat (limited to 'src/protocol/pair1')
-rw-r--r--src/protocol/pair1/pair.c141
-rw-r--r--src/protocol/pair1/pair1_poly.c121
2 files changed, 177 insertions, 85 deletions
diff --git a/src/protocol/pair1/pair.c b/src/protocol/pair1/pair.c
index 0492119a..cc726306 100644
--- a/src/protocol/pair1/pair.c
+++ b/src/protocol/pair1/pair.c
@@ -15,7 +15,11 @@
// Pair protocol. The PAIRv1 protocol is a simple 1:1 messaging pattern.
-#define BUMP_STAT(x) nni_stat_inc_atomic(x, 1)
+#ifdef NNG_ENABLE_STATS
+#define BUMP_STAT(x) nni_stat_inc(x, 1)
+#else
+#define BUMP_STAT(x)
+#endif
typedef struct pair1_pipe pair1_pipe;
typedef struct pair1_sock pair1_sock;
@@ -37,14 +41,16 @@ struct pair1_sock {
nni_id_map pipes;
nni_list plist;
bool started;
- nni_stat_item stat_poly;
- nni_stat_item stat_raw;
- nni_stat_item stat_reject_mismatch;
- nni_stat_item stat_reject_already;
- nni_stat_item stat_ttl_drop;
- nni_stat_item stat_rx_malformed;
- nni_stat_item stat_tx_malformed;
- nni_stat_item stat_tx_drop;
+#ifdef NNG_ENABLE_STATS
+ nni_stat_item stat_poly;
+ nni_stat_item stat_raw;
+ nni_stat_item stat_reject_mismatch;
+ nni_stat_item stat_reject_already;
+ nni_stat_item stat_ttl_drop;
+ nni_stat_item stat_rx_malformed;
+ nni_stat_item stat_tx_malformed;
+ nni_stat_item stat_tx_drop;
+#endif
#ifdef NNG_TEST_LIB
bool inject_header;
#endif
@@ -70,6 +76,16 @@ pair1_sock_fini(void *arg)
nni_mtx_fini(&s->mtx);
}
+#ifdef NNG_ENABLE_STATS
+static void
+pair1_add_sock_stat(
+ pair1_sock *s, nni_stat_item *item, const nni_stat_info *info)
+{
+ nni_stat_init(item, info);
+ nni_sock_add_stat(s->sock, item);
+}
+#endif
+
static int
pair1_sock_init_impl(void *arg, nni_sock *sock, bool raw)
{
@@ -80,50 +96,81 @@ pair1_sock_init_impl(void *arg, nni_sock *sock, bool raw)
// Raw mode uses this.
nni_mtx_init(&s->mtx);
+ s->sock = sock;
- nni_stat_init_bool(
- &s->stat_poly, "polyamorous", "polyamorous mode?", false);
- nni_sock_add_stat(sock, &s->stat_poly);
-
- nni_stat_init_bool(&s->stat_raw, "raw", "raw mode?", raw);
- nni_sock_add_stat(sock, &s->stat_raw);
-
- nni_stat_init_atomic(&s->stat_reject_mismatch, "mismatch",
- "pipes rejected (protocol mismatch)");
- nni_sock_add_stat(sock, &s->stat_reject_mismatch);
-
- nni_stat_init_atomic(&s->stat_reject_already, "already",
- "pipes rejected (already connected)");
- nni_sock_add_stat(sock, &s->stat_reject_already);
-
- nni_stat_init_atomic(&s->stat_ttl_drop, "ttl_drop",
- "messages dropped due to too many hops");
- nni_stat_set_unit(&s->stat_ttl_drop, NNG_UNIT_MESSAGES);
- nni_sock_add_stat(sock, &s->stat_ttl_drop);
-
- // This can only increment in polyamorous mode.
- nni_stat_init_atomic(
- &s->stat_tx_drop, "tx_drop", "messages dropped undeliverable");
- nni_stat_set_unit(&s->stat_tx_drop, NNG_UNIT_MESSAGES);
- nni_sock_add_stat(sock, &s->stat_tx_drop);
-
- nni_stat_init_atomic(&s->stat_rx_malformed, "rx_malformed",
- "malformed messages received");
- nni_stat_set_unit(&s->stat_rx_malformed, NNG_UNIT_MESSAGES);
- nni_sock_add_stat(sock, &s->stat_rx_malformed);
+#ifdef NNG_ENABLE_STATS
+ static const nni_stat_info poly_info = {
+ .si_name = "poly",
+ .si_desc = "polyamorous mode?",
+ .si_type = NNG_STAT_BOOLEAN,
+ };
+ static const nni_stat_info raw_info = {
+ .si_name = "raw",
+ .si_desc = "raw mode?",
+ .si_type = NNG_STAT_BOOLEAN,
+ };
+ static const nni_stat_info mismatch_info = {
+ .si_name = "mismatch",
+ .si_desc = "pipes rejected (protocol mismatch)",
+ .si_type = NNG_STAT_COUNTER,
+ .si_atomic = true,
+ };
+ static const nni_stat_info already_info = {
+ .si_name = "already",
+ .si_desc = "pipes rejected (already connected)",
+ .si_type = NNG_STAT_COUNTER,
+ .si_atomic = true,
+ };
+ static const nni_stat_info ttl_drop_info = {
+ .si_name = "ttl_drop",
+ .si_desc = "messages dropped due to too many hops",
+ .si_type = NNG_STAT_COUNTER,
+ .si_unit = NNG_UNIT_MESSAGES,
+ .si_atomic = true,
+ };
+ static const nni_stat_info tx_drop_info = {
+ .si_name = "tx_drop",
+ .si_desc = "messages dropped undeliverable",
+ .si_type = NNG_STAT_COUNTER,
+ .si_unit = NNG_UNIT_MESSAGES,
+ .si_atomic = true,
+ };
+ static const nni_stat_info rx_malformed_info = {
+ .si_name = "rx_malformed",
+ .si_desc = "malformed messages received",
+ .si_type = NNG_STAT_COUNTER,
+ .si_unit = NNG_UNIT_MESSAGES,
+ .si_atomic = true,
+ };
+ static const nni_stat_info tx_malformed_info = {
+ .si_name = "tx_malformed",
+ .si_desc = "malformed messages not sent",
+ .si_type = NNG_STAT_COUNTER,
+ .si_unit = NNG_UNIT_MESSAGES,
+ .si_atomic = true,
+ };
+
+ pair1_add_sock_stat(s, &s->stat_poly, &poly_info);
+ pair1_add_sock_stat(s, &s->stat_raw, &raw_info);
+ pair1_add_sock_stat(s, &s->stat_reject_mismatch, &mismatch_info);
+ pair1_add_sock_stat(s, &s->stat_reject_already, &already_info);
+ pair1_add_sock_stat(s, &s->stat_ttl_drop, &ttl_drop_info);
+ pair1_add_sock_stat(s, &s->stat_tx_drop, &tx_drop_info);
+ pair1_add_sock_stat(s, &s->stat_rx_malformed, &rx_malformed_info);
- nni_stat_init_atomic(&s->stat_tx_malformed, "tx_malformed",
- "malformed messages not sent");
- nni_stat_set_unit(&s->stat_tx_malformed, NNG_UNIT_MESSAGES);
if (raw) {
// This stat only makes sense in raw mode.
- nni_sock_add_stat(sock, &s->stat_tx_malformed);
+ pair1_add_sock_stat(
+ s, &s->stat_tx_malformed, &tx_malformed_info);
}
- s->sock = sock;
- s->raw = raw;
- s->uwq = nni_sock_sendq(sock);
- s->urq = nni_sock_recvq(sock);
+ nni_stat_set_bool(&s->stat_raw, raw);
+ nni_stat_set_bool(&s->stat_poly, false);
+#endif
+
+ s->raw = raw;
+ s->uwq = nni_sock_sendq(sock);
+ s->urq = nni_sock_recvq(sock);
nni_atomic_init(&s->ttl);
nni_atomic_set(&s->ttl, 8);
diff --git a/src/protocol/pair1/pair1_poly.c b/src/protocol/pair1/pair1_poly.c
index fc1bbf6a..6c16745c 100644
--- a/src/protocol/pair1/pair1_poly.c
+++ b/src/protocol/pair1/pair1_poly.c
@@ -21,7 +21,11 @@
// THIS FEATURE IS DEPRECATED. We discourage use in new applications.
-#define BUMP_STAT(x) nni_stat_inc_atomic(x, 1)
+#ifdef NNG_ENABLE_STATS
+#define BUMP_STAT(x) nni_stat_inc(x, 1)
+#else
+#define BUMP_STAT(x)
+#endif
typedef struct pair1poly_pipe pair1poly_pipe;
typedef struct pair1poly_sock pair1poly_sock;
@@ -76,6 +80,16 @@ pair1poly_sock_fini(void *arg)
nni_mtx_fini(&s->mtx);
}
+#ifdef NNG_ENABLE_STATS
+static void
+pair1_add_sock_stat(
+ pair1poly_sock *s, nni_stat_item *item, const nni_stat_info *info)
+{
+ nni_stat_init(item, info);
+ nni_sock_add_stat(s->sock, item);
+}
+#endif
+
static int
pair1poly_sock_init(void *arg, nni_sock *sock)
{
@@ -83,49 +97,80 @@ pair1poly_sock_init(void *arg, nni_sock *sock)
nni_id_map_init(&s->pipes, 0, 0, false);
NNI_LIST_INIT(&s->plist, pair1poly_pipe, node);
+ s->sock = sock;
// Raw mode uses this.
nni_mtx_init(&s->mtx);
nni_aio_init(&s->aio_get, pair1poly_sock_get_cb, s);
- nni_stat_init_bool(
- &s->stat_poly, "polyamorous", "polyamorous mode?", true);
- nni_sock_add_stat(sock, &s->stat_poly);
-
- nni_stat_init_bool(&s->stat_raw, "raw", "raw mode?", false);
-
- nni_stat_init_atomic(&s->stat_reject_mismatch, "mismatch",
- "pipes rejected (protocol mismatch)");
- nni_sock_add_stat(sock, &s->stat_reject_mismatch);
-
- nni_stat_init_atomic(&s->stat_reject_already, "already",
- "pipes rejected (already connected)");
- nni_sock_add_stat(sock, &s->stat_reject_already);
-
- nni_stat_init_atomic(&s->stat_ttl_drop, "ttl_drop",
- "messages dropped due to too many hops");
- nni_stat_set_unit(&s->stat_ttl_drop, NNG_UNIT_MESSAGES);
- nni_sock_add_stat(sock, &s->stat_ttl_drop);
-
- // This can only increment in polyamorous mode.
- nni_stat_init_atomic(
- &s->stat_tx_drop, "tx_drop", "messages dropped undeliverable");
- nni_stat_set_unit(&s->stat_tx_drop, NNG_UNIT_MESSAGES);
- nni_sock_add_stat(sock, &s->stat_tx_drop);
-
- nni_stat_init_atomic(&s->stat_rx_malformed, "rx_malformed",
- "malformed messages received");
- nni_stat_set_unit(&s->stat_rx_malformed, NNG_UNIT_MESSAGES);
- nni_sock_add_stat(sock, &s->stat_rx_malformed);
-
- nni_stat_init_atomic(&s->stat_tx_malformed, "tx_malformed",
- "malformed messages not sent");
- nni_stat_set_unit(&s->stat_tx_malformed, NNG_UNIT_MESSAGES);
-
- s->sock = sock;
- s->uwq = nni_sock_sendq(sock);
- s->urq = nni_sock_recvq(sock);
+#ifdef NNG_ENABLE_STATS
+ static const nni_stat_info poly_info = {
+ .si_name = "poly",
+ .si_desc = "polyamorous mode?",
+ .si_type = NNG_STAT_BOOLEAN,
+ };
+ static const nni_stat_info raw_info = {
+ .si_name = "raw",
+ .si_desc = "raw mode?",
+ .si_type = NNG_STAT_BOOLEAN,
+ };
+ static const nni_stat_info mismatch_info = {
+ .si_name = "mismatch",
+ .si_desc = "pipes rejected (protocol mismatch)",
+ .si_type = NNG_STAT_COUNTER,
+ .si_atomic = true,
+ };
+ static const nni_stat_info already_info = {
+ .si_name = "already",
+ .si_desc = "pipes rejected (already connected)",
+ .si_type = NNG_STAT_COUNTER,
+ .si_atomic = true,
+ };
+ static const nni_stat_info ttl_drop_info = {
+ .si_name = "ttl_drop",
+ .si_desc = "messages dropped due to too many hops",
+ .si_type = NNG_STAT_COUNTER,
+ .si_unit = NNG_UNIT_MESSAGES,
+ .si_atomic = true,
+ };
+ static const nni_stat_info tx_drop_info = {
+ .si_name = "tx_drop",
+ .si_desc = "messages dropped undeliverable",
+ .si_type = NNG_STAT_COUNTER,
+ .si_unit = NNG_UNIT_MESSAGES,
+ .si_atomic = true,
+ };
+ static const nni_stat_info rx_malformed_info = {
+ .si_name = "rx_malformed",
+ .si_desc = "malformed messages received",
+ .si_type = NNG_STAT_COUNTER,
+ .si_unit = NNG_UNIT_MESSAGES,
+ .si_atomic = true,
+ };
+ static const nni_stat_info tx_malformed_info = {
+ .si_name = "tx_malformed",
+ .si_desc = "malformed messages not sent",
+ .si_type = NNG_STAT_COUNTER,
+ .si_unit = NNG_UNIT_MESSAGES,
+ .si_atomic = true,
+ };
+
+ pair1_add_sock_stat(s, &s->stat_poly, &poly_info);
+ pair1_add_sock_stat(s, &s->stat_raw, &raw_info);
+ pair1_add_sock_stat(s, &s->stat_reject_mismatch, &mismatch_info);
+ pair1_add_sock_stat(s, &s->stat_reject_already, &already_info);
+ pair1_add_sock_stat(s, &s->stat_ttl_drop, &ttl_drop_info);
+ pair1_add_sock_stat(s, &s->stat_tx_drop, &tx_drop_info);
+ pair1_add_sock_stat(s, &s->stat_rx_malformed, &rx_malformed_info);
+ pair1_add_sock_stat(s, &s->stat_tx_malformed, &tx_malformed_info);
+
+ nni_stat_set_bool(&s->stat_raw, false);
+ nni_stat_set_bool(&s->stat_poly, true);
+#endif
+
+ s->uwq = nni_sock_sendq(sock);
+ s->urq = nni_sock_recvq(sock);
nni_atomic_init(&s->ttl);
nni_atomic_set(&s->ttl, 8);