ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Nushell 开发者如何运行解析器基准测试并用 parser-bench-throughput 脚本统计吞吐

Nushell 开发者如何运行解析器基准测试并用 parser-bench-throughput 脚本统计吞吐 Nushell 开发者如何运行解析器基准测试并用 parser-bench-throughput 脚本统计吞吐【免费下载链接】nushellA new type of shell项目地址: https://gitcode.com/GitHub_Trending/nu/nushell在 Nushell 仓库中做解析器相关的性能工作时你需要一条固定的操作路径先运行parser_*系列的 tango 基准测试并把完整输出落盘再用仓库自带的 parser-bench-throughput.nu 脚本解析日志得到每个基准项的字符/字节吞吐chars/sec、bytes/sec。本文覆盖这条主路径从准备环境、运行测试、定位日志文件到验证吞吐报表以及脚本给出的报错如何判断。适用前提你在 Nushell 仓库根目录下工作装有 Rust 工具链cargo可用并且仓库使用 tango-benchCargo.toml 中固定为 0.7.2作为基准框架基准目标位于 benchmarks.rs。parser_* 基准项的命名与数据集吞吐脚本之所以能自动算出吞吐依赖基准名称中编码的数据规模。benchmarks.rs 中的注释明确了命名格式parser_stage_dataset_sizeb_charscstage是解析阶段lex只分词不建 AST、litetokens 转 LiteBlock即流水线结构、parse_blocktokens 转 Block生成 AST 不编译、parse完整流水线lex lite AST 编译dataset是输入数据small约 127 字节的合成短流水线、medium80 条命令的合成流水线规模可预测、large整个crates/nu-std/std目录拼接后的全部 .nu 源码、real_worldtoolkit/mod.nu代表性的 Nushell 脚本尾部127b_125c这样编码的字节数/字符数是 parser-bench-throughput.nu 用正则提取、换算吞吐的依据例如parser_lex_small_127b_125c。准备条件在 Nushell 仓库根目录scripts/与benches/所在层级。cargo可用——运行脚本内部就是调用cargo bench。构建过 debug 版的nu即存在./target/debug/nu可用cargo build得到。两个脚本都用它来执行parser-bench-run.nu 会调用外部^cargoparser-bench-throughput.nu 的用法示例也直接以./target/debug/nu作为解释器。第一步运行 parser_* 基准测试并保存日志在仓库根目录执行./target/debug/nu scripts/parser-bench-run.nu该脚本的行为见 parser-bench-run.nu 源码默认参数--filter parser_*tango 的 glob 过滤只跑名称匹配的基准项、--bench benchmarksbench target 名对应 benches/benchmarks.rs、--out-dir target/parser-bench副作用说明会创建target/parser-bench/目录实际执行的是cargo bench --bench benchmarks -- solo --filter parser_*即编译并运行匹配的基准耗时取决于机器输出stdout stderr合并后保存到日志文件成功后打印Saved parser benchmark log to (路径)并输出该路径失败cargo 非零退出时打印Cargo bench failed with exit code (code)并给出Review output: 日志路径的提示。日志文件名由 bench 名、过滤词和时间戳拼成。默认参数下过滤词parser_*中的*被替换为_文件名形如target/parser-bench/benchmarks-parser__-20260519-125213.log其中时间戳按运行时刻生成上值为脚本用法示例中的文件名样例实际以脚本打印的路径为准。想只跑某一阶段可以显式传参例如./target/debug/nu scripts/parser-bench-run.nu --filter parser_lex_*第二步用 parser-bench-throughput.nu 统计吞吐拿到日志路径后执行把日志文件替换为第一步实际打印的路径./target/debug/nu scripts/parser-bench-throughput.nu 日志文件 # 例如 ./target/debug/nu scripts/parser-bench-throughput.nu target/parser-bench/benchmarks-parser__-20260519-125213.log脚本参数见 parser-bench-throughput.nu 的main签名log_file位置参数必填第一步生成的日志文件--name-prefix基准名前缀过滤默认parser_--time-unit吞吐的时间基默认micro可选sec、milli、micro、nano对应表头单位即chars/unit、bytes/unit。脚本内部流程逐行按正则提取形如parser_... 数值时间单位 ...的 tango 输出行把时间统一换算成秒再从基准名尾部提取字节/字符数算出chars_per_unit与bytes_per_unit按基准名去重排序后输出。结果验证脚本正常时会依次打印三部分内容Throughput summary (derived from benchmark timing, unit: unit):—— 完整表格列为benchmark、chars、bytes、seconds、time_unit、chars_per_unit、bytes_per_unitHeadline metric candidates (chars/unit):—— 按chars_per_unit降序的前 5 名只含benchmark和chars_per_unit两列Benchmark logfile: 日志路径以及日志原文回显。表格中每个parser_*项都有非空吞吐数值即说明日志解析成功。注意这里的数值是你本机本次运行的测量结果脚本注释也标明其适用于 Nushell 0.112.2 版本的输出格式不要把它当成固定的预期基准值。报错判断脚本在三种情况下会显式报错均来自 parser-bench-throughput.nu 源码报错触发条件处理Missing required argument: log_file没传日志文件位置参数补上第一步打印的日志路径unsupported time unit: unit--time-unit不在sec/milli/micro/nano内换成支持的值no parser benchmark rows were parsed日志里没有匹配parser_*且带时间单位的行确认日志确实来自parser_*过滤的 tango solo 输出若日志本身正常但仍解析不到检查所用 nu 版本与日志格式是否匹配另外benchmarks.rs 中large数据集的说明指出如果crates/nu-std/std目录不可读基准会直接 panic 以保证失败可见运行cargo bench阶段若崩溃可先排查这一点。可选分支对比两个修订版本如果你的目标不是单看吞吐而是对比当前分支与某个修订版本的差异benches/README.md 给出的是另一条路径use toolkit.nu # 当前分支对比 main toolkit benchmark-compare # 或对比指定的两个 git 修订 toolkit benchmark-compare target reference该命令定义在 benchmark.nu会切换分支、分别cargo export出两套产物并用 tangocompare输出到./tango目录因此前提文档里写明了需要安装cargo-export且会执行git checkout切换分支。它和本文主路径是两种用途——前者做 A/B 对比后者统计单次运行的吞吐不要把两者放在同一次操作链里执行。边界小结吞吐脚本只对 tango solo 输出中符合parser_name [数值 单位 ...]形式的行有效其他基准项glob、table、record 等虽然也在同一个 bench target 里但默认--name-prefix parser_已将其排除seconds、chars、bytes列是脚本从日志推导出来的原始量chars_per_unit/bytes_per_unit是按所选时间基换算的吞吐换--time-unit时数值会按倍数变化含义不变所有路径target/parser-bench/、日志文件都在仓库目录内产生运行后如不需要可自行管理这些产物脚本本身不会删除它们。【免费下载链接】nushellA new type of shell项目地址: https://gitcode.com/GitHub_Trending/nu/nushell创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表