ちゃんと出来てると思ってたことが、実はちゃんと出来てなくて愕然とすることってありませんか。
僕にはよくあります。つい最近もありました。
そんな今日このごろ、皆さまいかがお過ごしでしょうか。
前にGCS fuseのベンチマークを取ったんですが、どうもやり方が良くないところがあったり、実はStandardとDRAでリージョン違うとこ使ってたらしいということが発覚し、やり直してみました。
ちなみに前のテスト結果は以下の記事。
まず根本的なテスト条件。
前回はddコマンドで書き込み速度をテストしましたが、書き込みデータが/dev/zeroから読み込んでいる0のデータなので、実は圧縮が効いているんではないかという疑問が。
そこで、今回はランダムデータで書きだしたファイルをコピーするようにしました。
ddコマンドでランダムデータを書き込むのでも良いのかもしれませんが、ランダムデータの生成に時間がかかるためGCS fuseの性能よりそちらで制限がかかってしまいそうなので、あらかじめ生成したファイルのコピー時間から計算するようにしました。
ファイルは以下のコマンドでランダムなデータによる1GBのファイルを生成しました。
dd if=/dev/urandom of=test.tmp bs=1M count=1024
生成したファイルをcpコマンドでコピーする時間をtimeコマンドを使用し計測しました。
1024MB/コマンド実行時間 で転送速度を算出しています。
なお、以下の結果は5回行ったものの平均を出しています。
GCS Type | 転送速度平均値(MB/sec) |
---|---|
Standard | 49.0 |
Durable Reduced Availability | 43.7 |
前回の訂正だけだとつまらないので、もうちょっとテストをしてみました。
GCS fuseはマルチスレッド転送をするらしいので、もしかしたらCPUが増えたら性能が上がるのでは? と思い、n1-standard-4でもテストしてみました。
その結果がこちら。
GCS Type | 転送速度平均値(MB/sec) |
---|---|
Standard | 24.0 |
Durable Reduced Availability | 26.7 |
どうもシングルスレッドで動いている部分でCPUスイッチする分無駄が出ている気配。
gcsfuseコマンドに–debug_fuseとか–debug_gcsオプションつけてdebug出力でもすればなにかわかるかもしれませんが…。
追いかける時間もないのでどうにも中途半端ですが、今のところCPUコアの多いマシンでGCS fuseを使わないほうが良さそうです。
この辺はgcsfuseのバージョンが上がったらまたテストしてみたいところです。
そんなところで今回はここまで。