Hello Alan.

Thanks for your answer.

In attachment the pdns.conf and the file with the random input domains.

Thanks for your help.

Riccardo





30/03/2023, 10:54 Alan Holmes ha scritto:

> Hello,
> 
> Very interesting issue indeed. I came across a similar problem in the past.
> 
> In order for me to understand what you are missing, can you share the 
> configuration you have used and the target IP.
> 
> If you will also share some of the random third level domains,
> 
> I will also verify your pdns configuration directly.
> 
> 
> 
> Best,
> 
> Alan
> 
> 
> 
> 
> 
> 
> 
> ------ Messaggio originale ------
> 
> Da "Riccardo Brunetti via Pdns-users" <pdns-users@mailman.powerdns.com>
> 
> A "pdns-users" <pdns-users@mailman.powerdns.com>
> 
> Data 29/03/2023 18:03:45
> 
> Oggetto [Pdns-users] PowerDNS tcp query rate
> 
> 
> 
> >Hello.
> 
> >We are testing a powerdns authoritative server installation and we are 
> >>trying to figure out the maximum query rate in TCP mode.
> 
> >
> 
> >We use the "dnsperf" tool with the following syntax:
> 
> >
> 
> >>dnsperf -m tcp -s xxx.xxx.xxx.xxx -d barbeuk.elenco -c 10 -T 200 -l >>180 
> >>-Q 200000 -S 1
> 
> >where:
> 
> >xxx.xxx.xxx.xxx is the IP address of the powerdns server
> 
> >barbeuk.elenco is a file containing a list random third level domains.
> 
> >
> 
> >What we are finding is that we can't go above 1000 queries per second >and 
> >we can't understand why since using UDP we can handle more than >30000 
> >queries per second.
> 
> >
> 
> >We are probably missing something relevant in the configuration, but we 
> >>can't understand what.
> 
> >Which are the most important configurations to be considered concerning >the 
> >performances in TCP?
> 
> >
> 
> >We are using powerdns version 4.7.3.
> 
> >Thanks.
> 
> >Riccardo
> 
> >


Attachment: barbeuk.elenco.1
Description: Binary data

# Autogenerated configuration file template
#################################
# 8bit-dns      Allow 8bit dns queries
#
# 8bit-dns=no

#################################
# allow-axfr-ips        Allow zonetransfers only to these subnets
#
allow-axfr-ips=127.0.0.0/8,::1,10.0.14.0/24

#################################
# allow-dnsupdate-from  A global setting to allow DNS updates from these IP 
ranges.
#
# allow-dnsupdate-from=127.0.0.0/8,::1

#################################
# allow-notify-from     Allow AXFR NOTIFY from these IP ranges. If empty, drop 
all incoming notifies.
#
# allow-notify-from=0.0.0.0/0,::/0

#################################
# allow-unsigned-notify Allow unsigned notifications for TSIG secured domains
#
# allow-unsigned-notify=yes

#################################
# allow-unsigned-supermaster    Allow supermasters to create zones without TSIG 
signed NOTIFY
#
# allow-unsigned-supermaster=yes

#################################
# also-notify   When notifying a domain, also notify these nameservers
#
# also-notify=

#################################
# any-to-tcp    Answer ANY queries with tc=1, shunting to TCP
#
# any-to-tcp=yes

#################################
# api   Enable/disable the REST API (including HTTP listener)
#
# api=no

api=yes

#################################
# api-key       Static pre-shared authentication key for access to the REST API
#
# api-key=

api-key=xxxxxxxxx

#################################
# axfr-fetch-timeout    Maximum time in seconds for inbound AXFR to start or be 
idle after starting
#
# axfr-fetch-timeout=10

#################################
# axfr-lower-serial     Also AXFR a zone from a master with a lower serial
#
# axfr-lower-serial=no

#################################
# cache-ttl     Seconds to store packets in the PacketCache
#
# cache-ttl=20

cache-ttl=0

zone-cache-refresh-interval=0

#################################
# carbon-instance       If set overwrites the the instance name default
#
# carbon-instance=auth

#################################
# carbon-interval       Number of seconds between carbon (graphite) updates
#
# carbon-interval=30

#################################
# carbon-namespace      If set overwrites the first part of the carbon string
#
# carbon-namespace=pdns

#################################
# carbon-ourname        If set, overrides our reported hostname for carbon stats
#
# carbon-ourname=

#################################
# carbon-server If set, send metrics in carbon (graphite) format to this server 
IP address
#
# carbon-server=

#################################
# chroot        If set, chroot to this directory for more security
#
# chroot=

#################################
# config-dir    Location of configuration directory (pdns.conf)
#
# config-dir=/etc/pdns

#################################
# config-name   Name of this virtual configuration - will rename the binary 
image
#
# config-name=

#################################
# control-console       Debugging switch - don't use
#
# control-console=no

#################################
# daemon        Operate as a daemon
#
daemon=no

#################################
# default-api-rectify   Default API-RECTIFY value for zones
#
# default-api-rectify=yes

#################################
# default-ksk-algorithm Default KSK algorithm
#
# default-ksk-algorithm=ecdsa256

#################################
# default-ksk-size      Default KSK size (0 means default)
#
# default-ksk-size=0

#################################
# default-publish-cdnskey       Default value for PUBLISH-CDNSKEY
#
# default-publish-cdnskey=

#################################
# default-publish-cds   Default value for PUBLISH-CDS
#
# default-publish-cds=

#################################
# default-soa-edit      Default SOA-EDIT value
#
# default-soa-edit=

#################################
# default-soa-edit-signed       Default SOA-EDIT value for signed zones
#
# default-soa-edit-signed=

#################################
# default-soa-mail      mail address to insert in the SOA record if none set in 
the backend
#
# default-soa-mail=

#################################
# default-soa-name      name to insert in the SOA record if none set in the 
backend
#
# default-soa-name=a.misconfigured.powerdns.server

#################################
# default-ttl   Seconds a result is valid if not set otherwise
#
# default-ttl=3600

#################################
# default-zsk-algorithm Default ZSK algorithm
#
# default-zsk-algorithm=

#################################
# default-zsk-size      Default ZSK size (0 means default)
#
# default-zsk-size=0

#################################
# direct-dnskey Fetch DNSKEY, CDS and CDNSKEY RRs from backend during DNSKEY or 
CDS/CDNSKEY synthesis
#
# direct-dnskey=no

#################################
# disable-axfr  Disable zonetransfers but do allow TCP queries
#
# disable-axfr=no

#################################
# disable-axfr-rectify  Disable the rectify step during an outgoing AXFR. Only 
required for regression testing.
#
# disable-axfr-rectify=no

#################################
# disable-syslog        Disable logging to syslog, useful when running inside a 
supervisor that logs stdout
#
# disable-syslog=no

#################################
# distributor-threads   Default number of Distributor (backend) threads to start
#
# distributor-threads=3
distributor-threads=30

#################################
# dname-processing      If we should support DNAME records
#
# dname-processing=no

#################################
# dnssec-key-cache-ttl  Seconds to cache DNSSEC keys from the database
#
# dnssec-key-cache-ttl=30

#################################
# dnsupdate     Enable/Disable DNS update (RFC2136) support. Default is no.
#
# dnsupdate=no

#################################
# do-ipv6-additional-processing Do AAAA additional processing
#
# do-ipv6-additional-processing=yes

#################################
# domain-metadata-cache-ttl     Seconds to cache domain metadata from the 
database
#
# domain-metadata-cache-ttl=60

zone-metadata-cache-ttl=0

#################################
# edns-subnet-processing        If we should act on EDNS Subnet options
#
# edns-subnet-processing=no

#################################
# enable-lua-records    Process LUA records for all zones (metadata overrides 
this)
#
# enable-lua-records=no

#################################
# entropy-source        If set, read entropy from this file
#
# entropy-source=/dev/urandom

#################################
# expand-alias  Expand ALIAS records
#
# expand-alias=no

#################################
# forward-dnsupdate     A global setting to allow DNS update packages that are 
for a Slave domain, to be forwarded to the master.
#
# forward-dnsupdate=yes

#################################
# forward-notify        IP addresses to forward received notifications to 
regardless of master or slave settings
#
# forward-notify=

#################################
# guardian      Run within a guardian process
#
guardian=no

#################################
# include-dir   Include *.conf files from this directory
#
# include-dir=

#################################
# launch        Which backends to launch and order to query them in
#
# launch=\nlaunch=
launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=xxxxxxxxx
gmysql-dbname=xxxxxxxxx
gmysql-password=xxxxxxxxx

#################################
# load-modules  Load this module - supply absolute or relative path
#
# load-modules=

#################################
# local-address Local IP addresses to which we bind
#
# local-address=0.0.0.0, ::
#local-address=10.0.14.19
local-address=149.62.186.201

#################################
# local-address-nonexist-fail   Fail to start if one or more of the 
local-address's do not exist on this server
#
# local-address-nonexist-fail=yes

#################################
# local-ipv6    DEPRECATED, will be removed, move your IPs to local-address
#
# local-ipv6=

#################################
# local-port    The port on which we listen
#
local-port=53

#################################
# log-dns-details       If PDNS should log DNS non-erroneous details
#
# log-dns-details=no

#################################
# log-dns-queries       If PDNS should log all incoming DNS queries
#
# log-dns-queries=no

#################################
# log-timestamp Print timestamps in log lines
#
# log-timestamp=yes

#################################
# logging-facility      Log under a specific facility
#
# logging-facility=

#################################
# loglevel      Amount of logging. Higher is more. Do not set below 3
#
# loglevel=3

loglevel=3

#################################
# lua-axfr-script       Script to be used to edit incoming AXFRs
#
# lua-axfr-script=

#################################
# lua-dnsupdate-policy-script   Lua script with DNS update policy handler
#
# lua-dnsupdate-policy-script=

#################################
# lua-health-checks-expire-delay        Stops doing health checks after the 
record hasn't been used for that delay (in seconds)
#
# lua-health-checks-expire-delay=3600

#################################
# lua-health-checks-interval    LUA records health checks monitoring interval 
in seconds
#
# lua-health-checks-interval=5

#################################
# lua-prequery-script   Lua script with prequery handler (DO NOT USE)
#
# lua-prequery-script=

#################################
# lua-records-exec-limit        LUA records scripts execution limit 
(instructions count). Values <= 0 mean no limit
#
# lua-records-exec-limit=1000

#################################
# master        Act as a master
#
# master=no

#################################
# max-cache-entries     Maximum number of entries in the query cache
#
# max-cache-entries=1000000

#################################
# max-ent-entries       Maximum number of empty non-terminals in a zone
#
# max-ent-entries=100000

#################################
# max-generate-steps    Maximum number of $GENERATE steps when loading a zone 
from a file
#
# max-generate-steps=0

#################################
# max-nsec3-iterations  Limit the number of NSEC3 hash iterations
#
# max-nsec3-iterations=500

#################################
# max-packet-cache-entries      Maximum number of entries in the packet cache
#
# max-packet-cache-entries=1000000

#################################
# max-queue-length      Maximum queuelength before considering situation lost
#
# max-queue-length=5000
#max-queue-length=15000
max-queue-length=100000

#################################
# max-signature-cache-entries   Maximum number of signatures cache entries
#
# max-signature-cache-entries=

#################################
# max-tcp-connection-duration   Maximum time in seconds that a TCP DNS 
connection is allowed to stay open.
#
# max-tcp-connection-duration=0

#################################
# max-tcp-connections   Maximum number of TCP connections
#
# max-tcp-connections=20

#################################
# max-tcp-connections-per-client        Maximum number of simultaneous TCP 
connections per client
#
# max-tcp-connections-per-client=0

#################################
# max-tcp-transactions-per-conn Maximum number of subsequent queries per TCP 
connection
#
# max-tcp-transactions-per-conn=0

#################################
# module-dir    Default directory for modules
#
# module-dir=/usr/lib64/pdns

#################################
# negquery-cache-ttl    Seconds to store negative query results in the 
QueryCache
#
# negquery-cache-ttl=60

negquery-cache-ttl=0

#################################
# no-shuffle    Set this to prevent random shuffling of answers - for 
regression testing
#
# no-shuffle=off

#################################
# non-local-bind        Enable binding to non-local addresses by using FREEBIND 
/ BINDANY socket options
#
# non-local-bind=no

#################################
# only-notify   Only send AXFR NOTIFY to these IP addresses or netmasks
#
# only-notify=0.0.0.0/0,::/0

#################################
# outgoing-axfr-expand-alias    Expand ALIAS records during outgoing AXFR
#
# outgoing-axfr-expand-alias=no

#################################
# overload-queue-length Maximum queuelength moving to packetcache only
#
# overload-queue-length=0

#################################
# prevent-self-notification     Don't send notifications to what we think is 
ourself
#
# prevent-self-notification=yes

#################################
# query-cache-ttl       Seconds to store query results in the QueryCache
#
# query-cache-ttl=20

query-cache-ttl=0

#################################
# query-local-address   Source IP address for sending queries
#
# query-local-address=0.0.0.0

#################################
# query-local-address6  Source IPv6 address for sending queries
#
# query-local-address6=::

#################################
# query-logging Hint backends that queries should be logged
#
# query-logging=no

#################################
# queue-limit   Maximum number of milliseconds to queue a query
#
# queue-limit=1500

queue-limit=3000

#################################
# receiver-threads      Default number of receiver threads to start
#
# receiver-threads=1

receiver-threads=16

#################################
# resolver      Use this resolver for ALIAS and the internal stub resolver
#
# resolver=no

#################################
# retrieval-threads     Number of AXFR-retrieval threads for slave operation
#
# retrieval-threads=2

#################################
# reuseport     Enable higher performance on compliant kernels by using 
SO_REUSEPORT allowing each receiver thread to open its own socket
#
# reuseport=no

reuseport=yes

#################################
# rng   Specify the random number generator to use. Valid values are 
auto,sodium,openssl,getrandom,arc4random,urandom.
#
# rng=auto

#################################
# security-poll-suffix  Domain name from which to query security update 
notifications
#
# security-poll-suffix=secpoll.powerdns.com.

#################################
# send-signed-notify    Send TSIG secured NOTIFY if TSIG key is configured for 
a domain
#
# send-signed-notify=yes

#################################
# server-id     Returned when queried for 'id.server' TXT or NSID, defaults to 
hostname - disabled or custom
#
# server-id=

#################################
# setgid        If set, change group id to this gid for more security
#
setgid=pdns

#################################
# setuid        If set, change user id to this uid for more security
#
setuid=pdns

#################################
# signing-threads       Default number of signer threads to start
#
# signing-threads=3

#################################
# slave Act as a slave
#
# slave=no

#################################
# slave-cycle-interval  Schedule slave freshness checks once every .. seconds
#
# slave-cycle-interval=60

#################################
# slave-renotify        If we should send out notifications for slaved updates
#
# slave-renotify=no

#################################
# soa-expire-default    Default SOA expire
#
# soa-expire-default=604800

#################################
# soa-minimum-ttl       Default SOA minimum ttl
#
# soa-minimum-ttl=3600

#################################
# soa-refresh-default   Default SOA refresh
#
# soa-refresh-default=10800

#################################
# soa-retry-default     Default SOA retry
#
# soa-retry-default=3600

#################################
# socket-dir    Where the controlsocket will live, /var/run/pdns when unset and 
not chrooted
#
# socket-dir=

#################################
# superslave    Act as a superslave
#
# superslave=no

#################################
# tcp-control-address   If set, PowerDNS can be controlled over TCP on this 
address
#
# tcp-control-address=

#################################
# tcp-control-port      If set, PowerDNS can be controlled over TCP on this 
address
#
# tcp-control-port=53000

#################################
# tcp-control-range     If set, remote control of PowerDNS is possible over 
these networks only
#
# tcp-control-range=127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 
::1/128, fe80::/10

#################################
# tcp-control-secret    If set, PowerDNS can be controlled over TCP after 
passing this secret
#
# tcp-control-secret=

#################################
# tcp-fast-open Enable TCP Fast Open support on the listening sockets, using 
the supplied numerical value as the queue size
#
# tcp-fast-open=0

#################################
# tcp-idle-timeout      Maximum time in seconds that a TCP DNS connection is 
allowed to stay open while being idle
#
# tcp-idle-timeout=5

#################################
# traceback-handler     Enable the traceback handler (Linux only)
#
# traceback-handler=yes

#################################
# trusted-notification-proxy    IP address of incoming notification proxy
#
# trusted-notification-proxy=

#################################
# udp-truncation-threshold      Maximum UDP response size before we truncate
#
# udp-truncation-threshold=1232

#################################
# version-string        PowerDNS version in packets - full, anonymous, powerdns 
or custom
#
# version-string=full

#################################
# webserver     Start a webserver for monitoring (api=yes also enables the HTTP 
listener)
#
# webserver=no

webserver=yes

#################################
# webserver-address     IP Address of webserver/API to listen on
#
# webserver-address=127.0.0.1

webserver-address=10.0.14.19

#################################
# webserver-allow-from  Webserver/API access is only allowed from these subnets
#
# webserver-allow-from=127.0.0.1,::1

webserver-allow-from=127.0.0.1,::1,10.0.14.0/24,10.0.10.37/32

#################################
# webserver-loglevel    Amount of logging in the webserver (none, normal, 
detailed)
#
# webserver-loglevel=normal

#################################
# webserver-max-bodysize        Webserver/API maximum request/response body 
size in megabytes
#
# webserver-max-bodysize=2

#################################
# webserver-password    Password required for accessing the webserver
#
# webserver-password=

#################################
# webserver-port        Port of webserver/API to listen on
#
# webserver-port=8081

#################################
# webserver-print-arguments     If the webserver should print arguments
#
# webserver-print-arguments=no

#################################
# write-pid     Write a PID file
#
# write-pid=yes

#################################
# xfr-max-received-mbytes       Maximum number of megabytes received from an 
incoming XFR
#
# xfr-max-received-mbytes=100
_______________________________________________
Pdns-users mailing list
Pdns-users@mailman.powerdns.com
https://mailman.powerdns.com/mailman/listinfo/pdns-users

Reply via email to