]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Stats for discard-timeout and wait-limit (#1159)
authorWouter Wijngaards <wcawijngaards@users.noreply.github.com>
Fri, 1 Nov 2024 14:52:58 +0000 (15:52 +0100)
committerGitHub <noreply@github.com>
Fri, 1 Nov 2024 14:52:58 +0000 (15:52 +0100)
* - Stats num.queries_discard_timeout and num.queries_wait_limit are used
  instead of the mesh dropped that of requests exceeded.

daemon/remote.c
daemon/stats.c
doc/unbound-control.8.in
libunbound/unbound.h
services/mesh.c
services/mesh.h
smallapp/unbound-control.c

index 8877cd19402bc767822c69213ec6a736b6240421..4d7cff4dbb5008d74011034f95796307a5fc6637 100644 (file)
@@ -707,6 +707,10 @@ print_stats(RES* ssl, const char* nm, struct ub_stats_info* s)
                (unsigned long)s->svr.num_queries_cookie_client)) return 0;
        if(!ssl_printf(ssl, "%s.num.queries_cookie_invalid"SQ"%lu\n", nm,
                (unsigned long)s->svr.num_queries_cookie_invalid)) return 0;
+       if(!ssl_printf(ssl, "%s.num.queries_discard_timeout"SQ"%lu\n", nm,
+               (unsigned long)s->svr.num_queries_discard_timeout)) return 0;
+       if(!ssl_printf(ssl, "%s.num.queries_wait_limit"SQ"%lu\n", nm,
+               (unsigned long)s->svr.num_queries_wait_limit)) return 0;
        if(!ssl_printf(ssl, "%s.num.cachehits"SQ"%lu\n", nm,
                (unsigned long)(s->svr.num_queries
                        - s->svr.num_queries_missed_cache))) return 0;
index 0e17300a150e536fd883f9a860b215bb6bdc651b..a15ff8883fb095ba424667f651347f0ab3a2ea6a 100644 (file)
@@ -281,6 +281,10 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset)
                s->svr.rpz_action[i] += (long long)worker->env.mesh->rpz_action[i];
        timehist_export(worker->env.mesh->histogram, s->svr.hist,
                NUM_BUCKETS_HIST);
+       s->svr.num_queries_discard_timeout +=
+               (long long)worker->env.mesh->num_queries_discard_timeout;
+       s->svr.num_queries_wait_limit +=
+               (long long)worker->env.mesh->num_queries_wait_limit;
        /* values from outside network */
        s->svr.unwanted_replies = (long long)worker->back->unwanted_replies;
        s->svr.qtcp_outgoing = (long long)worker->back->num_tcp_outgoing;
@@ -451,6 +455,9 @@ void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a)
        total->svr.num_queries_cookie_valid += a->svr.num_queries_cookie_valid;
        total->svr.num_queries_cookie_client += a->svr.num_queries_cookie_client;
        total->svr.num_queries_cookie_invalid += a->svr.num_queries_cookie_invalid;
+       total->svr.num_queries_discard_timeout +=
+               a->svr.num_queries_discard_timeout;
+       total->svr.num_queries_wait_limit += a->svr.num_queries_wait_limit;
        total->svr.num_queries_missed_cache += a->svr.num_queries_missed_cache;
        total->svr.num_queries_prefetch += a->svr.num_queries_prefetch;
        total->svr.num_queries_timed_out += a->svr.num_queries_timed_out;
index 6470d544ce7026e71db460109a97e00d83085348..467374d33729ac287f0adbd1d29f7056f2c74703 100644 (file)
@@ -422,6 +422,12 @@ number of queries with a client part only DNS Cookie by thread
 .I threadX.num.queries_cookie_invalid
 number of queries with an invalid DNS Cookie by thread
 .TP
+.I threadX.num.queries_discard_timeout
+number of queries removed due to discard-timeout by thread
+.TP
+.I threadX.num.queries_wait_limit
+number of queries removed due to wait-limit by thread
+.TP
 .I threadX.num.cachehits
 number of queries that were successfully answered using a cache lookup
 .TP
@@ -511,6 +517,12 @@ summed over threads.
 .I total.num.queries_cookie_invalid
 summed over threads.
 .TP
+.I total.num.queries_discard_timeout
+summed over threads.
+.TP
+.I total.num.queries_wait_limit
+summed over threads.
+.TP
 .I total.num.cachehits
 summed over threads.
 .TP
index ef2c5c0679f6255156d71e011ded4c766fdf2dde..8a1625b9f9e4c34f2d593cd4c0bd1256c610d10e 100644 (file)
@@ -849,6 +849,10 @@ struct ub_server_stats {
        long long mem_quic;
        /** number of queries over (DNS over) QUIC */
        long long qquic;
+       /** number of queries removed due to discard-timeout */
+       long long num_queries_discard_timeout;
+       /** number of queries removed due to wait-limit */
+       long long num_queries_wait_limit;
 };
 
 /**
index d512ab3d32d4d7d22fabf2a0169d79ccc5f10838..156cde79198d5ba57eae7b67c4dc574d7d54f8f2 100644 (file)
@@ -214,6 +214,8 @@ mesh_create(struct module_stack* stack, struct module_env* env)
        mesh->stats_dropped = 0;
        mesh->ans_expired = 0;
        mesh->ans_cachedb = 0;
+       mesh->num_queries_discard_timeout = 0;
+       mesh->num_queries_wait_limit = 0;
        mesh->max_reply_states = env->cfg->num_queries_per_thread;
        mesh->max_forever_states = (mesh->max_reply_states+1)/2;
 #ifndef S_SPLINT_S
@@ -424,7 +426,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
                verbose(VERB_ALGO, "Too many queries waiting from the IP. "
                        "dropping incoming query.");
                comm_point_drop_reply(rep);
-               mesh->stats_dropped++;
+               mesh->num_queries_wait_limit++;
                return;
        }
        if(!unique)
@@ -1540,7 +1542,7 @@ void mesh_query_done(struct mesh_state* mstate)
                                http2_stream_remove_mesh_state(r->h2_stream);
                        comm_point_drop_reply(&r->query_reply);
                        mstate->reply_list = reply_list;
-                       mstate->s.env->mesh->stats_dropped++;
+                       mstate->s.env->mesh->num_queries_discard_timeout++;
                        continue;
                }
 
@@ -2042,6 +2044,8 @@ mesh_stats_clear(struct mesh_area* mesh)
        memset(&mesh->ans_rcode[0], 0, sizeof(size_t)*UB_STATS_RCODE_NUM);
        memset(&mesh->rpz_action[0], 0, sizeof(size_t)*UB_STATS_RPZ_ACTION_NUM);
        mesh->ans_nodata = 0;
+       mesh->num_queries_discard_timeout = 0;
+       mesh->num_queries_wait_limit = 0;
 }
 
 size_t
@@ -2270,7 +2274,7 @@ mesh_serve_expired_callback(void* arg)
                                http2_stream_remove_mesh_state(r->h2_stream);
                        comm_point_drop_reply(&r->query_reply);
                        mstate->reply_list = reply_list;
-                       mstate->s.env->mesh->stats_dropped++;
+                       mstate->s.env->mesh->num_queries_discard_timeout++;
                        continue;
                }
 
index 26ececbe62105c42c8914b39592e3731d2c39bc4..572c2e36fc3b60b51608d3af323401edd0b2c86f 100644 (file)
@@ -132,6 +132,10 @@ struct mesh_area {
        size_t ans_nodata;
        /** (extended stats) type of applied RPZ action */
        size_t rpz_action[UB_STATS_RPZ_ACTION_NUM];
+       /** stats, number of queries removed due to discard-timeout */
+       size_t num_queries_discard_timeout;
+       /** stats, number of queries removed due to wait-limit */
+       size_t num_queries_wait_limit;
 
        /** backup of query if other operations recurse and need the
         * network buffers */
index b8479e9ab66733b99d1b878101dcaca2be0a64ef..f274b9dbf17cd6503cb04ec43d7249678fdbb68a 100644 (file)
@@ -222,6 +222,9 @@ static void pr_stats(const char* nm, struct ub_stats_info* s)
                s->svr.num_queries_cookie_client);
        PR_UL_NM("num.queries_cookie_invalid",
                s->svr.num_queries_cookie_invalid);
+       PR_UL_NM("num.queries_discard_timeout",
+               s->svr.num_queries_discard_timeout);
+       PR_UL_NM("num.queries_wait_limit", s->svr.num_queries_wait_limit);
        PR_UL_NM("num.cachehits",
                s->svr.num_queries - s->svr.num_queries_missed_cache);
        PR_UL_NM("num.cachemiss", s->svr.num_queries_missed_cache);