| 项目 | 配置 |
|---|---|
| CPU | Intel Core i7-10700 @ 2.90 GHz, 8 核 16 线程, Turbo 4.8 GHz |
| 缓存 | L1d 256 KiB / L1i 256 KiB / L2 2 MiB / L3 16 MiB |
| SIMD | SSE4.2, AVX2 (256-bit) |
| 内存 | 32 GB DDR4 |
| 存储 | Samsung 970 EVO Plus 250 GB NVMe SSD + ST 10 TB HDD |
| 操作系统 | Ubuntu 20.04.6 LTS, Linux 5.4.0 |
| 编译器 | GCC 9.4.0 |
| 构建 | CMake 3.16.3, Release (-O2) |
| Python | 3.8.10 + PyArrow + Pandas |
| 编号 | THREADS | SIMD | MEM_STAT | 用途 |
|---|---|---|---|---|
| C1 | OFF | OFF | OFF | 串行 + 标量基线 |
| C2 | ON | OFF | OFF | 仅多线程 |
| C3 | OFF | ON | OFF | 仅 SIMD |
| C4 | ON | ON | OFF | 多线程 + SIMD(生产配置) |
| C5 | ON | ON | ON | 生产 + 内存追踪 |
| 项目 | 值 |
|---|---|
| 总行数 | 200M |
| 设备数 | 10(每设备 20M 行) |
| TAG 列 | 2 × STRING |
| FIELD 列 | 8(INT32 × 2, INT64 × 2, FLOAT × 2, DOUBLE × 2) |
| 编码 | TS_2DIFF(整型), GORILLA(浮点) |
| 压缩 | SNAPPY |
| Batch | 65,536 行 |
| 写入模式 | 顺序写入 + 混合写入 |
| 编号 | 变化维度 | 值 | 用途 |
|---|---|---|---|
| W1 | FIELD 列数 | 4 / 8 / 16 | 第四章并行化、第六章端到端 |
| W2 | 压缩算法 | LZ4 / SNAPPY / ZSTD | 第四章加速比 |
| W3 | 时间过滤选择率 | 1% / 10% / 50% / 90% / 100% | 第五章过滤、第六章端到端 |
| W4 | 内存预算 | 8 / 16 / 32 / 64 / 128 MB | 第三章内存约束 |
| W5 | batch_size | 1K / 4K / 16K / 64K | 第三章读取内存 |
| W6 | 线程数 | 1 / 2 / 4 / 8 | 第四章并行化 |
每个实验只变化一个维度,其余保持基线 W0。
F3-0 与 F3-1/F3-2 形成对照:无 flush 时内存单调递增,有 flush 时 $M_{\text{data}}$ 呈锯齿但 $M_{\text{meta}}$ 仍递增——引出文件轮转的必要性。
| 编号 | 类型 | 描述 | 状态 |
|---|---|---|---|
| F3-0 | 图 | 无 flush 基线内存曲线(动机对照) | TODO |
| F3-1 | 图 | 顺序写入内存曲线(有 flush) | ✅ 已有 |
| F3-2 | 图 | 混合写入内存曲线(有 flush) | ✅ 已有 |
| F3-3 | 图 | 读取内存 vs batch_size 折线图 | TODO |
| F3-4 | 图 | 不同内存预算写入吞吐对比 | TODO |
| T3-1 | 表 | 写入各模块内存分布 | ✅ 已有 |
| T3-2 | 表 | 顺序写入 flush 事件 | ✅ 已有 |
| T3-3 | 表 | 混合写入 flush 事件 | ✅ 已有 |
| T3-4 | 表 | 两种写入模式对比 | ✅ 已有 |
| T3-5 | 表 | 写入内存模型精度验证 | ✅ 已有 |
| T3-6 | 表 | 读取内存模型精度验证 | TODO |
| T3-7 | 表 | 不同内存预算写入性能 | TODO |
| 编号 | 类型 | 描述 | 状态 |
|---|---|---|---|
| F4-1 | 图 | 写入加速比曲线(实测 vs Amdahl) | TODO |
| F4-2 | 图 | 读取加速比曲线(实测 vs Amdahl) | TODO |
| T4-1~T4-3 | 表 | 写入吞吐矩阵(3 种压缩) | TODO |
| T4-4~T4-6 | 表 | 读取吞吐矩阵(3 种压缩) | TODO |
| T4-7 | 表 | α 实测 vs 估算 | TODO |
| T4-8 | 表 | 多线程 + SIMD 叠加效果 | TODO |
blocks_total、blocks_skipped_by_peek、blocks_decoded(用于辅助分析)层面:解码器微基准(直接操作 ByteStream,无文件 I/O)
编译:同一程序,编译宏 USE_LOOKAHEAD ON/OFF 切换方案
负载:内存中生成的不规则采样数据,变化 target_bw(0/4/8/12)
两个子实验:
E5-4a(skip rate):构造查询起始时间落在幻影区间,统计两种方案的 phantom block 数量
E5-4b(查询延迟):标准 10% 选择率查询,重复 1000 次取中位数
预期:
2^bit_width_ 成正比(实验验证理论公式)| 编号 | 类型 | 描述 | 实验 | 状态 |
|---|---|---|---|---|
| F5-1 | 图 | 时间过滤吞吐 vs 选择率 | E5-2 | TODO |
| F5-2 | 图 | 延迟物化解码比例 vs 选择率 | E5-2 | TODO |
| F5-3 | 图 | phantom block 数 vs bit_width_(A vs C) | E5-4a | TODO |
| T5-1 | 表 | 编码吞吐 SIMD ON/OFF | E5-1 | TODO |
| T5-2 | 表 | 解码吞吐 SIMD ON/OFF | E5-1 | TODO |
| T5-3 | 表 | 时间过滤吞吐 × 选择率 | E5-2 | TODO |
| T5-4 | 表 | AVX2 vs 标量跨平台对比 | E5-3 | TODO |
| T5-5 | 表 | skip rate × bit_width_(方案 A vs C) | E5-4a | TODO |
| T5-6 | 表 | 查询延迟 × bit_width_(方案 A vs C) | E5-4b | TODO |
tsfile.to_dataframe() vs pyarrow.parquet.read_table()to_dataframe() 端到端to_dataframe(as_iterator=True),监测 Python 进程 RSS| 编号 | 类型 | 描述 | 状态 |
|---|---|---|---|
| F6-1 | 图 | 流式迭代内存峰值 vs 文件大小 | TODO |
| T6-1 | 表 | TsFile vs Parquet 端到端吞吐 | TODO |
| T6-2 | 表 | 优化透传效果(逐步开启) | TODO |
pip3 install pyarrow pandas第三章(C5 为主) E3-1 写入内存模型验证 → F3-1, F3-2, T3-1~T3-4 (已有,确认可复现) E3-2 写入内存模型精度 → T3-5 (已有) E3-3 读取内存模型验证 → F3-3, T3-6 E3-4 不同内存预算写入性能 → F3-4, T3-7 第五章(C1 vs C3,E5-4 另用编译宏) E5-4 块级过滤方案 A vs C → F5-3, T5-5, T5-6 ← 优先,验证方案 C 贡献 E5-1 编解码吞吐对比 → T5-1, T5-2 E5-2 时间过滤 + 延迟物化 → F5-1, F5-2, T5-3 E5-3 跨平台对比 → T5-4 第四章(C2 为主,C1/C3/C4 补充) E4-1 写入并行加速比 → F4-1, T4-1~T4-3 E4-2 读取并行加速比 → F4-2, T4-4~T4-6 E4-3 α 实测 → T4-7 E4-4 多线程 + SIMD 叠加 → T4-8 第六章(C4,Python 层) E6-1 TsFile vs Parquet → T6-1 E6-2 优化透传效果 → T6-2 E6-3 流式迭代内存控制 → F6-1
把实验数据填入各章 LaTeX 表格和图。
| 章 | 图 | 表 | 已有 | TODO |
|---|---|---|---|---|
| 3 | 5 | 7 | 2 图 + 5 表 | 3 图 + 2 表 |
| 4 | 2 | 8 | 0 | 2 图 + 8 表 |
| 5 | 2 | 4 | 0 | 2 图 + 4 表 |
| 6 | 1 | 2 | 0 | 1 图 + 2 表 |
| 合计 | 10 | 21 | 7 | 8 图 + 16 表 |