ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何用 benchmark_driver 运行 Ruby 内置基准测试并比较两个解释器?

如何用 benchmark_driver 运行 Ruby 内置基准测试并比较两个解释器? 如何用 benchmark_driver 运行 Ruby 内置基准测试并比较两个解释器【免费下载链接】rubyThe Ruby Programming Language项目地址: https://gitcode.com/GitHub_Trending/ru/rubyRuby 仓库的benchmark/目录内置了一批基准测试定义.rb和.yml文件配套说明见 benchmark/README.md。如果你想在本地跑这些基准或者在“系统 Ruby”和“另一个 Ruby 解释器例如开了--jit的版本”之间做性能对比可以用benchmark_driver这个 gem 完成。本文的操作路径来自该 README 与仓库 Makefile 规则前提是你已经获取了 ruby 仓库源码并且能安装 Ruby gem。准备安装 benchmark_driverREADME 给出的第一步是安装 gemgem install benchmark_driver安装完成后命令行会出现benchmark-driver。它接受.rb或 YAML 基准文件作为参数并支持通过--help查看全部选项benchmark-driver --help--help输出的用法为benchmark-driver [options] RUBY|YAML... -r, --runner TYPE Specify runner type: ips, time, memory, once, block (default: ips) -o, --output TYPE Specify output type: compare, simple, markdown, record, all (default: compare) -e, --executables EXECS Ruby executables (e1::path1 arg1; e2::path2 arg2;...) --rbenv VERSIONS Ruby executables in rbenv (x.x.x arg1;y.y.y arg2;...) --repeat-count NUM Try benchmark NUM times and use the fastest result or the worst memory usage --repeat-result TYPE Yield best, average or worst result with --repeat-count (default: best) --alternate Alternate executables instead of running the same executable in a row with --repeat-count --bundler Install and use gems specified in Gemfile --filter REGEXP Filter out benchmarks with given regexp --run-duration SECONDS Warmup estimates loop_count to run for this duration (default: 3) --timeout SECONDS Timeout ruby command execution with timeout(1) -v, --verbose Verbose mode. Multiple -v options increase visibility (max: 2)运行单个基准脚本最简单的用法是用$PATH中的ruby跑一个脚本。以benchmark/下的斐波那契基准 benchmark/app_fib.rb 为例benchmark-driver benchmark/app_fib.rb也可以直接跑一整批.rb基准benchmark-driver benchmark/*.rb比较两个解释器核心场景是同时用两个 Ruby 可执行文件跑同一批基准。README 给出的写法是通过多个-e指定解释器路径和参数例如第二个解释器带--jit# Run benchmark scripts with multiple Ruby executables or options benchmark-driver benchmark/*.rb -e /path/to/ruby -e /path/to/ruby --jit把/path/to/ruby替换为你实际的 Ruby 可执行文件路径即可第二个示例中的--jit是该解释器的启动参数不是 benchmark-driver 自身的参数。如果你的多个 Ruby 版本由 rbenv 管理README 提供了替代写法用--rbenv指定版本号列表分号分隔版本后跟解释器参数# Or compare Ruby versions managed by rbenv benchmark-driver benchmark/*.rb --rbenv 2.5.1;2.6.0-preview2 --jit调整 runner、输出与过滤同一批基准还可以换采集方式或输出形式README 示例# You can collect many metrics in many ways benchmark-driver benchmark/*.rb --runner memory --output markdown结合--help的说明几个对“两解释器比较”最常用的选项是-r, --runnerips默认、time、memory、once、block五种-o, --outputcompare默认、simple、markdown、record、all默认的compare即输出两个解释器之间的对比--filter REGEXP只跑文件名匹配正则的子集--repeat-count NUM与--repeat-result重复跑多轮默认取最快结果best也可取average或worstmemory下取最差内存占用--timeout SECONDS用timeout(1)限制单条 ruby 命令的执行时间-v详细模式可叠加最多两级。运行 YAML 基准benchmark/中一部分基准是 YAML 定义README 指出它们用于“复杂 setup 或更精确的测量”# Some are defined with YAML for complex setup or accurate measurement benchmark-driver benchmark/*.ymlYAML 基准的结构可以参考 benchmark/vm_ivar.ymlprelude: a 1\n benchmark: vm_ivar: | j a k a loop_count: 30000000其中prelude是前置代码benchmark下是基准体loop_count指定循环次数。用 make benchmark 比较“对比 Ruby”与“刚构建的 Ruby”如果你在源码树中构建过 RubyREADME 还给出基于 Makefile 的入口make benchmark会自动下载受支持的 benchmark_driver 版本并用它跑基准。defs/gmake.mk 中对应的规则显示它会用两个执行体各跑一遍compare-ruby::$(COMPARE_RUBY)和built-ruby::$(BENCH_RUBY)即仓库刚构建出的 ruby并给两者附加--disable-gem等参数。常用形式# Run all benchmarks with the ruby in the $PATH and the built ruby make benchmark # Or compare with specific ruby binary make benchmark COMPARE_RUBY/path/to/ruby --jit # Run vm benchmarks make benchmark ITEMvm # Run some limited benchmarks in ITEM-matched files make benchmark ITEMvm OPTS--filterblock # You can specify the benchmark by exact filenames instead of matching ITEM: make benchmark ARGSbenchmark/erb_render.yml # You can specify any option via $OPTS make benchmark OPTS--helpITEMvm表示只跑文件名匹配vm的基准对应大量vm_*.yml文件ARGS则按精确文件名指定单个基准。README 特别说明通过make benchmark还可以使用一些专门的 runner 插件# -r peak, -r size, -r total, -r utime, -r stime, -r cutime, -r cstime make benchmark ITEMvm_bigarray OPTS-r peak结果验证与限制默认输出类型是compare运行结束后终端会输出各基准在两个或多个解释器上的对比结果需要 Markdown 或记录形式时改用--output不要按示例输出猜测具体数值——README 未提供固定的示例结果实际数值取决于你的机器和被测解释器。用-v提高详细度来确认实际调用的解释器路径与参数是否符合预期例如--jit是否生效。make benchmark路径依赖miniruby与自动下载的 benchmark-driver属于构建源码树之后的用法没有构建源码时直接用gem install benchmark_driverbenchmark-driver命令即可。参数含义以上文--help原文为准README 未给出的默认值或行为例如特定 runner 的内部实现不在本文范围内。【免费下载链接】rubyThe Ruby Programming Language项目地址: https://gitcode.com/GitHub_Trending/ru/ruby创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表