-
Notifications
You must be signed in to change notification settings - Fork 0
Performance Benchmarks
shijiashuai edited this page Mar 9, 2026
·
1 revision
FastQTools 内置完整的性能基准测试系统,支持回归检测、基线管理和报告生成。
| 操作 | 吞吐量 | 耗时 |
|---|---|---|
| FastQReader Medium | 1696.50 MB/s | 18.8 ms |
| FastQWriter Medium | 1.76 M reads/s | 57.0 ms |
| Filter Combined (100K) | 1.67 M reads/s | 60.5 ms |
| Stat Full (100K) | 301.91 MB/s | 104.6 ms |
# 构建 benchmark 目标
cmake --build build-clang-release --target benchmarks
# 运行基准测试
./scripts/benchmark run
# 生成报告
./scripts/benchmark report
# 检测性能回归
./scripts/benchmark compare baseline.json current.json./scripts/benchmark run [options]
Options:
--output, -o 指定输出文件路径
--filter 过滤要运行的测试(正则表达式)
--repetitions 重复次数(默认: 1)
--ci CI 模式./scripts/benchmark report [options]
Options:
--input, -i 输入 JSON 文件
--format, -f 输出格式 (markdown, summary, readme)
--charts 生成图表(需要 matplotlib)./scripts/benchmark compare <baseline> <current> [options]
Options:
--warning-threshold 警告阈值(默认: 10%)
--critical-threshold 严重阈值(默认: 20%)
--ci CI 模式输出./scripts/benchmark baseline save <name> # 保存基线
./scripts/benchmark baseline list # 列出基线
./scripts/benchmark baseline delete <name> # 删除基线./scripts/benchmark data generate # 生成测试数据集
./scripts/benchmark data validate <file> # 验证 FASTQ 格式| 测试项 | 说明 |
|---|---|
BM_FastQReader_* |
读取性能(纯文本 / gzip) |
BM_FastQWriter_* |
写入性能(含 gzip 压缩) |
| 测试项 | 说明 |
|---|---|
BM_Filter_NoFilter |
无过滤(基线) |
BM_Filter_MinLength |
最小长度过滤 |
BM_Filter_MinQuality |
最小质量过滤 |
BM_Filter_MaxNRatio |
N 比例过滤 |
BM_Filter_Combined |
组合过滤 |
| 测试项 | 说明 |
|---|---|
BM_Stat_Basic |
基本统计 |
BM_Stat_BaseComposition |
碱基组成统计 |
BM_Stat_QualityDistribution |
质量分布统计 |
BM_Stat_LengthDistribution |
长度分布统计 |
BM_Stat_Full |
完整统计 |
使用合成 FASTQ 数据,确保结果可重复:
| 数据集 | Reads 数量 | Read 长度 | 文件大小 |
|---|---|---|---|
| Small | 10,000 | 150bp | ~2.5 MB |
| Medium | 100,000 | 150bp | ~25 MB |
| Large | 1,000,000 | 150bp | ~250 MB |
| 指标 | 说明 | 单位 |
|---|---|---|
mean_time_ns |
平均执行时间 | 纳秒 |
std_dev_ns |
标准差 | 纳秒 |
throughput_mbps |
数据吞吐量 | MB/s |
throughput_reads_per_sec |
Reads 吞吐量 | reads/s |
peak_memory_bytes |
峰值内存 | bytes |
{
"metadata": {
"timestamp": "2026-01-12T10:30:00Z",
"git_commit": "abc123",
"cpu_model": "Intel Core i7",
"core_count": 8
},
"results": [
{
"name": "BM_FastQReader_Medium",
"category": "io",
"iterations": 100,
"mean_time_ns": 50000000,
"throughput_mbps": 200.5
}
]
}- Push 到
main或develop分支 - Pull Request 到
main分支 - 每周一 UTC 00:00 定时运行
- 手动触发
| 级别 | 阈值 | 结果 |
|---|---|---|
| 警告 | 性能下降 10–20% | CI 报告警告 |
| 严重 | 性能下降 >20% | CI 失败 |
benchmark_results/
├── results/ # 历史测试结果 (YYYY-MM-DD_HH-MM-SS_<commit>.json)
├── baselines/ # 命名基线 (<name>.json)
├── reports/ # 生成的报告
│ ├── latest.md
│ └── charts/*.svg
└── data/ # 测试数据
├── small_10k.fastq
├── medium_100k.fastq
└── large_1m.fastq
在 tools/benchmark/ 目录下创建 .cpp 文件:
#include <benchmark/benchmark.h>
#include <fqtools/io/fastq_reader.h>
namespace fq::benchmark {
static void BM_MyNewBenchmark(::benchmark::State& state) {
for (auto _ : state) {
// 被测代码
::benchmark::DoNotOptimize(result);
}
state.SetItemsProcessed(state.iterations() * num_items);
state.SetBytesProcessed(state.iterations() * bytes);
}
BENCHMARK(BM_MyNewBenchmark)
->Args({10000})
->Args({100000})
->Unit(::benchmark::kMillisecond);
} // namespace fq::benchmarkadd_benchmark(benchmark_my_new
my_new_benchmark.cpp
)| 项目 | 推荐配置 |
|---|---|
| 操作系统 | Ubuntu 22.04 LTS |
| 编译器 | Clang 21 / GCC 15 |
| 构建类型 | Release (-O3) |
| CPU | 多核 x86_64 |
| 内存 | 16GB+ RAM |
| 建议 | 说明 |
|---|---|
| 使用多线程 |
--threads N 设为 CPU 核心数 |
| 增大 batch size | 大文件场景下提升吞吐 |
| 压缩输出 |
.gz 后缀自动启用压缩 |
| Release 构建 | 确保使用 -O3 -march=native
|
| 关闭调试日志 |
-q 静默模式减少 I/O 开销 |
| 问题 | 解决 |
|---|---|
| 构建失败 | 确保已安装 Google Benchmark:conan install . --build=missing
|
| 结果不稳定 | 关闭其他 CPU 密集程序、增加 --repetitions、使用 Release 构建 |
| 图表生成失败 | pip install matplotlib |
- Architecture — 并发模型与性能设计
- Build and CI — 构建系统
- Code Quality Tools — 分析与调优工具
FastQTools © 2026 LessUp · MIT License · 在线文档 · Issues
FastQTools v3.1.0
🚀 快速上手
🏗️ 架构与设计
🔧 构建与部署
🧪 质量工程
📖 规范与参考
🔗 外部链接