1 个不稳定版本
0.1.0 | 2021 年 8 月 25 日 |
---|
#4 在 #nailgun
2KB
nailgun
nailgun
是一个使用 trust-dns-proto
和 tokio
编写的 Rust 语言 DNS 性能测试客户端。欢迎 PR、问题和评论!
nailgun
首先是一个兴趣爱好项目,它受到 flamethrower 的启发,并复制了一些它的参数。默认情况下它是单线程的,但可以配置使用多个线程。您可以指定流量生成器的数量(使用 tcount
)和 tokio 工作线程的数量(使用 wcount
),nailgun
将启动 tcount * wcount
生成器。大多数情况下,这并不必要,因为一个并发生成器和单个工作线程就足够了。针对配置为返回 NXDOMAIN
的本地 dnsdist
实例进行测试(是的,这不是真实的基准测试)nailgun
可以达到超过 250K QPS(1 个工作线程 & 生成器)。
nailgun
使用 tracing
进行日志记录,因此可以使用 RUST_LOG
来控制日志输出。
特性
速率限制
您可以使用 -Q
指定特定的 QPS,这允许您设置一个期望的 QPS 速率,该速率将在所有发送者之间分配。
输出
--output
允许您指定不同的日志格式,由 tracing
提供。目前支持 "pretty"、"json" 和 "debug",默认为 "pretty"。您可以使用 RUST_LOG
来过滤输出(例如,RUST_LOG="naildns=trace"
将仅从 naildns
二进制文件打印跟踪级别的日志)。默认情况下,nailgun
使用 stdout,但如果您使用 -o
标志和路径,它将记录到文件。
无论选择哪种选项,运行结束后都会打印一个摘要到标准输出,不带跟踪信息。
生成器
使用 -g
可用多种生成器类型,默认是 static
,但您也可以从文件生成查询,或者随机生成部分查询。
DoH(新功能!)
nailgun
现在可以发送 DoH 消息了!
naildns dns.google -Q 2 -P doh
用法
naildns --help
默认情况下,nailgun 将启动一个单线程的 tokio 运行时和 1 个流量生成器
naildns 0.0.0.0 -p 1953
这可以扩展
naildns 0.0.0.0 -p 1953 -w 16 -t 1
将在 tokio 运行时启动 16 个操作系统线程(w/
wcount
)和每个线程 1 个流量生成器(t/
tcount
),总共 16*1 = 16 个流量生成器。
注意 如果您需要一个快速的服务器进行测试,我一直在启动 dnsdist
并将其配置中的 addAction(AllRule(), RCodeAction(3))
设置为使其所有 DNS 消息立即返回 NXDomain
。
构建和安装
要本地构建
cargo build --release
naildns
二进制文件将位于 target/release/naildns
从 crates.io
本地
要本地安装
cargo install
TODO
- 基于超时次数进行节流
- 第一批消息似乎总是设置为 QPS 的两倍(例如,尝试
--limit-secs 5 -Q 10,它将发送 60 个查询)
- 代码中还有一些 TODO 清理要处理
- 生成器的参数解析与 flamethrower 非常不同,因为 clap 似乎不支持以相同的样式解析它--最好能解决这个问题
将所有生成器的日志输出合并,而不是让它们单独运行- 更多生成器类型?
- 也许可以利用 trustdns 的其他部分来为有趣的查询类型提供选项。DOT?
DOH? - 建议?错误?