🦔

Rustのベンチマークツール:Criterion.rsメモ [blessed.rsシリーズ14]

2024/06/18に公開

概要

https://blessed.rs/crates

こちらのリストにあるものを見て書いたメモになります。

今回はCriterion.rsについてです。

https://lib.rs/crates/criterion

Criterion.rsとは

統計に基づいたマイクロ・ベンチマーク・ツール

参考

https://bheisler.github.io/criterion.rs/book/criterion_rs.html

チュートリアル

https://bheisler.github.io/criterion.rs/book/getting_started.html

一旦このページを実行して、使用方法について慣れるのがよさそう。

コマンドラインへの出力について

  • Warmup: 設定可能なウォームアップ期間(デフォルトでは3秒間)の間、ベンチマーク関数を自動的に反復する
  • Collecting Samples
    • 指定した回数(デフォルト100回)対象の関数を実行
    • Warmup中の実行に基づいて、サンプリングにかかる時間の推定値も表示する
  • time
    • 測定された1回の実行による時間に対する信頼区間が、3つの値で表示される。例:[3.0959 ns 3.1797 ns 3.2843 ns]
    • 左右の値はそれぞれ信頼区間の下限と上限
    • 中央の値はもっとも信頼される推定値
    • 信頼係数の指定は可能
    • 信頼区間の測定のために、サンプリングを指定回数繰り返す(デフォルトは100000。つまり、Collecting Samples * time = 100 * 100000 = 10000000)
  • Change
    • Criterion.rsベンチマークを実行すると、target/criterionディレクトリに統計情報が保存される
    • 前回の結果がすでにあれば、前回との差が表示される。例:change: [-1.1233% +1.9237% +5.0838%] (p = 0.24 > 0.05)
    • 変化がないことの閾値は設定が可能(デフォルトは)
  • Detecting Outliers
    • テスト結果の外れ値として検出されたものがいくつかあるかを表示する
    • Found 17 outliers among 100 measurements (17.00%), 6 (6.00%) high mild, 11 (11.00%) high severe
    • 外れ値が多いということは、ノイズが多いということで、以下のような問題が考えられる
      • ベンチマークを実行するコンピュータに他に負荷がかかっている
      • 対象のコードの不規則性
    • 対策として、以下が考えられる
      • 1回の実行毎で同じ量の作業が行われるようにテストを見直す
      • コンピュータで他の作業を行わない
      • 測定時間を長くして外れ値の影響を抑える
      • ウォームアップ時間を長くする

コマンドラインでのオプション

https://bheisler.github.io/criterion.rs/book/user_guide/command_line_options.html

HTMLでのレポート

https://bheisler.github.io/criterion.rs/book/user_guide/html_report.html

target/criterion/report/index.htmlを見ると、ベンチマークの結果を表示するHTMLのレポートを見ることができる。

グラフなどが載っており、各グラフの説明もHTMLに記載されている

また、表示されるグラフやその保存場所については以下も参照

https://bheisler.github.io/criterion.rs/book/user_guide/plots_and_graphs.html

ベンチマークの書き方色々

基本は「チュートリアル」の書き方をまねるのがよさそう。

その他のケースではそれぞれ以下を参照するのがよさそう

cargo-criterion

https://bheisler.github.io/criterion.rs/book/cargo_criterion/cargo_criterion.html

cargo-criterionをinstallすれば、Cargoの拡張機能としてcriterionをinstallできるが、まだ実験的な状態らしい

特徴

上記まででできることの色々が書いてあるが、そのほかの特徴をこちらにまとめる

ベンチマークのためのデータ取得方法と分析プロセスについての詳細

https://bheisler.github.io/criterion.rs/book/analysis.html

CIでの使用について

推奨されていない:https://bheisler.github.io/criterion.rs/book/faq.html#how-should-i-run-criterionrs-benchmarks-in-a-ci-pipeline

これは、CI環境ではノイズが入りやすく、正しい測定ができないことが多いからである

しかし、かわりにIaiというクレートを紹介している:https://bheisler.github.io/criterion.rs/book/iai/iai.html

Discussion