DDAQ 存盘程序优化与长时间采集测试报告

测试日期:2026-10-15~2026-10-18
报告日期:2026-10-18

1. 存盘程序优化

1.1 扩大 DMA 缓冲与写入队列

项目 V1.2 V1.3 作用
默认 BD 数量 64 640 增加可暂存的数据量
每个 BD 大小 1,310,720 字节 不变 保留原有 DMA 数据块大小
DMA 环缓冲总容量 80 MiB 800 MiB 容量扩大 10 倍,吸收较长写入停顿
异步写入队列深度 16 64 增加可并行等待完成的写入请求

以 160 通道、2 MHz、16 bit 的 640 MB/s 输入计算,80 MiB 和 800 MiB 分别相当于约 0.131 s、1.311 s 的数据量。

1.2 调整文件存储与切换方式

项目 V1.2 V1.3
文件空间 打开文件后随写入扩展,无整文件预分配 使用 fallocate 预分配目标文件空间
文件切换 主接收流程排空写入、同步、关闭旧文件,再打开新文件 排空旧文件写入后,将同步收尾交给后台线程,切换到提前准备的文件
后台维护 文件创建和同步关闭由主流程承担 独立维护线程负责文件预分配、同步关闭及 JSON 更新
末文件长度 物理长度等于已写入长度 保留预分配长度,JSON 文件区分有效区与未写零填充尾部
数据说明 BIN,无任务级 JSON 清单 BIN + 任务 JSON,记录格式、通道映射、有效范围和同步结果

2. 程序优化后获得的实测表现

能力 实测结果
3卡、96 通道持续存盘 2 MHz、标称 384 MB/s,完成约 1.642 TB 长采,计数一致、无报告丢数
5 卡、160 通道持续存盘 2 MHz、标称 640 MB/s,完成约 1.644 TB 长采,计数、文件大小及填充检查通过
最新优化 SDK 回归 完成约 1.503 TB、470 文件长采,计数、JSON、文件大小及填充检查通过
写入波动 写入完成延迟最高约 439 ms,大缓冲配置随后恢复,未报告丢数
最终数据交接 真实长采中 PL 输出字节增量、DMA 接收量和应用写入量一致,文件均记录同步完成

3. 典型测试条件与结果

3.1 测试条件

项目 条件
平台 DDAQ 开发板,Linux 6.1.30-xilinx-v2023.2
存储 /dev/nvme0n1,ext4,挂载于 /run/media/DDAQ_NVME-nvme0n1
采集方式 PS 配置,stream,每通道 2 MHz,96 或 160 通道
数据格式 int16 小端;96 通道每帧 192 字节,160 通道每帧 320 字节
V1.3 测试配置 640 个 BD、800 MiB 环缓冲、写入队列深度 64

3.2 代表性结果

编号 日期 测试 有效数据量/字节 结果
T01 10-15 V1.2,缓冲较小,96 通道真实存盘 343,583,068,992 未通过,drop_busy 增加 498,674,退出 1
T02 10-15 V1.3,96 通道约 15 分钟存盘 345,599,700,288 计数及 JSON 同步记录通过,退出 0
T03 10-15 V1.3,96 通道长采,启停约 71 分 35 秒 1,641,976,893,120 计数及 JSON 同步记录通过,退出 0
T04 10-16 V1.3,96 通道 DMA 丢弃,约 75 分钟 1,714,547,375,232 接收量等于丢弃量、计数通过,退出 0
T05 10-16 V1.3,160 通道长采,启停约 43 分钟 1,643,516,875,840 计数、JSON、实际文件大小及填充通过,退出 0
T06 10-18 V1.3,160 通道长采,启停约 39 分 28 秒 1,503,131,569,920 计数、JSON、实际文件大小及填充通过,退出 0

3.3 两次 160 通道长采的文件检查

项目 T05:10-16 长采 T06:10-18 最新长采
BIN 文件数 86 470
每文件物理大小/字节 19,200,000,000 3,200,000,000
最后文件有效数据/字节 11,516,875,840 2,331,569,920
最后文件零填充/字节 7,683,124,160 868,430,080
全部文件大小检查 通过 通过
完整尾部零填充读取 通过 通过
JSON 文件同步记录 全部为 true 全部为 true
板端检查退出码 0 0

4. 仍存在的速度波动

测试 最长写入完成观测延迟 周期状态采样中的最大积压
T02:96 通道,约 15 分钟 272.400 ms 47 个 BD,58.75 MiB
T03:96 通道长采 296.929 ms 71 个 BD,88.75 MiB
T05:160 通道长采 439.334 ms 488 个 BD,610 MiB,占总缓冲 76.25%
T06:最新 160 通道长采 423.628 ms 290 个 BD,362.5 MiB,占总缓冲 45.31%

T06长采中的一次恢复过程:

elapsed=657.1s  write_rate=565.141MB/s  pending=64  hw_bd=350  done_bd=226  user_bd=64
elapsed=662.1s  write_rate=715.638MB/s  pending=1   hw_bd=639  done_bd=0    user_bd=1

写入完成短暂滞后后,缓冲得到追赶处理,没有发展为持续积压。

5. 结论

V1.3 通过扩大缓冲、加深队列以及文件预分配和后台维护,改善了长时间采集的写入稳定性。在已测硬件与配置下,完成了 96 通道约 384 MB/s、160 通道约 640 MB/s 输入工况的 TB 级存盘验证,未报告丢数。


本文章使用limfx的vscode插件快速发布