32个稳定版本
1.22.0 | 2024年5月23日 |
---|---|
1.21.0 | 2024年3月10日 |
1.20.0 | 2024年2月10日 |
1.18.0 | 2023年12月28日 |
1.13.0 | 2023年7月26日 |
#101 在 命令行工具
每月186次 下载
620KB
13K SLoC
fastPASTA
ALICE的快速协议分析扫描工具
有关通过“check”子命令执行的数据验证的完整列表,请参阅doc/checks_list.md。
发布和相关的变更日志可以在发布或CHANGELOG.md中找到。
在示例文档中查看更多示例,包括高级场景。
需要更多细节?请参阅开发者文档部分。
目的
用于验证或查看CERN ALICE探测器扫描的原始二进制数据的精选内容。
演示
目录
快速入门
先决条件
需要rust工具链来编译二进制文件。使用链接下载Windows安装程序。在macOS、Linux或其他类Unix操作系统上,只需运行
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
并遵循屏幕上的说明。
通过cargo安装(与Rust一起提供)
cargo install fastpasta
更新fastpasta只需重新运行cargo install fastpasta
添加shell补全
使用以下命令为bash/zsh/fish/powershell/elvish生成完成脚本
fastpasta --generate-completions <SHELL> > path/to/your/completion/scripts/_fastpasta
查看帮助,包括使用示例
fastpasta -h
使用示例
从stdin读取 -> 过滤链接 -> 查看RDHs
lz4 -d input.raw -c | fastpasta --filter-link 3 | fastpasta view rdh
# ^^^^ ^^^^ ^^^^
# INPUT ---> FILTER ---> VIEW
# Decompressing with `lz4`
管道通常不是必需的,避免使用它可以提高性能。例如,以下示例与上一个示例等效,但通过使用更少的管道,节省了大量的I/O开销。
lz4 -d input.raw -c | fastpasta --filter-link 3 view rdh
从文件读取 -> 按链接过滤 -> 验证
启用所有通用检查:sanity
(无状态)和running
(有状态)
fastpasta input.raw --filter-link 0 check all
启用所有sanity
检查,并包含仅适用于ITS
的检查
fastpasta input.raw check sanity its --filter-link 0
从文件读取 -> 使用less
查看ITS读取帧
生成ITS读出帧视图
fastpasta input.raw view its-readout-frames | less
仅查看来自链接#3的读出帧
fastpasta input.raw view its-readout-frames -f 3 | less
命令流
flowchart TD;
start["fastpasta"] --> top_sub_cmd{"Check or view?"};
top_sub_cmd -- "view" --> view_type{"Type of view"};
view_type -- "rdh" --> view_rdh{{$ fastpasta view rdh}};
view_type -- "its-readout-frames" --> view_ro_frames{{$ fastpasta view its-readout-frames}};
view_type -- "its-readout-frames-data" --> view_ro_frames_data{{$ fastpasta view its-readout-frames-data}};
top_sub_cmd -- "check" --> check_type{"Type of check"};
check_type -- "sanity" --> check_sanity{"$ fastpasta check sanity
or
target system"};
check_sanity -- "its" --> check_sanity_its{{$ fastpasta check sanity its}};
check_type -- "all" --> check_all{"$ fastpasta check all
or
target system"};
check_all -- "its" --> check_all_its{{$ fastpasta check all its}};
check_all -- "its-stave" --> check_all_its_stave{{$ fastpasta check all its-stave}};
自定义检查
使用自定义检查进行配置
要执行对原始数据的非常具体的检查,可以使用--checks-toml <PATH>
选项提供一个TOML
文件。
要开始,请使用--generate-checks-toml
标志生成一个模板,该模板显示了哪些自定义检查可用,包括描述和示例。
生成的TOML文件将包含如下内容
# Number of Physics (PhT) Triggers expected in the data
# Example: 0, 10
#triggers_pht = None [ u32 ] # (Uncomment and set to enable this check)
要启用对原始数据中1个物理触发的检查,编辑文件如下
# Number of Physics (PhT) Triggers expected in the data
# Example: 0, 10
triggers_pht = 1 # This data should contain 1 PhT trigger.
最后像往常一样运行fastPASTA,例如
fastpasta check all its input-data.raw --checks-toml custom_checks.toml
输出全面统计信息(并将它们输入以进行验证)
输出统计信息
在数据分析过程中收集了大量的统计数据。这些统计数据可以写入文件/stdout的JSON/TOML格式,例如可以作为输入到验证这些统计数据的脚本的输入。
示例
对bin.raw
中的数据进行stave级别的ITS相关检查,并将统计数据保存为stats.json
fastpasta check all its-stave --output-stats stats.json --stats-format json bin.raw
使用统计信息进行数据验证
输出统计数据也可以作为fastPASTA的输入,同时使用--input-stats-file <file>
选项对一些原始数据进行检查。这将运行输入统计数据与分析过程中收集的统计数据之间的完整比较,并为每个不匹配的值输出错误信息。
示例
验证对bin.raw
的分析找到与stats.json
中列出的相同的统计数据。
fastpasta check all its-stave --input-stats-file stats.json bin.raw
即使你并不完全确定所有的统计数据都是正确的,运行一次分析,然后使用输出统计数据文件作为CI中的参考,会让你知道这些统计数据输出是否在任何方面发生了变化,这可以作为有问题的提示(或确认行为正确更改)。
错误消息
消息格式如下
MEMORY_OFFSET: [ERROR_CODE] ERROR_MESSAGE
失败的RDH健全性检查示例
0xE450FFD: [E10] RDH sanity check failed: data_format = 255
错误代码
错误码是唯一的,且为2到4位数字。第一位数字表示错误的类别。以下是错误码及其含义的列表,x
是任何0-9数字的占位符。
- [Ex0] - 状态检查
- [E1x] - RDH
- [E3x] - IHW
- [E4x] - TDH
- [E5x] - TDT
- [E6x] - DDW0
- [E7x] - 数据字(偶数:IB,奇数:OB)E70是IB/OB的状态检查。
- [E8x] - CDW
- [E9xxx] - 来自自定义检查的错误
详细级别
- 0: 错误
- 1: 错误和警告 [默认]
- 2: 错误、警告和信息
- 3: 错误、警告、信息和调试
- 4: 错误、警告、信息、调试和跟踪
运行测试
使用以下命令运行完整的测试套件
cargo test
许可证
Apache 2.0或MIT任选。
项目状态
被动维护。没有新功能的计划,但维护者打算回应提交的问题。
基准和比较
下表将fastPASTA
与rawdata-parser
和decode.py
在典型验证任务中进行比较。使用超精细(Hyperfine)进行基准测试,并使用cache warmup
。
验证1.5 GB文件中所有RDH,数据来自1 GBT链接
工具 | 命令 | 平均值 ± σ [s] | 最小值 [s] | 最大值 [s] |
---|---|---|---|---|
fastPASTA | fastpasta 输入.raw 检查全部 |
0.195 ± 0.002 | 0.191 | 0.198 |
rawdata-parser | ./rawdata-parser --跳过数据包计数器检查input.raw |
1.638 ± 0.066 | 1.575 | 1.810 |
decode.py | python3 decode.py-i20522 -f 输入.raw--跳过数据 |
94.218 ± 0.386 | 93.914 | 94.811 |
验证3 GB文件中所有RDH,数据来自2个不同的GBT链接
工具 | 命令 | 平均值 ± σ [s] | 最小值 [s] | 最大值 [s] |
---|---|---|---|---|
fastPASTA | fastpasta 输入.raw 检查全部 |
0.409 ± 0.004 | 0.402 | 0.417 |
rawdata-parser | rawdata-解析输入.raw |
3.068 ± 0.028 | 3.012 | 3.105 |
decode.py | 不支持同时验证多个链路 | 不适用 | 不适用 | 不适用 |
验证260 MB文件中所有RDH和有效载荷,数据来自1 GBT链接
工具 | 命令 | 平均值 ± σ [s] | 最小值 [s] | 最大值 [s] |
---|---|---|---|---|
fastPASTA | fastpasta 输入.raw 检查全部 |
0.106 ± 0.002 | 0.103 | 0.111 |
rawdata-parser | 不支持验证有效载荷 | 不适用 | 不适用 | 不适用 |
decode.py | python3 decode.py-i20522 -f 输入.raw |
55.903 ± 0.571 | 54.561 | 56.837 |
需要更多性能?
fastPASTA 的主发布配置文件已经非常快了,但如果你绝对需要 10-20% 的额外速度,存在一个更快的构建配置文件,该文件使用实验性的 rust nightly
工具链。
背景
Rust 编译器 rustc
尚未提供其后端 LLVM
所具有的所有功能。但实验性的 nightly
Rust 工具链允许直接将标志传递给 LLVM
。fastPASTA 包含配置了构建配置文件 release-nightly
,它利用 LLVM
在编译时间和二进制大小代价下实现更多速度。截至本文写作时,Rust 的稳定渠道没有将编译器标志传递给 LLVM 后端的方法。增加的速度主要是通过配置更高的内联阈值实现的,这将增加速度,但也会增加编译时间和二进制大小,最重要的是,缓存压力。性能影响将高度依赖于 fastPASTA 运行的机器。更好的/更多的 CPU 缓存将导致更高的性能提升。对于 >1 GB 的单个链路数据,在运行 CentOS Stream 8 的 CERN 机器上的性能,通过 hyperfine
测量,提高了约 17%。
要安装夜间工具链(并检查您的安装)
rustup toolchain install nightly
rustup run nightly rustc --version
编译优化的release-nightly
实验构建配置文件
cargo +nightly build --profile release-nightly
二进制文件的路径:/target/release-nightly/fastpasta
开发者文档
使用 Just 运行项目中的常见命令,使用 cargo install just
安装,并检查 主 justfile 以获取可用的配方。
在项目根目录中运行 just
将显示可用的(公共)配方。
要了解数据在运行时是如何传递的,请参阅 数据流文档。
有关源代码的详细文档,请参阅 文档 或调用 cargo doc --open
。
依赖项
~14–25MB
~376K SLoC