[Opendnssec-user]How to speed up signing performance

Paul Wouters paul at nohats.ca
Fri Aug 31 16:58:25 UTC 2012


On Fri, 31 Aug 2012, 刘硕 wrote:

> Date: Fri, 31 Aug 2012 02:14:23
> From: 刘硕 <shuoleo at 126.com>
> Cc: opendnssec-user <opendnssec-user at lists.opendnssec.org>
> To: Jerry Lundstr鰉 <jerry at opendnssec.org>
> Subject: [Opendnssec-user]How to speed up signing performance
> 
> Hi Jerry,
>  
> >The CPU usage you see is normal since the Signer is threaded it will use more then 100% CPU (this really depends on how the OS reports
>  CPU usage). 
> >If you wish to lower the CPU usage you can configure the number of Worker and Signer threads in conf.xml for the Signer but then the s
> igning will 
> >also take more time. Same goes if you wish to optimize/speed up the signing, reconfigure Worker and Signer threads to about 2x the num
> ber of virtual 
> >CPUs you have (if you have 4 cores with hyper threading you will have 8 virtual CPUs).
>  
> # cat /proc/cpuinfo| grep processor | wc -l
> 24
> As you said before, if our server has 24 processors, for a better signing performance, the worker threads should be 24*2 and keep signer
> threads equal with worker threads, right?

We use the attached two patches to speed up the signerd. For us it seems
mostly related to locking issues.

Paul
-------------- next part --------------
diff -Naur opendnssec-1.4.0a3-orig/signer/src/daemon/worker.c opendnssec-1.4.0a3/signer/src/daemon/worker.c
--- opendnssec-1.4.0a3-orig/signer/src/daemon/worker.c	2012-08-02 16:57:01.000000000 -0400
+++ opendnssec-1.4.0a3/signer/src/daemon/worker.c	2012-08-20 15:41:34.665175565 -0400
@@ -173,7 +173,11 @@
          * lets take a small break to not hog CPU.
          */
         if (status == ODS_STATUS_UNCHANGED) {
+#if 0
             worker_wait_timeout_locked(&q->q_lock, &q->q_nonfull, 60);
+#else
+            worker_wait_timeout_locked(&q->q_lock, &q->q_nonfull, 5);
+#endif
         }
         lock_basic_unlock(&q->q_lock);
     }
-------------- next part --------------
Modified: trunk/OpenDNSSEC/signer/src/signer/namedb.c
===================================================================
- --- trunk/OpenDNSSEC/signer/src/signer/namedb.c	2012-08-09 09:36:35
UTC (rev 6514)
+++ trunk/OpenDNSSEC/signer/src/signer/namedb.c	2012-08-09 14:19:56
UTC (rev 6515)
@@ -215,9 +215,11 @@
     } else if (ods_strcmp(format, "datecounter") == 0) {
         soa = (uint32_t) time_datestamp(0, "%Y%m%d", NULL) * 100;
         if (!util_serial_gt(soa, prev)) {
- -            ods_log_warning("[%s] unable to use datecounter as serial: %u "
- -                "does not increase %u. Serial set to %u", db_str, soa, prev,
- -                (prev+1));
+            if (!db->is_initialized) {
+                ods_log_warning("[%s] unable to use datecounter as serial: %u "
+                    "does not increase %u. Serial set to %u", db_str, soa, prev,
+                    (prev+1));
+            }
             soa = prev + 1;
         }
     } else if (ods_strcmp(format, "counter") == 0) {

Modified: trunk/OpenDNSSEC/signer/src/signer/tools.c
===================================================================
- --- trunk/OpenDNSSEC/signer/src/signer/tools.c	2012-08-09 09:36:35 UTC
(rev 6514)
+++ trunk/OpenDNSSEC/signer/src/signer/tools.c	2012-08-09 14:19:56 UTC
(rev 6515)
@@ -39,6 +39,7 @@
 #include "signer/tools.h"
 #include "signer/zone.h"

+#include <errno.h>
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
@@ -213,7 +214,7 @@
     /* kick the nameserver */
     if (zone->notify_ns) {
         int status;
- -        pid_t pid;
+        pid_t pid, wpid;
         ods_log_verbose("[%s] notify nameserver: %s", tools_str,
             zone->notify_ns);
 	/** fork */
@@ -236,9 +237,20 @@
                 ods_log_debug("[%s] notify nameserver process forked",
                     tools_str);
                 /** wait for completion  */
- -                while (wait(&status) != pid) {
- -                    ;
+                while((wpid = waitpid(pid, &status, 0)) <= 0) {
+                    if (errno != EINTR) {
+                        break;
+                    }
                 }
+                if (wpid == -1) {
+                    ods_log_error("[%s] notify nameserver failed: waitpid() ",
+                        "failed (%s)", tools_str, strerror(errno));
+                } else if (!WIFEXITED(status)) {
+                    ods_log_error("[%s] notify nameserver failed: notify ",
+                        "command did not terminate normally", tools_str);
+                } else {
+                    ods_log_verbose("[%s] notify nameserver ok", tools_str);
+                }
                 break;
         }
     }


More information about the Opendnssec-user mailing list