#性能测试 #dns #性能 #测试 #nailgun #dns服务器

已删除 nailg

(占位符) nailgun 是一个用 Rust 编写的轻量级工具,支持 DNS 服务器进行基准测试和压力测试。它支持 IPv4 & IPv6,UDP & TCP,并能生成不同类型的查询

0.1.0 2021年8月23日

#5 in #nailgun

MIT 许可证

2KB

nailgun

nailgun 是一个使用 trust-dns-prototokio 编写的 Rust 语言 DNS 性能测试客户端。欢迎提交 PR、问题和评论!

nailgun 首先是一个兴趣爱好项目,它受到了 flamethrower 的启发并借鉴了一些其参数。默认情况下它是单线程的,但可以配置使用多个线程。你可以指定流量生成器的数量(使用 tcount)和 tokio 工作线程的数量(使用 wcount),nailgun 将启动 tcount * wcount 个生成器。大多数情况下,这并不是必要的,因为一个并发生成器和单个工作线程已经足够。针对配置为立即返回 NXDOMAIN 的本地 dnsdist 实例进行测试(是的,这不是一个真实世界的基准测试),nailgun 可以在 1 个工作线程和生成器的情况下超过 250K QPS。

nailgun 使用 tracing 进行日志记录,因此可以使用 RUST_LOG 来控制日志输出。

特性

速率限制

您可以使用 -Q 指定特定的 QPS,这允许您设置一个期望的 QPS 速率,该速率将分配给所有发送者。

输出

--output 允许您指定不同的日志格式,由 tracing 提供。“pretty”、“json”和“debug”目前受支持,“pretty”是默认选项。您可以使用 RUST_LOG 来过滤输出(例如,RUST_LOG="naildns=trace" 只会从 naildns 二进制文件打印跟踪级别的信息)。默认情况下,nailgun 使用 stdout,但如果有 -o 标志和路径,则将记录到文件。完成运行后,还会在无跟踪的情况下打印到 stdout 的摘要。

无论这些选项如何,都会在运行结束后打印一个摘要到 stdout。

生成器

有多个生成器类型可用,使用-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

待办事项

  • 基于超时次数进行节流
  • 第一批消息似乎总是设置QPS的两倍(例如,尝试--limit-secs 5 -Q 10,最终将发送60个查询)
  • 代码中还有一些待办事项清理需要处理
  • 生成器的参数解析与flamethrower非常不同,因为clap似乎不支持以相同的方式解析它--希望找到解决方案
  • 合并所有生成器的日志输出,而不是让它们单独运行
  • 更多生成器类型?
  • 也许可以利用trustdns的其他部分来为有趣的查询类型提供选项。DOT? DOH
  • 建议?错误?

无运行时依赖