Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

性能

PurRDF 的性能是测量出来的,而从不是断言出来的。项目文档中的任何数字都不是保证:基准测试仅作报告用途、对计时敏感,并随宿主、CPU、分配器与构建标志而变化。应把每个数字视为依赖于宿主、需在本地复现的示例——而不是「快 N 倍」的承诺。方法论与一张具有代表性的结果表见 docs/BENCHMARKS.md。

按构造即快速

驻留的 RdfDataset IR(驻留数据集 IR)在字符串存储区中驻留词法文本,并以组成项 ID 存储三元组项。其可复制的 TermId 使用 NonZeroU32;独立的全局地址空间在 GlobalTermId 中使用 NonZeroU64。热点映射使用固定密钥的 FixedHasher。冻结四元组行带有惰性序数置换索引(每个已构建的置换中,每个四元组占四个字节)。显式的不含图分量的 TripleDataset 具有三个组成项的行,以及独立的具体化节点和注解表。求值在驻留 ID 上进行。

布局比较位于 crates/rdf-core/benches/ir_layout.rs。该基准套件在同一组冻结四元组上,将驻留四元组行存储与数组结构体、谓词邻接两种备选布局进行比较,报告分配次数、内存高水位和端到端延迟。它还报告不含图分量的载体的物理行表与已构建的序数索引。每项结果都只适用于其测量时的源码、工作负载和宿主。

两层基准测试

层测量内容运行方式
Rust 基准套件原生引擎的热路径——IR 布局、写时复制的变更、打包索引的备选方案、编解码器、图/表格/Research Object 投影、SPARQL 词法分析/求值/规划、SHACL 验证、蕴涵 chase、GTS 编写、IRI 解析。make bench
Python 兼容测试框架purrdf.compat.rdflib(由原生实现支撑的直接替换方案)对比真正的 rdflib 7.x,在确定性的 example.org 语料上测量解析、序列化、SPARQL 与三元组模式迭代。make bench-python

两层都仅作报告用途:它们从不属于 make check,也没有任何测试关卡断言加速。

变更的纪律

任何声称带来性能提升的变更都必须扩展基准测试,而不是在行文中断言加速。当规划器或算法的选择对与正确性相关的行为有影响时,它由_确定性_测试而非计时来把关——例如,基于代价的 BGP 规划器优于已退役的结构性启发式方法,这一点由统计真实中间行数的单元测试以及一项差分语料测试来断言,而基准测试只负责监视性能回退。

NativeSparqlEngine::explain_query 公开所选的 BGP 连接顺序,因此无须运行查询即可审计规划器的决策(SPARQL:查询)。

Rust、LLVM 与硬件路径

Rust 与 SIMD 优化指南 说明源码的表达方式、数学约定、汇编检查和测量规范。其中关于哈希与压缩的章节涵盖常量下标与位旋转、有界轮次展开、SIMD 分块与父节点批处理、流式状态、直接写入输出的方式以及内存分配下限。指南明确区分指令覆盖情况与在目标硬件上测得的吞吐量。

在本地复现

make bench                              # 默认的基准集合
cargo bench -p purrdf-iri --bench parse # 单个包的基准测试
cargo bench -p purrdf-core --bench pack_index_compare # 打包索引实验
cargo bench -p purrdf-rdf --bench projections -- --quick # 投影/载体样例
make bench-python                       # rdflib 对比测试框架

应在安静的机器上进行基准测试,并在同等条件下比较:分配器、CPU 频率调节与构建标志都会改变数字。