GameWith Engineering Blog

GameWith のエンジニア、デザイナーが技術について日々発信していきます。

CircleCI 2.0 の resource_class で CPU と RAM のリソースを変更してみる

メリークリスマス! @serima です。 いかがお過ごしでしょうか。皆さまのサンタクロースは価値をデリバリしてくれましたでしょうか?

さて、GameWith では CI のツールとして CircleCI を使用しています。 2017 年 7 月頃に CircleCI 2.0 が正式にリリースされ、GameWith でも 2.0 への移行を既に済ませています。(移行作業についてはまた別途記事を書くつもりです。)

移行作業時にドキュメントを読んでいると、resource_class という設定が新たに増えていることに気付きました。

今回は、 resource_class を利用するまでの流れと、参考までに行なったベンチマーク結果をお届けします。


2018/08/14 追記

以前は、サポートチケットを切ると暫定的に resource_class が有効になると書きましたが、2018 年 8 月現在、新たに Performance pricing plan という有料課金プランが用意されたようで、そちらに切り替えないと利用できないそうです。

こちらの記事に詳しく書かれておりますので、利用の際は参考にしてみてください。

qiita.com


resource_class とは?

下記、抜粋しましたが、詳細はこちらのドキュメントをご覧ください。

It is possible to configure CPU and RAM resources for each job as described in the following table. Note: Paid accounts must request to use this feature by opening a support ticket (or by contacting their Customer Success Manager when applicable) and non-paid users must request to use this feature by opening a ticket at https://support.circleci.com/hc/en-us/requests/new. If resource_class is not specified or an invalid class is specified, the default resource_class: medium will be used. The resource_class key is currently only available for use with the docker executor.

f:id:serimaryo:20171221132434p:plain

(現時点では)docker executor のみで使用できるリソースクラスを変更するための key で、カスタマーサクセスマネージャーにサポートチケットを切る形でリクエストしないと使用できないとのこと。 おそらくユーザ、オーガニゼーション単位でホワイトリストが存在し、そこに追加してもらうことで機能が利用できるようになるのだと思います。 また、デフォルトでは medium class として動作しているようです。

利用するための手続き

GameWith は Paid account なので、使ってみたい旨を簡単に記載して support@circleci.com にメールを送ってみました。

Hi.

Our Organization GameWith uses a CircleCI paid plan.
I found about resource_class in the document, can you add our team to the whitelist?
I hope to improve the build execution further.

Thanks.

しばらくすると、返信が来ました。

Hi Ryo,

I've enabled configurable resources for your org `GameWith'. Keep in mind this is a premium feature of CircleCI 2.0, while we aren't charging for this feature now, we do plan on doing so in the near term.

Best,

-Jia

これで、機能が利用できるようになりました。

しかし、

Keep in mind this is a premium feature of CircleCI 2.0, while we aren't charging for this feature now, we do plan on doing so in the near term.

利用される方は注意が必要です。 この機能は、CircleCI 2.0 のプレミアム機能で、近い将来課金する予定があるとのこと。

xlarge class を利用し続けていたら、気付いたら課金されていた。など、そういったことが発生するかもしれません。(無論、事前アナウンスはあると思いますが…)

また、ハイスペックなリソースを前提とした CI 周りを構築してしまうのもリスクではあると思いますので、各自で塩梅を確かめながらご利用いただけると良いのかなと思います。

実際に試してみる

.circleci/config.yml に下記一行を追加するだけです。

resource_class: large

今回は UnixBench を使用してお手軽にベンチマークをとってみたいと思います。 UnixBench のベンチマーク項目については、こちらが詳しいです。

blog.idcf.jp

今回はあくまでも各 resource_class での比較を行いたかったため、実際のスコアがいくつになったというよりもデフォルトの resource_class である medium よりもどの程度良いかの比較に意味があると考えています。

UnixBench のインストールと実行

普段 CI に使用している Docker image は Ubuntu 14.04 をベースにしたものをカスタムしており、その過程で apt-get install build-essential を行っているので、特に事前にインストールしておく必要があるパッケージやライブラリはありませんでした。(本来であれば、その手順が必要のはずです。)

$ git clone https://github.com/kdlucas/byte-unixbench.git
$ cd byte-unixbench/UnixBench
$ ./Run

ベンチマークの結果

CPU と RAM の増加によって、パフォーマンスの向上は見られますが、想定していたよりも比較的緩やかな傾きとなった印象です。 ベンチマーク自体は一度しか実行していないため、多少の誤差はあるかもしれませんが、グラフとしては綺麗に右肩上がりにはなりました。

f:id:serimaryo:20171225171950p:plain

なお、結果のログは以下 gist においておきましたのでご参考までにどうぞ。 (ホストマシンのコアの情報を後半コピーし忘れてしまいましたが、すべて同じ Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz の 32 core でした)

[CircleCI 2.0] resource_class ごとの UnixBench の結果 · GitHub

まとめ

上記の比較結果は、どの resource_class を利用するかで料金が変わるなどの場合に、コストパフォーマンス比較の参考としてご利用頂ければと思います。

GameWith では CI に限らず人の手が不要な所は、積極的に自動化・省力化を行なっています。

あらゆるプロセスにおいて、改善できる余地はないか考えつづけ、引き続き発信を行っていきます!