Ltd.)のエンジニアブログです。業務で取り入れた新しい技術や試行錯誤を知見として共有していきます。Unlimitedスマートキャンプエンジニアの今川です。qiita.com別のネタで書こうと思っていましたが、ちょうど昨日今日でAWS5年やってたのに誤解してた!という経験をしたのでそれについて忘備録&人に共有するためにもまとめます。Unlimitedって何が嬉しいの?という方には読んでいただきたいです。EC2にはt2という安価なインスタンスタイプ群があります。あり、マイクロサービス、低レイテンシーのインタラクティブアプリケーション、中小規模のデータベースなどのさまざまな汎用アプリケーションに最適です。いう説明がついています。普段t2系インスタンスを利用されている方や初めて知った方はどうイメージしたでしょうか?普段は弱いけど、必要なときはパワーアップできるという印象を持ったかと思います。4,5年そう思っていました。常に高負荷になるアプリケーションには不向きユーザからのリクエストのピークタイムが決まっているようなWebアプリケーションなどには向いているといった用途に向いている、という理解になるかと思っていますこれは正解ではありますが、間違っています。Unlimitedを使うべきタイミングやメトリクスをみて状況を正しく理解できなくなると思われます。分間実行することに相当します。パワーアップという概念はなくただ単に「CPUを1分100%で動かすとCPUクレジットを1消費する」というだけです。クレジットと同じにすることができます。分間実行するのと等しくなります。上記のページにも書いてありますが、CPUクレジットの会計単位はミリ秒単位であるし、CPU複数個にまたがって消費することもできます。コア数分が実際のCPU使用率になります。つねに消費されることになります。t2.largeインスタンス(vCPUが2コア)のCPUUtilizationとCPUCreditUsageをCloudWatchでグラフ化したものです。7.5]にすると波形がほぼ一致します。CPUUtilization[%]docs.aws.amazon.comこれがCPUクレジットの使われ方です。ベースラインパフォーマンスとは何なのか?CPUクレジットは各インスタンスタイプによって決まった速度で付与されていきます。t2.largeは1時間にCPUクレジットが36付与されます。1分あたり0.4が付与されることになります。毎月もらえるおこづかいのようなものですね。上記の通り、CPUクレジット1つで1分1コア100%を維持できます。もらった分より、消費する分が少なければCPUCreditBalanceとして貯めることができます。もらった分より、消費する分が多いときはどうなるでしょうか?もらった分より足りない分はCPUCreditBalanceが残っていればそこから捻出することができます。CPUCreditBalanceがないときは、付与された分について使い尽くしてしまいます。足りない分はCPUを動かせなくなります。CPUCreditBalanceがないときはt2.largeにおいては1分あたり0.4しかもらえないので、1分間に1コア40%分だけしか動かすことができません。実はこれがベースラインパフォーマンスというものです。ドキュメントを見るとt2.largeにおけるベースラインパフォーマンスは20%となっていますが、2コアフルパワーの20%なので1コア40%分です。この値は上記のCPUCreditBalanceの話と一致します。ベースラインパフォーマンスというのは付与されるCPUクレジットに全く余裕がない時に起きる下限のCPU使用率のことでした。CPUCreditBalanceを使いまくるほど処理が多い状況だとCPUCreditBalanceが0になった瞬間に出力がおいつかなくなるようになってしまうということでした。Unlimitedを有効にすると起きることではCPUクレジットが足りない!今すぐ欲しい!というとき、何ができるのでしょうか。付与は以下のタイミングで行われます。Unlimitedを有効化するという方法があります。CPUクレジットという仕組みは貯めたり消費したりすることによって「ピーク時もアイドル時も負荷をベースラインパフォーマンスに均して考えること」を可能にします。他の汎用インスタンスファミリであるM系などでは「常に一定の負荷がかかること」を前提にしているため、ピークが一定で、アイドルタイムが長い用途と勿体なくなってしまいます。UnlimitedはCPUクレジットの前借りと追加購入が可能になります。普通にしていると、ベースラインパフォーマンス以上の性能をあげようとするとCPUCreditBalanceが必要になります。Unlimitedが有効になっているときは「その1日中で得られる合計のCPUクレジット」と「その日中に使ったCPUクレジット」の比較で計算することができ、そのタイミングにCPUCreditBalanceがなくても必要なパフォーマンスを出せるようになります。docs.aws.amazon.com上記のドキュメントにある図です。実線で表されているCPU使用率のグラフの面積を均したとき、ベースラインパフォーマンスである点線の30%以下になれば問題ないのですが、実際は点線を超えて紫線の値、1日で40%分になった場合、差分の10%分のvCPU分については課金されてしまうという仕組みです。その上で、「その日中に使ったCPUクレジット」で赤字になってしまった分についてのみ、1時間のvCPU100%単位で課金されるという仕組みです。UnlimitedはEC2コンソールでかんたんに有効化/無効化を切り替えることができます。Unlimitedでどれだけ前借りしているのか?どれぐらい足りなくなってしまっているか?についてはメトリクスが用意されています。Unlimitedを有効にすると計測されるようになります。-CPUCreditBalanceが0のときに消費したCPUクレジットで、課金対象になっているもの前借りという言葉で紹介したとおり「これからはいる収入をあてにして動かすことを可能にしている」部分があるため、やめるタイミングも重要です。増えるタイミングが3つあります。Unlimitedを無効にせず、様子をみて前借り分を返済してから無効にしたほうがよさそうです。こちらは以下の記事で理解できました。(ありがとうございます!)dev.classmethod.jp一方で常に前借りしたり常に不足分を課金し続けるのはもったいないので、ほかのインスタンスタイプに変更することのを考慮にいれることも選択肢にいれてみましょう。上で紹介したページに損益分岐点を求める計算式があるため、それを参考にしてみてください。T3系について最近はT3インスタンスファミリーも登場しました。T2より数字が増えているからなにか新しいからこっちのほうが断然いいんじゃない?と思う方もいるかと思います。aws.amazon.com実際その通りで、パフォーマンス部分での改善がなされていますが、T2との大きな違いとしてUnlimitedがデフォルトでオンになっていることがあります。知らない間に不足分のCPUクレジットについて課金されないよう注意しましょう。最後にあるときCPU負荷が上がらない割にWebサーバのレイテンシが増大したことがありました。その時、ちょうどこのことを思い出して確認したところ、CPUCreditBalanceが完全に枯渇してしまっていました。そこはUnlimitedを有効にして難を逃れました。T2系インスタンスの特性を理解することで、非常時には勇気と自信を持ってUnlimitedを有効化できます。T2系を使っているかたはたまにCPUクレジットの存在を思い出してあげてくださいね。明日は20卒内定者としてインターンをしているジョニーくんが20卒内定者インターン生が社員から頂いた愛のムチについて書いてくれます。Calendarに参加したベンチャー企業が、実際のところどうだったか振り返ってみる明けましておめでとうございます。スマートキャンプの笹原です...2019-12-25エンジニアブログを開設して1年でなにが起きたかすべてオープンにするスマートキャンプエンジニアの瀧川です。アソシエイト】に合格してきま...スマートキャンプの今川です。