Mark Zealey [Sat, 14 Dec 2013 21:47:15 +0000 (23:47 +0200)]
Remove AnswerData.created time field as it doesn't seem to be referenced anywhere and the time() call seems to take about 1-2% of process time under high load.
Mark Zealey [Mon, 2 Dec 2013 09:19:24 +0000 (11:19 +0200)]
fixes PowerDNS/pdns#692
For the second time when writing a backend I forgot that an ANY query needs to return any SOA data as well. This is because we store our SOA's separately from our other DNS data in order to optimize zone lookups. According to Habbie MyDNS backend has the same bug. The attached patch basically forces an SOA to be included which is actually much more optimal than anything I can do in my backends as I don't have easy access to the knowledge of:
* sd data structure;
* is this query also an SOA
meaning that if I answer it in the backend I have to do a number of additional lookups for information that is already available in the PacketHandler. Additionally, I notice that you are basically doing all the SOA setup anyway if there is anything looking like an SOA entry. So, all this patch does is strip out any SOA entries and then insert one if there should be. This seems to me to both potentially simplify backend code and fix up any user errors more accurately than the current code does.
Mark Zealey [Mon, 2 Dec 2013 09:07:00 +0000 (11:07 +0200)]
fixes PowerDNS/pdns/#661
I was doing some performance testing on our 32-way servers and discovered that in the simple case where the test program returns the data straight away, about 80% of the time was being spent in the kernel in a spinlock. I've been debugging this looking at the coprocess code and discovered that this is due to the following line in coprocess.cc:
setbuf(d_fp,0); // no buffering please, confuses select
If this is removed, performance in my particular test case goes from 2000qps with powerdns running at about 2000% cpu to 10000qps with powerdns using about 300% cpu.
Obviously the comment implies that this is not a permanent solution, I guess if the timeout is specified as 0 then the select code won't be executed and so you can disable the setbuf easily enough. However perhaps if the timeout is wanted you could set an alarm() rather than using select?
Mark Zealey [Mon, 2 Dec 2013 08:57:42 +0000 (10:57 +0200)]
fixes PowerDNS/pdns#650
The attached patch changes the distributor code in the following ways:
1) Remove (as far as i can see) unused functions which allow for the fetching of the answer from an answers queue. I struggle to understand why this would ever be useful compared to having a callback; it also reduces code complexity and removes some locks. Also allows (2):
2) Split into 3 classes - the new ones being SingleThreadDistributor and MultiThreadDistributor - removes some of the conditional statements. It also means that in distributor-threads=1 mode, NO additional distributor threads are forked (unlike the existing code), and the class will also use less memory and generally be more efficient.
This has been tested in that the pdns server starts up and answers questions correctly in both modes, it's more of an RFC attempt to clean up the code a bit.
Stefan Bühler [Mon, 18 Nov 2013 19:04:25 +0000 (20:04 +0100)]
fix bindparser reduce conflicts
resolve reduce conflicts to what yacc defaulted to:
* 'root_command' included 'command' directly and through
'options_command' and 'zone_command'; separate option/zone commands
for global usage, which don't include 'command' anymore.
* 'command' included 'also_notify' and 'zone_also_notify'; yacc resolved
conflict by defaulting to 'also_notify'; removed 'zone_also_notify'
from global zone commands.