]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Use statsmulti for opcodestats
authorAlessio Podda <alessio@isc.org>
Tue, 9 Sep 2025 15:54:36 +0000 (17:54 +0200)
committerAlessio Podda <alessio@isc.org>
Wed, 24 Sep 2025 15:01:49 +0000 (17:01 +0200)
lib/dns/include/dns/stats.h
lib/dns/stats.c
lib/ns/include/ns/server.h
lib/ns/server.c

index 7265bf3b45008a9a87c5eaca393c4f03195a5ad4..8a1de2312af01d08e13b96b573b22eeca9084579 100644 (file)
@@ -295,9 +295,9 @@ dns_rdatasetstats_create(isc_mem_t *mctx, dns_stats_t **statsp);
  */
 
 void
-dns_opcodestats_create(isc_mem_t *mctx, dns_stats_t **statsp);
+dns_opcodestats_create(isc_mem_t *mctx, isc_statsmulti_t **statsp);
 /*%<
- * Create a statistics counter structure per opcode.
+ * Create a statistics counter structure per opcode using statsmulti.
  *
  * Requires:
  *\li  'mctx' must be a valid memory context.
@@ -391,12 +391,12 @@ dns_rdatasetstats_decrement(dns_stats_t *stats, dns_rdatastatstype_t rrsettype);
  */
 
 void
-dns_opcodestats_increment(dns_stats_t *stats, dns_opcode_t code);
+dns_opcodestats_increment(isc_statsmulti_t *stats, dns_opcode_t code);
 /*%<
  * Increment the statistics counter for 'code'.
  *
  * Requires:
- *\li  'stats' is a valid dns_stats_t created by dns_opcodestats_create().
+ *\li  'stats' is a valid isc_statsmulti_t created by dns_opcodestats_create().
  */
 
 void
@@ -488,7 +488,7 @@ dns_dnssecsignstats_dump(dns_stats_t *stats, dnssecsignstats_type_t operation,
  */
 
 void
-dns_opcodestats_dump(dns_stats_t *stats, dns_opcodestats_dumper_t dump_fn,
+dns_opcodestats_dump(isc_statsmulti_t *stats, dns_opcodestats_dumper_t dump_fn,
                     void *arg, unsigned int options);
 /*%<
  * Dump the current statistics counters in a specified way.  For each counter
@@ -498,7 +498,7 @@ dns_opcodestats_dump(dns_stats_t *stats, dns_opcodestats_dumper_t dump_fn,
  * such counters are dumped.
  *
  * Requires:
- *\li  'stats' is a valid dns_stats_t created by dns_generalstats_create().
+ *\li  'stats' is a valid isc_statsmulti_t created by dns_opcodestats_create().
  */
 
 void
index c030f3db15898aa4f23f6a45aa6ced3af47fe08f..b0b7b48153c976256abcc7aaa4b12d890b902fe4 100644 (file)
@@ -210,10 +210,14 @@ dns_rdatasetstats_create(isc_mem_t *mctx, dns_stats_t **statsp) {
 }
 
 void
-dns_opcodestats_create(isc_mem_t *mctx, dns_stats_t **statsp) {
+dns_opcodestats_create(isc_mem_t *mctx, isc_statsmulti_t **statsp) {
        REQUIRE(statsp != NULL && *statsp == NULL);
 
-       create_stats(mctx, dns_statstype_opcode, 16, statsp);
+       /*
+        * Create opcode statistics using statsmulti for better multithreading performance.
+        * We need 16 counters for DNS opcodes (0-15), all are additive.
+        */
+       isc_statsmulti_create(mctx, statsp, 16, 0);
 }
 
 void
@@ -333,10 +337,10 @@ dns_rdatasetstats_decrement(dns_stats_t *stats,
 }
 
 void
-dns_opcodestats_increment(dns_stats_t *stats, dns_opcode_t code) {
-       REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_opcode);
+dns_opcodestats_increment(isc_statsmulti_t *stats, dns_opcode_t code) {
+       REQUIRE(stats != NULL);
 
-       isc_stats_increment(stats->counters, (isc_statscounter_t)code);
+       isc_statsmulti_increment(stats, (isc_statscounter_t)code);
 }
 
 void
@@ -585,15 +589,15 @@ rcode_dumpcb(isc_statscounter_t counter, uint64_t value, void *arg) {
 }
 
 void
-dns_opcodestats_dump(dns_stats_t *stats, dns_opcodestats_dumper_t dump_fn,
+dns_opcodestats_dump(isc_statsmulti_t *stats, dns_opcodestats_dumper_t dump_fn,
                     void *arg0, unsigned int options) {
        opcodedumparg_t arg;
 
-       REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_opcode);
+       REQUIRE(stats != NULL);
 
        arg.fn = dump_fn;
        arg.arg = arg0;
-       isc_stats_dump(stats->counters, opcode_dumpcb, &arg, options);
+       isc_statsmulti_dump(stats, opcode_dumpcb, &arg, options);
 }
 
 void
index 9259d535668ec0d98a1ae1b9cd74af95076a3d30..9c1404cc3018e85d01fd6ae554eaec392cc732d0 100644 (file)
@@ -123,7 +123,7 @@ struct ns_server {
        /*% Stats counters */
        isc_statsmulti_t *nsstats;
        isc_statsmulti_t *rcvquerystats;
-       dns_stats_t      *opcodestats;
+       isc_statsmulti_t *opcodestats;
        dns_stats_t      *rcodestats;
 
        isc_histomulti_t *udpinstats4;
index 97a5dcc0eaf2a0c2bf41e4e028249e3223d1252d..ec6855aec76b0c57337a7da380ee5b6e6bf19b61 100644 (file)
@@ -169,7 +169,7 @@ ns_server_detach(ns_server_t **sctxp) {
                        isc_statsmulti_detach(&sctx->rcvquerystats);
                }
                if (sctx->opcodestats != NULL) {
-                       dns_stats_detach(&sctx->opcodestats);
+                       isc_statsmulti_detach(&sctx->opcodestats);
                }
                if (sctx->rcodestats != NULL) {
                        dns_stats_detach(&sctx->rcodestats);