【レポート】 EC2のパフォーマンス最適化とベストプラクティス (Deep Dive on Amazon EC2 Instances, Featuring Performance Optimization Best Practices) #reinvent #CMP301

2017.11.29

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

はじめに

本記事は AWS re:Invent 2017 のセッション「Deep Dive on Amazon EC2 Instances, Featuring Performance Optimization Best Practices」のレポートです。

スピーカー

  • Adam Boeglin - HPC Solutions Architect, AWS

概要

本セッションは EC2 インスタンス現行世代の各ファミリそれぞれについて、ベストプラクティスの詳細とパフォーマンスTipsについてのものになります。

Amazon EC2 provides a broad selection of instance types to accommodate a diverse mix of workloads. In this session, we provide an overview of the Amazon EC2 instance platform, key platform features, and the concept of instance generations. We dive into the current generation design choices of the different instance families, including the General Purpose, Compute Optimized, Storage Optimized, Memory Optimized, and GPU instance families. We also detail best practices and share performance tips for getting the most out of your Amazon EC2 instances.

レポート

「EC2」は多岐に渡る技術

  • API
  • Purchase options
  • Networking
  • Instances

EC2の歴史

  • 最初はM1
    • "One size fits all"
  • いまでは非常に豊富なインスタンスタイプ
  • stop/startでインスタンスタイプを変更できる
    • コストやパフォーマンスで最適に選べる
  • インスタンスタイプのネーミング
    • family, generation, size
    • 各ファミリの特性

vCPUについて

  • 概ね「HT対応の物理CPU」といえる
  • Linux : 各コアの A スレッドが並んだ後に B スレッドが並ぶ
  • Windowsはインタリーブ(A と B が交互に並ぶ)
  • 物理的な説明
  • T系は特殊
  • Hyper ThreadingをOFFにする方法
    • FPUヘビーなアプリ向け
    • Linuxの場合
for cpunum in $(cat /sys/device/system/cpu/cpu*/topology/thread_sibling_list | \
cut -s -d, -f2- | tr "," "\n" | sort -un); do
  echo 0 | sudo tee /sys/device/system/cpu/cpu${cpunum}/online
done
  • 起動時に HT を切る場合は grab に maxcpus=20 などと書く

リソースアロケーション

  • ハイパーバイザ側でオーバーコミットはしていない
    • CPU
    • メモリ
    • ネットワーク(ノイジーネイバーの排除)
  • T系は特殊(大事なことなので二回目)

時刻

  • TSCはvDSOサポート
    • TSCクロック源を使うと無駄なタイムコールが発生させない
    • 現世代インスタンスなら TSC を使おう
  • TSCへの切り替え方

CPUステート

  • 一部のインスタンスタイプ
    • c4.8xlarge, d2.8xlarge, m4.10xlarge, m4.16xlarge, p2.16xlarge, x1.16xlarge, x1.32xlarge etc...
  • PステートとCステート
    • CPUのスリープモード
  • Cステートに入ると、戻るときにパフォーマンスが落ちる
  • LinuxならCステートを切れる、Winはできない
  • AVX2を使うなら P ステートに入らないようにする
sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"

T2系

  • 最低コスト
  • CPUクレジット

X1系インスタンス

  • 高メモリ
  • インメモリDB、HPC
  • NUMA
    • Non-uniform memory access
    • 各プロセッサ間でメモリをアクセス = QuickPath Interconnect (QPI)
    • R4とx1eの比較
    • R4 (2コア) は両コア間に 2QPI
    • x1e (4コア) は各コアがメッシュ接続
    • NUMAバランシングはアプリをスローダウンさせる
    • Linux Kernel 3.8+
    • 多くの場合有効に働かない
    • OFFにできる

OSインパクトパフォーマンス

  • RHEL6よりRHEL7が速い
    • ページフォルトのシステムコールが1/100
    • ハイパーバイザを考慮したシステムコール
    • RHEL6のカーネルは 2009年製

ネットワークエンハンス

  • Xenのドライバー分離モデル
    • 通常はドライバードメインを経由
  • SR-IOV
    • ドライバードメインを経由しない = 速い

ネットワークパフォーマンス

  • 1ストリームでは上限がある
    • AZ間は5Gbps(シングルストリーム)
    • placement group内だとシングルストリームで10Gbps
    • マルチストリームにして上限 25Gbps

特殊用途向けインスタンスタイプの説明

  • P3系 GPU
  • F1系 FPGA

C5系

  • KVMベース(very customised)
  • ACPI シャットダウン

EBS

  • インスタンスサイズでパフォーマンスは変わる

まとめ

  • 最新の OS を使おう
  • クロックソースには TSC を
  • CステートとPステートのコントロール
  • T2 CPUクレジットをモニタしよう
  • NUMAバランシング
  • 拡張ネットワーキング
  • 稼働させるアプリケーションに合わせる

仮想化のテーマ

  • ベアメタルと同じパフォーマンスが目標