mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-28 03:33:25 +02:00
unbound: Automatically scale configuration to system
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
@@ -10,7 +10,6 @@ server:
|
|||||||
chroot: ""
|
chroot: ""
|
||||||
directory: "/etc/unbound"
|
directory: "/etc/unbound"
|
||||||
username: "nobody"
|
username: "nobody"
|
||||||
num-threads: 2
|
|
||||||
port: 53
|
port: 53
|
||||||
do-ip4: yes
|
do-ip4: yes
|
||||||
do-ip6: no
|
do-ip6: no
|
||||||
@@ -19,6 +18,9 @@ server:
|
|||||||
so-reuseport: yes
|
so-reuseport: yes
|
||||||
do-not-query-localhost: yes
|
do-not-query-localhost: yes
|
||||||
|
|
||||||
|
# System Tuning
|
||||||
|
include: "/etc/unbound/tuning.conf"
|
||||||
|
|
||||||
# Logging Options
|
# Logging Options
|
||||||
verbosity: 1
|
verbosity: 1
|
||||||
use-syslog: yes
|
use-syslog: yes
|
||||||
@@ -30,10 +32,7 @@ server:
|
|||||||
statistics-cumulative: yes
|
statistics-cumulative: yes
|
||||||
extended-statistics: yes
|
extended-statistics: yes
|
||||||
|
|
||||||
# Cache Sizes
|
# Prefetching
|
||||||
msg-cache-size: 8m
|
|
||||||
rrset-cache-size: 8m
|
|
||||||
key-cache-size: 4m
|
|
||||||
prefetch: yes
|
prefetch: yes
|
||||||
prefetch-key: yes
|
prefetch-key: yes
|
||||||
|
|
||||||
|
|||||||
@@ -102,6 +102,69 @@ write_forward_conf() {
|
|||||||
) > /etc/unbound/forward.conf
|
) > /etc/unbound/forward.conf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
write_tuning_conf() {
|
||||||
|
# https://www.unbound.net/documentation/howto_optimise.html
|
||||||
|
|
||||||
|
# Determine number of online processors
|
||||||
|
local processors=$(getconf _NPROCESSORS_ONLN)
|
||||||
|
|
||||||
|
# Determine number of slabs
|
||||||
|
local slabs=1
|
||||||
|
while [ ${slabs} -lt ${processors} ]; do
|
||||||
|
slabs=$(( ${slabs} * 2 ))
|
||||||
|
done
|
||||||
|
|
||||||
|
# Determine amount of system memory
|
||||||
|
local mem=$(get_memory_amount)
|
||||||
|
|
||||||
|
# In the worst case scenario, unbound can use double the
|
||||||
|
# amount of memory allocated to a cache due to malloc overhead
|
||||||
|
|
||||||
|
# Large systems with more than 2GB of RAM
|
||||||
|
if [ ${mem} -ge 2048 ]; then
|
||||||
|
mem=128
|
||||||
|
|
||||||
|
# Small systems with less than 256MB of RAM
|
||||||
|
elif [ ${mem} -le 256 ]; then
|
||||||
|
mem=8
|
||||||
|
|
||||||
|
# Everything else
|
||||||
|
else
|
||||||
|
mem=32
|
||||||
|
fi
|
||||||
|
|
||||||
|
(
|
||||||
|
config_header
|
||||||
|
|
||||||
|
# We run one thread per processor
|
||||||
|
echo "num-threads: ${processors}"
|
||||||
|
|
||||||
|
# Adjust number of slabs
|
||||||
|
echo "infra-cache-slabs: ${slabs}"
|
||||||
|
echo "key-cache-slabs: ${slabs}"
|
||||||
|
echo "msg-cache-slabs: ${slabs}"
|
||||||
|
echo "rrset-cache-slabs: ${slabs}"
|
||||||
|
|
||||||
|
# Slice up the cache
|
||||||
|
echo "rrset-cache-size: $(( ${mem} / 2 ))m"
|
||||||
|
echo "msg-cache-size: $(( ${mem} / 4 ))m"
|
||||||
|
echo "key-cache-size: $(( ${mem} / 4 ))m"
|
||||||
|
) > /etc/unbound/tuning.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
get_memory_amount() {
|
||||||
|
local key val unit
|
||||||
|
|
||||||
|
while read -r key val unit; do
|
||||||
|
case "${key}" in
|
||||||
|
MemTotal:*)
|
||||||
|
# Convert to MB
|
||||||
|
echo "$(( ${val} / 1024 ))"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done < /proc/meminfo
|
||||||
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
start)
|
start)
|
||||||
@@ -114,6 +177,7 @@ case "$1" in
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Update configuration files
|
# Update configuration files
|
||||||
|
write_tuning_conf
|
||||||
write_interfaces_conf
|
write_interfaces_conf
|
||||||
write_forward_conf
|
write_forward_conf
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user