跳到主要内容

性能与基准

本文档收纳 README 中移出的性能说明,并按版本保留公开基准快照。目标不是宣称绝对胜负,而是展示 ForgeDNS 在不同策略复杂度、并发水平和传输路径下的性能轮廓。

性能关注点

ForgeDNS 关注的不是“最简单场景下的极限数字”,而是下面这些更接近真实部署的问题:

  • 开启缓存、规则、回退、重写后,热路径是否仍然可控
  • 多上游并发竞争时,整体时延是否可接受
  • 新增协议和插件后,结构是否还能继续优化
  • 系统联动和观测逻辑是否会拖慢主响应路径

指标说明

  • QPS 越高越好
  • 平均延迟与抖动(latency stddev)越低越好
  • run_dnsperf_compare.sh 更适合看中高并发吞吐与排队效应
  • run_dnsperf_latency_compare.sh 更适合看低并发延迟,固定 clients == outstanding
  • 这两组快照更适合分别观察 ForgeDNS 相对 mosdns 的优势分布
  • 由于 2026-04-13 的 compare pack 已更新场景目录、查询集和部分 workload 口径,v0.1.0v0.3.0 的绝对数字不建议直接做版本回归比较

说明:

  • 绿色 表示 ForgeDNS 在该指标上更优
  • 红色 表示 mosdns 在该指标上更优
  • 中性色 表示差距较小,仅用于辅助阅读,不代表统计显著性

v0.3.0

高并发吞吐与平均延迟

测试环境:

  • 时间:2026-04-13
  • 系统:Linux 6.8.12-2-pve x86_64
  • 选择器:core
  • 对比版本:ForgeDNS v0.3.0,mosdns v5.3.4-0-gb732318

压测参数:

  • 工具:dnsperf
  • warmup_seconds=2
  • bench_seconds=8
  • bench_repeats=3
  • dnsperf_clients=32
  • dnsperf_threads=4
  • dnsperf_outstanding=1024
  • dnsperf_max_qps=unlimited

结果阅读方式:

  • baseline UDP forwardconcurrent upstreamsdual-entry UDP/TCP 这类带上游转发或上游竞争的场景,主要反映的是端到端体验,结果会明显受到上游链路时延、上游响应稳定性和竞争策略影响,不应简单理解为“本地处理开销谁更小”
  • cache hotpathlocal answersserver local UDP/TCP 更接近本地处理成本
  • domain setcomposite provider chain 更适合看复杂规则、数据集和插件组合下的表现

下表展示按 repeat 聚合后的中位数:

场景ForgeDNS QPSmosdns QPSQPS 对比ForgeDNS 平均延迟mosdns 平均延迟
baseline UDP forward35,498.136,883.2-3.8%7.735 ms11.244 ms
cache hotpath139,133.9134,881.6+3.1%0.637 ms0.721 ms
dual-entry UDP35,800.935,382.3+1.2%7.092 ms10.170 ms
dual-entry TCP37,295.137,221.2+0.2%24.646 ms25.083 ms
concurrent upstreams21,038.713,319.4+58.0%10.404 ms20.601 ms
local answers126,268.4149,119.6-15.3%0.783 ms0.639 ms
domain set165,647.736,383.7+355.3%0.549 ms4.078 ms
ip set133,355.1150,756.7-11.5%0.740 ms0.637 ms
composite provider chain158,693.625,972.4+511.0%0.532 ms6.251 ms

低并发延迟扫图

测试环境:

  • 时间:2026-04-13
  • 系统:Linux 6.8.12-2-pve x86_64
  • 选择器:latency-core
  • 对比版本:ForgeDNS v0.3.0,mosdns v5.3.4-0-gb732318

压测参数:

  • 工具:dnsperf
  • warmup_seconds=1
  • bench_seconds=5
  • bench_repeats=3
  • latency_client_levels=1 2 4
  • dnsperf_threads=1
  • dnsperf_timeout=5
  • dnsperf_outstanding=matches_client_count

下面三张表优先展示平均延迟与抖动,QPS 只作为辅助校验指标。颜色沿用上面的规则:延迟或抖动更低的一侧为绿色,更高的一侧为红色,持平时使用中性色。

clients=1, outstanding=1

场景ForgeDNS 平均延迟mosdns 平均延迟延迟对比ForgeDNS 抖动mosdns 抖动抖动对比
baseline UDP forward6.716 ms5.708 ms+17.66%0.170 ms1.140 ms-85.09%
cache hotpath0.029 ms0.031 ms-6.45%0.017 ms0.021 ms-19.05%
dual-entry UDP5.949 ms6.394 ms-6.96%0.426 ms2.364 ms-81.98%
dual-entry TCP5.984 ms6.118 ms-2.19%0.380 ms0.829 ms-54.16%
local answers0.026 ms0.029 ms-10.34%0.016 ms0.019 ms-15.79%
domain set0.025 ms0.108 ms-76.85%0.011 ms0.095 ms-88.42%
composite provider chain0.025 ms0.156 ms-83.97%0.012 ms0.129 ms-90.70%
server local UDP0.025 ms0.027 ms-7.41%0.013 ms0.013 ms+0.00%
server local TCP0.027 ms0.030 ms-10.00%0.009 ms0.018 ms-50.00%

clients=2, outstanding=2

场景ForgeDNS 平均延迟mosdns 平均延迟延迟对比ForgeDNS 抖动mosdns 抖动抖动对比
baseline UDP forward6.001 ms7.382 ms-18.71%0.262 ms0.858 ms-69.46%
cache hotpath0.033 ms0.037 ms-10.81%0.050 ms0.053 ms-5.66%
dual-entry UDP6.408 ms5.923 ms+8.19%1.247 ms0.488 ms+155.53%
dual-entry TCP5.651 ms5.633 ms+0.32%0.417 ms0.518 ms-19.50%
local answers0.040 ms0.031 ms+29.03%0.021 ms0.018 ms+16.67%
domain set0.029 ms0.111 ms-73.87%0.013 ms0.104 ms-87.50%
composite provider chain0.029 ms0.165 ms-82.42%0.014 ms0.141 ms-90.07%
server local UDP0.030 ms0.029 ms+3.45%0.016 ms0.016 ms+0.00%
server local TCP0.028 ms0.030 ms-6.67%0.014 ms0.015 ms-6.67%

clients=4, outstanding=4

场景ForgeDNS 平均延迟mosdns 平均延迟延迟对比ForgeDNS 抖动mosdns 抖动抖动对比
baseline UDP forward5.977 ms5.910 ms+1.13%0.355 ms2.700 ms-86.85%
cache hotpath0.044 ms0.060 ms-26.67%0.028 ms0.063 ms-55.56%
dual-entry UDP6.637 ms5.426 ms+22.32%25.556 ms0.435 ms+5774.94%
dual-entry TCP6.451 ms6.941 ms-7.06%4.422 ms26.437 ms-83.27%
local answers0.056 ms0.040 ms+40.00%0.030 ms0.025 ms+20.00%
domain set0.034 ms0.155 ms-78.06%0.016 ms0.141 ms-88.65%
composite provider chain0.034 ms0.221 ms-84.62%0.015 ms0.172 ms-91.28%
server local UDP0.042 ms0.038 ms+10.53%0.024 ms0.024 ms+0.00%
server local TCP0.042 ms0.039 ms+7.69%0.026 ms0.022 ms+18.18%

v0.3.0 结果分析

  • 如果你的策略依赖复杂规则集、多数据集匹配,或者经常做多上游并发竞争,v0.3.0 下 ForgeDNS 的整体表现更有优势;domain setcomposite provider chainconcurrent upstreams 都明显领先。
  • cache hotpath 这一轮已经转为小幅领先,说明在缓存命中这类高频路径上,ForgeDNS 与 mosdns 的差距已经明显缩小。
  • 本地应答场景下,ForgeDNS 与 mosdns 的差距已经不大;响应侧 ip set 过滤的结果也更多是在受本地应答路径性能上限影响,而不是一条完全独立的短板。
  • 对于 forwarddual-entryconcurrent upstreams 这类场景,应把结果理解为端到端代理体验,其中上游链路延迟和上游响应稳定性是主要因素,而不是单纯的本地实现差异。
  • 低并发延迟扫图里,domain setcomposite provider chaincache hotpathserver local TCP 的延迟和抖动都更稳定;dual-entry UDPclients=4 时抖动明显偏高,说明这个场景的稳定性还需要继续观察。

v0.1.0

下面保留 2026-03-26 公开结果,作为 v0.1.0 历史快照。

高并发吞吐与平均延迟

测试环境:

  • CPU:Intel N100,4 核
  • 内存:1 GB
  • 环境:PVE 虚拟机内的 LXC
  • 系统:Linux 6.8.12-2-pve x86_64
  • 时间:2026-03-26
  • 被测版本:forgedns v0.1.0,mosdns v5.3.4-0-gb732318

压测参数:

  • 工具:dnsperf
  • warmup_seconds=2
  • bench_seconds=8
  • bench_repeats=3
  • dnsperf_clients=32
  • dnsperf_threads=4
  • dnsperf_outstanding=1024
  • dnsperf_max_qps=unlimited

下表为每个场景 3 次测试平均值:

场景ForgeDNS QPSmosdns QPSQPS 对比ForgeDNS 平均延迟mosdns 平均延迟
baseline UDP forward37,789.637,269.2+1.4%9.142 ms12.312 ms
cache hotpath131,982.3133,380.3-1.0%1.235 ms0.696 ms
dual-entry UDP39,614.434,356.8+15.3%8.946 ms10.009 ms
dual-entry TCP36,257.935,975.4+0.8%25.403 ms25.577 ms
concurrent upstreams21,694.813,195.4+64.4%15.065 ms23.790 ms
fallback standby22,259.923,223.9-4.2%16.376 ms10.616 ms
local answers132,286.6146,754.3-9.9%1.250 ms0.636 ms
DoH upstream (HTTP/2)29,781.625,835.7+15.3%13.363 ms11.445 ms
domain set172,061.735,966.1+378.4%0.901 ms4.210 ms
ip set134,257.4150,923.0-11.0%1.227 ms0.625 ms
sequence base131,995.6150,301.5-12.2%1.265 ms0.622 ms
match true135,326.0153,289.5-11.7%1.217 ms0.629 ms
match false136,740.1152,297.5-10.2%1.201 ms0.630 ms
match qname132,289.4152,203.6-13.1%1.248 ms0.638 ms

v0.1.0 当时的结论

  • ForgeDNS 在多上游并发、DoH 上游、双入口 UDP 和大规模 domain_set 场景下更有优势
  • mosdns 在缓存命中、本地应答、基础 sequence 和轻量 matcher 场景下目前仍然更快
  • fallback standby 这类链路还有继续优化空间

原始资料