(レポート) CMP301: Deep Dive on Amazon EC2 Instances, Featuring Performance Optimization #reinvent

2016.12.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。大阪の市田です。
re:Invent 2016の「CMP301 - Deep Dive on Amazon EC2 Instances, Featuring Performance Optimization Best Practices」を動画で聴講したのでレポートします。

EC2インスタンスの歴史

  • M1インスタンスから2006年8月にスタート
  • 2016年の時点で種類も非常に増加

01-history

プレイスメントグループ

  • 物理的に近接
  • 高帯域幅と低レイテンシー

インスタンスタイプの選択肢

  • メモリを大量に使う場合メモリ最適化されたR3インスタンス
  • 計算能力が必要であればC4
  • よくバランスされた汎用的なものにはM4やT2

17-family

仮想CPUとは(vCPUとは)

  • vCPUはハイパースレッディングのコア
  • 物理コアがハイパースレッディング
  • 通常一度にほぼ2つのことを行います。
  • https://aws.amazon.com/ec2/virtualcores/
  • ハイパースレッディングを無効化することも可能
    • /sys/devices/system/cpu/cpuX/online0をセット
  • CPUの情報の確認には「lscpu」コマンド
  • grubの設定を変更するとでも対応可能
    • インスタンスタイプを変更した時は忘れず更新

TSCクロックソース

  • TSCクロックソースの利用が推奨
  • もし使っていなければ変更可能

04-tsc

CステートとPステートの管理

  • インスタンスタイプによりCステートとPステートが制御できる
    • c4.8xlarge
    • d2.8xlarge
    • m4.10xlarge
    • m4.16xlarge
    • p2.16xlarge
    • x1.16xlarge
    • x1.32xlarge
  • 深いCステートに入るのを制御できる
    • grub.confを編集
    • intel_idle.max_cstate=1

05-pc

  • AVX2に対するPステートの制御
    • 周波数の激しい変更はアプリケーションを遅くすることがある
    • その為、Turbo Boostを無効できる

06-pstate

T2インスタンスについて

  • バースト可能なCPUを持つ
  • インスタンスタイプによりベースラインが違う

X1インスタンスについて

  • 約2TBの最大のメモリを持つインスタンス
  • クワッドソケット
  • 大きなインメモリデータベース
  • ビッグデータ処理
  • HPCワークロード

NUMA

  • GRUBブートパラメータでオフにできる
    • numa=offの設定
    • CPU間のメモリ移動を最小限にする
    • アプリケーションによってはパフォーマンスを向上が期待できる

07-numa

Operating System Impact Performance

  • RHEL6とRHEL7で比較
  • 「ebizzy」というベンチマークツールの利用
  • 「perf」コマンドでパフォーマンストレース
  • 「Flame Graph」で各処理で時間がかかっているコードパスを見ることができる
  • RHEL7にすることで性能向上

08-rhel6

09-rhel6-fg

10-rhel7

11-rhel7-fg

Grant Mapping

  • カーネル3.8.0以降の利用推奨
    • プール時に一度Grant mappingが行われる
    • データがGrant poolにコピーされる

12-grantmapping

拡張ネットワーキング

  • SR-IOVの使用

13-enhancednet

Elastic Network Adaputer(ENA)

  • ハードウェアのIPv4ヘッダーチェックサム生成
  • キューを受信して内部のオーバーヘッドを削減
  • 適切なvCPUへ着信パケットの誘導
  • プレイスメントグループで20Gbpsのネットワーク速度
  • オープンソースなネットワークドライバ

下記が参考になります。

Elastic Network Adapter – Amazon EC2 向けの高性能パフォーマンスネットワークインターフェイス | Amazon Web Services ブログ

14-ena

EBS最適化

  • EBS最適化インスタンスの利用

15-ebs

Summary

  • HVMのAMI利用
  • TSCクロックソース利用
  • Cステート、Pステートの管理
  • T2インスタンスはCPUクレジットを監視する
  • Linux OSは最新のモダンなOSを使う
  • NUMAバランシング
  • Persistent grants(パッチの適用)によるI/Oパフォーマンス向上
  • 拡張ネットワーキングの利用
  • アプリケーションのプロファイリング

16-summary

最後に

デフォルトで利用する以外にも、EC2の性能向上にはチューニングポイントがたくさんあることが分かりました。
今回のre:Inventでは新たに多くのインスタンスタイプが発表されていますが、これらのTipsを元に、より高性能なEC2環境の作成を目指していきたいと思います。

以上です。