
Sway 仓库性能数据临时目录test/perf_out全解析文件规范、忽略策略与just pr清理流程【免费下载链接】sway Empowering everyone to build reliable and efficient smart contracts.项目地址: https://gitcode.com/GitHub_Trending/sw/swaytest/perf_out是 Sway 语言编译器仓库Fuel 生态的智能合约语言中存放测试运行时采集的性能数据临时文件的专用目录包括*-gas-usages-*.csvGas 用量与*-bytecode-sizes-*.csv字节码体积两类 CSV。本指南围绕该目录的定位、文件命名与格式、Git 忽略策略、以及通过just prperf-remove一键清理的完整工作流展开并延伸到仓库中负责生成、提取、对比这些性能数据的配套脚本与justrecipe帮助你在分析 Sway 编译产物性能后正确管理和清除本地临时数据。目录定位临时性能数据的集中落盘点根据 test/perf_out/README.md 的说明perf_out目录的作用非常明确存放从测试中收集到的性能数据的临时文件。这些文件来自仓库对编译产物智能合约字节码的性能基准测试核心关注两个指标Gas 用量gas usages合约执行消耗的 Gas 数量衡量运行成本字节码体积bytecode sizes编译产物的大小以字节计衡量部署成本。与之对应目录中的文件遵循两类命名模式*-gas-usages-*.csvGas 用量数据*-bytecode-sizes-*.csv字节码体积数据。README 中“cvs”为拼写笔误实际生成文件后缀均为.csv下文源码会证实这一点。从源码结构看这两类数据在仓库中由测试主程序统一采集。在 test/src/main.rs 中测试 CLI 提供了--perf-only参数其文档注释明确写着只运行会产出性能数据gas usages 和 bytecode sizes的测试而--perf参数test/src/main.rs则负责将性能数据写入文件系统输出文件被写入test/perf_out目录。写入逻辑可以在 test/src/e2e_vm_tests/mod.rs 中确认代码使用env!(CARGO_MANIFEST_DIR)拼出{repo}/perf_out路径以时间戳为前缀、附带构建 profile如release和当前 Git 分支名生成 CSV 文件名例如{timestamp}-e2e-{build_profile}-{branch_name}.csv随后分别调用write_stats_to_file写出Bytecode sizes与Gas usages两组数据。可见perf_out是仓库性能测试链路的出口所有临时统计结果统一汇入此处。为什么这些文件被.gitignore忽略README 明确指出这些性能数据文件是被 .gitignore 忽略的The performance data are .gitignored。也就是说它们属于本地分析用的临时产物不应进入版本控制。仓库根目录的 .gitignore 中对应规则为**/*/*gas-usages-*.csv **/*/*gas-usages-*.md **/*/*gas-usages-*.html **/*/*bytecode-sizes-*.csv **/*/*bytecode-sizes-*.md **/*/*bytecode-sizes-*.html需要注意忽略规则覆盖了三种扩展名.csv、.md、.html。原因在于性能数据的对比与可视化产物也可能以 Markdown 表格如perf-diff的 md 输出或 HTML 报告如perf-snapshot-historical的 pivot 表形式生成它们同样是临时文件因此一并忽略。这里有一个实践细节由于perf_out目录本身并没有被整目录忽略而是按文件名模式忽略因此目录可以保留在仓库中存放上述 README 说明文件而其中的性能数据文件会被 Git 自动排除不会污染提交历史。数据从哪里来Gas 用量与字节码体积的采集链路要理解perf_out中 CSV 的每一行数据需要回溯其上游采集逻辑。仓库的性能数据主要有三个来源对应just的 performance 组 recipe定义于 justfileRecipe别名数据来源说明perf-e2epe2eE2E 测试cargo r -r -p test -- --release --kind e2e --perf-only --perf filter只运行产出性能数据的 E2E 用例perf-in-langpil语言内测试运行run_in_language_tests.sh并抽取 gas 与字节码数据perf-storagepst存储基准运行storage_benchmarks/bench.sh聚焦 storage 字段与 StorageVecperf-allpa以上全部依次执行 E2E、语言内、存储三组采集在 E2E 链路中test/src/e2e_vm_tests/mod.rs测试运行器把每个测试的bytecode_size与gas_used收集进PerfData按完整测试名排序后交给统计写出函数最终按(测试名, 指标值)的二元组写入 CSV。从forc test/forc build输出中提取perf-in-lang的数据并不直接由测试程序生成而是通过解析编译输出得到的。以 scripts/perf/extract-gas-usages.sh 为例该脚本从forc test的输出中匹配tested -- suite行与test name ... N gas)行产出suite::test_name,gas两列 CSV若传入第一个参数则作为第三列例如时间戳/提交信息追加。使用方法形如forc test | scripts/perf/extract-gas-usages.shscripts/perf/extract-bytecode-sizes.sh 则更进一步它兼容forc test与forc build两种输出只提取release 构建的体积匹配Finished release ... target(s) [size]行debug 构建被忽略并用最近的tested --项目名或最后一次Compiling的项目名来归属体积数据。该脚本还处理了两个工程细节剥离 ANSI 转义序列——forc即使在管道环境下也会输出颜色代码十进制单位的精确换算——forc打印体积时使用 base-1000 的十进制单位如[21.68 KB]表示 21680 字节而非 21.68×1024脚本用awk将其还原为精确字节数。因此perf_out中*-bytecode-sizes-*.csv的数值是精确字节数而不是格式化后的近似字符串。从 Git 历史中回溯快照测试的 Gas 演变除了实时采集仓库还支持从历史提交中提取 Gas 数据。justfile 中的perf-snapshot-historical别名psh针对包含forc test输出的stdout.snap快照测试遍历git log给出的修订区间如HEAD~10..HEAD对每个历史版本的快照调用extract-gas-usages.sh并附上提交日期与哈希生成*-snapshot-gas-usages-historical-*.csv还可以选择html格式通过 scripts/csv2html/csv2html.sh 输出交互式透视表用于可视化某个测试的 Gas 用量随提交的演变趋势。这类历史性文件同样落在perf_out目录中且同样被.gitignore覆盖。just pr一键清理性能数据README 给出的核心操作指令是分析完成后调用just pr删除本地所有性能数据临时文件。pr是perf-remove这个justrecipe 的别名其完整定义在 justfile 中。just pr该 recipe 的实际行为justfile分为三步用find . -type f \( -name *-gas-usages-*.* -o -name *-bytecode-sizes-*.* \)递归扫描整个仓库而非仅perf_out目录匹配两类文件并排序展示若没有匹配文件直接输出 No performance data files to remove. 并退出exit 0若有匹配文件先列出将删除的清单然后交互式询问Do you want to proceed with removing? [y/N]仅当输入y或Y时才执行删除否则打印 Removing canceled.。也就是说just pr是一个带确认保护的清理命令避免误删。由于扫描范围是整个仓库根目录即使性能数据被生成到其他路径例如storage_benchmarks子目录参见 test/src/e2e_vm_tests/test_programs/should_pass/storage_benchmarks/perf_out/README.md也能被一并清理。配套工具查看与对比性能数据在清理之前通常需要先分析数据。仓库为此提供了一组配套命令均在 justfile 的 performance 组内Recipe别名作用perf-listpl用find列出仓库中所有*-gas-usages-*.*与*-bytecode-sizes-*.*文件并排序便于确认待分析/待清理的目标perf-diffpd对比两个 CSVjust pd before.csv after.csv [md\|csv]输出 Markdown 表格或 CSV含Test/Before/After/Percentageperf-diff-statspds对perf-diff的输出做统计汇总改善/回归的数量、平均值、中位数、最大值、最小值百分比输出 Markdown 表格perf-diff-latestpdl自动对比perf_out中每个类别e2e 与 in-language 的 gas/bytecode 共四类最新两份CSV依次生成 diff 与 stats其中perf-diff的实现scripts/perf/perf-diff.sh有两个值得注意的约束两个 CSV 的测试名必须完全一致且顺序相同脚本先用awk提取第一列去除首尾空白做diff校验不一致则报错退出exit 3只输出发生变化的行before ! after并以(after - before) / before × 100%计算百分比若 before 为 0 则标记为NaN。perf-diff-statsscripts/perf/perf-diff-stats.sh从 diff 的第四列百分比中分离正负值分别统计 Improvements 与 Regressions 的 Count、Average、Median、Max、Min并强制使用LC_ALLC保证小数点解析一致——这正是一份标准性能回归报告的雏形。perf-diff-latestscripts/perf/perf-diff-latest.sh则面向快速查看最近两次采集的差异它按e2e-gas-usages、e2e-bytecode-sizes、in-language-gas-usages、in-language-bytecode-sizes四个类别通过文件名的时间戳前缀排序取最新两份跳过-historical-与-diff-文件然后自动调用perf-diff与perf-diff-stats并把结果以{now}-diff-{category}-{before_ts}-vs-{after_ts}.{fmt}和{now}-stats-{category}-{before_ts}-vs-{after_ts}.md的命名写入perf_out目录——也就是说对比结果文件本身也落在perf_out中同样符合 README 所述的临时文件语义并可用just pr一并清理。推荐工作流小结结合以上内容围绕test/perf_out的完整闭环通常是采集just perf-e2e filter/just perf-in-lang filter/just perf-all数据以时间戳命名的 CSV 落盘到test/perf_out查看just perf-list确认生成的文件对比just perf-diff-latest md自动对比最新两份或just perf-diff before after md手动指定必要时用just perf-diff-stats得到统计汇总清理分析完成后执行just pr即perf-remove交互确认后删除所有*-gas-usages-*.*与*-bytecode-sizes-*.*临时文件保持仓库工作区干净。test/perf_out是 Sway 仓库性能分析体系中一个小而关键的枢纽它承接采集端E2E、语言内测试、存储基准、历史快照与消费端diff、stats、可视化的所有中间产物又通过.gitignore与just pr确保这些临时文件不会污染版本库。理解它的文件规范与清理命令是上手 Sway 编译产物性能分析的第一步。【免费下载链接】sway Empowering everyone to build reliable and efficient smart contracts.项目地址: https://gitcode.com/GitHub_Trending/sw/sway创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考