BETA

BenchmarkDotNetをクラウドのLinux VMで動かす

投稿日:2019-03-12
最終更新:2019-03-12

BenchmarkDotNetは.NET Frameworkのアプリケーションのベンチマークを取るためのフレームワークである。デファクトスタンダードといってもいい。

簡単な使い方はGetting startedを参考にしてほしい。Linuxで実行するためには、プロジェクトを.NET Coreのコンソールアプリとして作成する必要がある。

Mainの書き方

MainメソッドはGetting startedの通りではなく、以下のように記述する。argsBenchmarkSwitcherに渡して、FromAssenblyでプロジェクト全体からベンチマーククラスを探させる。こうすることで、コマンドラインオプションでベンチマークの取り方を制御できる。

using BenchmarkDotNet.Running;  

namespace MyBenchmark  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            BenchmarkSwitcher.  
                FromAssembly(typeof(Program).Assembly).Run(args);  
        }  
    }  
}

あとは、Getting startedにしたがってベンチマークを書く。

発行

ベンチマークが出来上がったら、MyBenchmarksプロジェクトのコンテキストメニューから発行を選択する。発行先を聞いてくるのでデフォルトのまま発行する。

VMの作成

どこのクラウドでもいいのでLinux VMを作成する。私が試した限りではAzure VM (D2s v3)が結果のゆらぎが一番少なかった。

ディストリビューションは、Linux用の.NET Core SDKのダウンロードページでインストール手順の説明があるものから選択する。VMが起動したらsshでVMにログインして、インストール手順に従って.NET Core SDKをインストールする。

ベンチマークの実行

ベンチマークのソリューションディレクトリを、VMのホームディレクトリにrsyncで転送する。BenchmarkDotNetは、発行先のpublishフォルダからslnファイルまでさかのぼってディレクトリ構成をチェックする。そのため、中途半端な転送の仕方をすると動かない。

転送したら以下のようにベンチマークを起動する。BenchmarkDotNetがプロセスの実行優先度を上げるので、sudoでroot権限を与えておくこと。それと—filterで実行するベンチマーククラスを指定すること。

ssh [email protected] sudo dotnet MyBenchmarks/MyBenchmarks/bin/Release/netcoreapp2.1/publish/MyBenchmarks.dll --filter Md5VsSha256

—filterを指定しないと、ベンチマークを含むクラスの一覧をBenchmarkSwitherが表示して、どれを実行するかを対話的に聞いてくる。

ベンチマークが終了すると、ホームディレクトリの BenchmarkDotNet.Artifacts/results以下に結果が出力される。

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

ベンチマークの取り方をソースコードに埋め込んで、変更するたびにVisual Studioで書き換えてもよいが、そのたびに発行、転送の手順が必要になる。それを避けるために、BenchmarkDotNetのコマンドラインオプションを覚えたほうがいい。

—filterを使うと、実行するベンチマークをネームスペース単位からメソッド単位までglobパターンを使って選択できる。—jobを使うとプログラムを繰り返し実行する回数を、Dry/Short/Medium/LongあるいはDefaultのプリセットから選択できる。これくらいは使いこなさないとしんどい。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@fujiedaの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!