【ワークショップ】「Improve sustainability and reduce costs with AWS Graviton」に参加しました #AWSreInvent
こんにちは、引き続きre:Inventに参加中のこーへいです。
Improve sustainability and reduce costs with AWS Graviton(AWS Graviton で持続可能性を向上させ、コストを削減する※機械翻訳)に参加してきましたのでレポートしていきます。
本セッションについて
本セッションについて
タイトル:Improve sustainability and reduce costs with AWS Graviton
Level: 200 – Intermediate
Speaker:David Trigano, Amit Yaniv
概要:※下記は機械翻訳
価格パフォーマンスを向上させ、環境への影響を削減したいと考えていますか? AWS Graviton ベースの Amazon EC2 インスタンスは、価格パフォーマンスの最大化と持続可能性の向上を目指すあらゆる規模の組織に最適です。この実践的なワークショップでは、Graviton ベースのインスタンスを活用してワークロードを最新化し、二酸化炭素排出量を削減する方法を学びます。 AWS Graviton マネージドサービス、一般的なユースケース、ベストプラクティスについて詳しく説明します。参加するにはラップトップを持参する必要があります。
前提
Gravitonの詳細はBlack Beltに詳しいですが、簡単に説明しますとNitro SystemやInferentia、TrainiumとともにAWSで開発している独自チップの1つとなります。
自社で開発することでAWSの仕様に沿った製品に仕上げることができ、高いパフォーマンスを実現することが可能となります。
ワークショップ
ワークショップ自体は主に2部の構成となっており、前半部分ではECSやEKS、EMRやOpenSearch、RDSにてGravitonを使用する方法、非GravitonからGravitonへのアップデートを体験する内容でした。
前半部分については特に目新しい内容でもなかったので軽く流し、後半のパフォーマンステストの所をメインに取り掛かりました。
1回目のパフォーマンステスト
まずは手始めにテストクライアントからSUT1、SUT2に対してwrk2と呼ばれるツールを使用してパフォーマンステストを実施します。
※wrk2とはHTTPリクエストベースのパフォーマンステストツールで、応答時間や関連するメトリクスを計測することができます。
SUT1
wrk -t2 -c100 -d30s -R2000 --latency http://$SUT1_IP:8080/books
Running 30s test @ http://x.x.x.x:8080/books
2 threads and 100 connections
Thread calibration: mean lat.: 2.383ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 2.674ms, rate sampling interval: 10ms
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.15ms 736.61us 9.66ms 77.35%
Req/Sec 1.06k 1.46k 5.55k 89.89%
Latency Distribution (HdrHistogram - Recorded Latency)
50.000% 1.06ms
75.000% 1.47ms
90.000% 2.00ms
99.000% 2.68ms
99.900% 8.61ms
99.990% 9.23ms
99.999% 9.67ms
100.000% 9.67ms
Detailed Percentile spectrum:
Value Percentile TotalCount 1/(1-Percentile)
0.117 0.000000 1 1.00
0.409 0.100000 3960 1.11
0.571 0.200000 7921 1.25
0.749 0.300000 11857 1.43
0.915 0.400000 15806 1.67
1.058 0.500000 19766 2.00
1.133 0.550000 21733 2.22
1.205 0.600000 23707 2.50
1.281 0.650000 25677 2.86
1.366 0.700000 27672 3.33
1.474 0.750000 29627 4.00
1.542 0.775000 30625 4.44
1.616 0.800000 31608 5.00
1.698 0.825000 32598 5.71
1.785 0.850000 33576 6.67
1.881 0.875000 34570 8.00
1.937 0.887500 35061 8.89
1.999 0.900000 35555 10.00
2.071 0.912500 36050 11.43
2.153 0.925000 36539 13.33
2.243 0.937500 37036 16.00
2.287 0.943750 37280 17.78
2.337 0.950000 37534 20.00
2.383 0.956250 37774 22.86
2.431 0.962500 38022 26.67
2.475 0.968750 38274 32.00
2.497 0.971875 38391 35.56
2.521 0.975000 38515 40.00
2.549 0.978125 38637 45.71
2.573 0.981250 38760 53.33
2.607 0.984375 38887 64.00
2.627 0.985938 38950 71.11
2.645 0.987500 39009 80.00
2.671 0.989062 39073 91.43
2.703 0.990625 39131 106.67
2.751 0.992188 39193 128.00
2.795 0.992969 39223 142.22
2.887 0.993750 39256 160.00
3.145 0.994531 39284 182.86
3.871 0.995313 39315 213.33
5.159 0.996094 39346 256.00
7.299 0.996484 39362 284.44
7.411 0.996875 39378 320.00
7.591 0.997266 39392 365.71
7.687 0.997656 39408 426.67
7.819 0.998047 39424 512.00
7.931 0.998242 39431 568.89
8.039 0.998437 39439 640.00
8.207 0.998633 39446 731.43
8.559 0.998828 39454 853.33
8.655 0.999023 39462 1024.00
8.775 0.999121 39466 1137.78
8.831 0.999219 39470 1280.00
8.847 0.999316 39475 1462.86
8.871 0.999414 39477 1706.67
8.943 0.999512 39482 2048.00
8.983 0.999561 39483 2275.56
8.991 0.999609 39485 2560.00
9.039 0.999658 39487 2925.71
9.047 0.999707 39489 3413.33
9.063 0.999756 39491 4096.00
9.159 0.999780 39492 4551.11
9.167 0.999805 39493 5120.00
9.175 0.999829 39494 5851.43
9.215 0.999854 39495 6826.67
9.231 0.999878 39496 8192.00
9.231 0.999890 39496 9102.22
9.311 0.999902 39497 10240.00
9.311 0.999915 39497 11702.86
9.479 0.999927 39498 13653.33
9.479 0.999939 39498 16384.00
9.479 0.999945 39498 18204.44
9.583 0.999951 39499 20480.00
9.583 0.999957 39499 23405.71
9.583 0.999963 39499 27306.67
9.583 0.999969 39499 32768.00
9.583 0.999973 39499 36408.89
9.671 0.999976 39500 40960.00
9.671 1.000000 39500 inf
#[Mean = 1.154, StdDeviation = 0.737]
#[Max = 9.664, Total count = 39500]
#[Buckets = 27, SubBuckets = 2048]
----------------------------------------------------------
58902 requests in 30.00s, 76.28MB read
Requests/sec: 1963.31
Transfer/sec: 2.54MB
SUT2
[ec2-user@ip-172-31-57-83 ~]$ wrk -t2 -c100 -d30s -R2000 --latency http://$SUT2_IP:8080/books
Running 30s test @ http://x.x.x.x:8080/books
2 threads and 100 connections
Thread calibration: mean lat.: 19.103ms, rate sampling interval: 58ms
Thread calibration: mean lat.: 19.044ms, rate sampling interval: 59ms
Thread Stats Avg Stdev Max +/- Stdev
Latency 0.93ms 453.76us 6.04ms 65.99%
Req/Sec 1.01k 30.97 1.07k 72.11%
Latency Distribution (HdrHistogram - Recorded Latency)
50.000% 0.91ms
75.000% 1.25ms
90.000% 1.49ms
99.000% 1.95ms
99.900% 4.51ms
99.990% 5.70ms
99.999% 6.05ms
100.000% 6.05ms
Detailed Percentile spectrum:
Value Percentile TotalCount 1/(1-Percentile)
0.134 0.000000 2 1.00
0.360 0.100000 3958 1.11
0.493 0.200000 7923 1.25
0.629 0.300000 11861 1.43
0.772 0.400000 15814 1.67
0.913 0.500000 19768 2.00
0.981 0.550000 21748 2.22
1.049 0.600000 23707 2.50
1.115 0.650000 25683 2.86
1.181 0.700000 27654 3.33
1.246 0.750000 29634 4.00
1.280 0.775000 30638 4.44
1.315 0.800000 31621 5.00
1.353 0.825000 32609 5.71
1.393 0.850000 33582 6.67
1.435 0.875000 34564 8.00
1.461 0.887500 35071 8.89
1.488 0.900000 35553 10.00
1.521 0.912500 36044 11.43
1.556 0.925000 36546 13.33
1.597 0.937500 37033 16.00
1.619 0.943750 37284 17.78
1.646 0.950000 37525 20.00
1.675 0.956250 37779 22.86
1.705 0.962500 38020 26.67
1.744 0.968750 38272 32.00
1.769 0.971875 38392 35.56
1.794 0.975000 38514 40.00
1.819 0.978125 38636 45.71
1.850 0.981250 38760 53.33
1.877 0.984375 38884 64.00
1.893 0.985938 38946 71.11
1.912 0.987500 39009 80.00
1.935 0.989062 39068 91.43
1.963 0.990625 39131 106.67
1.991 0.992188 39193 128.00
2.008 0.992969 39223 142.22
2.026 0.993750 39255 160.00
2.047 0.994531 39287 182.86
2.069 0.995313 39315 213.33
2.093 0.996094 39347 256.00
2.115 0.996484 39365 284.44
2.129 0.996875 39377 320.00
2.149 0.997266 39393 365.71
2.171 0.997656 39408 426.67
2.199 0.998047 39423 512.00
2.219 0.998242 39431 568.89
2.257 0.998437 39439 640.00
2.389 0.998633 39446 731.43
4.195 0.998828 39454 853.33
4.535 0.999023 39462 1024.00
4.639 0.999121 39466 1137.78
4.775 0.999219 39470 1280.00
4.859 0.999316 39473 1462.86
5.091 0.999414 39477 1706.67
5.135 0.999512 39482 2048.00
5.159 0.999561 39483 2275.56
5.179 0.999609 39485 2560.00
5.311 0.999658 39487 2925.71
5.463 0.999707 39489 3413.33
5.503 0.999756 39491 4096.00
5.551 0.999780 39492 4551.11
5.559 0.999805 39493 5120.00
5.567 0.999829 39494 5851.43
5.687 0.999854 39495 6826.67
5.699 0.999878 39497 8192.00
5.699 0.999890 39497 9102.22
5.699 0.999902 39497 10240.00
5.699 0.999915 39497 11702.86
5.759 0.999927 39498 13653.33
5.759 0.999939 39498 16384.00
5.759 0.999945 39498 18204.44
5.943 0.999951 39499 20480.00
5.943 0.999957 39499 23405.71
5.943 0.999963 39499 27306.67
5.943 0.999969 39499 32768.00
5.943 0.999973 39499 36408.89
6.047 0.999976 39500 40960.00
6.047 1.000000 39500 inf
#[Mean = 0.928, StdDeviation = 0.454]
#[Max = 6.044, Total count = 39500]
#[Buckets = 27, SubBuckets = 2048]
----------------------------------------------------------
59802 requests in 30.00s, 77.45MB read
Requests/sec: 1993.36
Transfer/sec: 2.58MB
SUT1ではリクエストレートは約1963/sec、平均レイテンシは1.15ms。
SUT2ではリクエストレートは約1993/sec、平均レイテンシは0.93ms。
と数値上では多少STU2が優っていますがほとんど違いはないと言っていいでしょう。
(ぶっちゃけM6g同士で比較しているので当然ですね。ちなみに期待していたGravitonと非Gravitonとの比較は本ワークショップでは行えなかったです)。
2回目のパフォーマンステスト
2回目はSTU2のみJavaのランタイムをバージョン11にアップデートしテストを行いました。
言語ランタイムの最新バージョンでは、Gravitonの完全なパフォーマンス権限を利用できる最適化が提供されているそうです。
[ec2-user@ip-172-31-57-83 scripts]$ ./wrk2_wrapper.sh -r 2000 -d 300 -c 100 -t 4 -h http://$SUT1_IP:8080
Running 5m test @ http://x.x.x.x:8080
4 threads and 100 connections
Thread calibration: mean lat.: 0.932ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 0.902ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 0.919ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 0.943ms, rate sampling interval: 10ms
Thread Stats Avg Stdev Max +/- Stdev
Latency 849.54us 402.59us 10.58ms 65.71%
Req/Sec 535.45 115.80 1.20k 55.75%
Latency Distribution (HdrHistogram - Recorded Latency)
50.000% 838.00us
75.000% 1.14ms
90.000% 1.36ms
99.000% 1.83ms
99.900% 2.13ms
99.990% 4.08ms
99.999% 9.75ms
100.000% 10.59ms
Detailed Percentile spectrum:
Value Percentile TotalCount 1/(1-Percentile)
0.099 0.000000 1 1.00
0.323 0.100000 58083 1.11
0.466 0.200000 116232 1.25
0.598 0.300000 174324 1.43
0.719 0.400000 231964 1.67
0.838 0.500000 290050 2.00
0.898 0.550000 319182 2.22
0.957 0.600000 348195 2.50
1.017 0.650000 377178 2.86
1.076 0.700000 405947 3.33
1.136 0.750000 435170 4.00
1.165 0.775000 449496 4.44
1.195 0.800000 463953 5.00
1.228 0.825000 478669 5.71
1.265 0.850000 492809 6.67
1.308 0.875000 507362 8.00
1.333 0.887500 514767 8.89
1.360 0.900000 521923 10.00
1.391 0.912500 529121 11.43
1.427 0.925000 536417 13.33
1.468 0.937500 543617 16.00
1.492 0.943750 547194 17.78
1.519 0.950000 550843 20.00
1.548 0.956250 554424 22.86
1.581 0.962500 558041 26.67
1.618 0.968750 561694 32.00
1.638 0.971875 563444 35.56
1.662 0.975000 565258 40.00
1.689 0.978125 567095 45.71
1.718 0.981250 568872 53.33
1.753 0.984375 570693 64.00
1.772 0.985938 571611 71.11
1.795 0.987500 572523 80.00
1.817 0.989062 573416 91.43
1.842 0.990625 574317 106.67
1.872 0.992188 575214 128.00
1.888 0.992969 575671 142.22
1.905 0.993750 576131 160.00
1.924 0.994531 576583 182.86
1.944 0.995313 577043 213.33
1.965 0.996094 577480 256.00
1.978 0.996484 577713 284.44
1.991 0.996875 577939 320.00
2.007 0.997266 578156 365.71
2.023 0.997656 578384 426.67
2.042 0.998047 578610 512.00
2.055 0.998242 578729 568.89
2.069 0.998437 578843 640.00
2.085 0.998633 578954 731.43
2.103 0.998828 579063 853.33
2.131 0.999023 579174 1024.00
2.153 0.999121 579231 1137.78
2.179 0.999219 579289 1280.00
2.209 0.999316 579346 1462.86
2.273 0.999414 579402 1706.67
2.367 0.999512 579457 2048.00
2.439 0.999561 579486 2275.56
2.513 0.999609 579514 2560.00
2.607 0.999658 579542 2925.71
2.709 0.999707 579571 3413.33
2.865 0.999756 579599 4096.00
2.969 0.999780 579613 4551.11
3.117 0.999805 579627 5120.00
3.251 0.999829 579641 5851.43
3.473 0.999854 579656 6826.67
3.755 0.999878 579670 8192.00
4.013 0.999890 579678 9102.22
4.231 0.999902 579684 10240.00
4.483 0.999915 579691 11702.86
4.731 0.999927 579698 13653.33
5.291 0.999939 579705 16384.00
5.491 0.999945 579709 18204.44
5.787 0.999951 579712 20480.00
5.959 0.999957 579716 23405.71
6.063 0.999963 579719 27306.67
8.115 0.999969 579723 32768.00
8.607 0.999973 579725 36408.89
8.727 0.999976 579726 40960.00
9.231 0.999979 579728 46811.43
9.335 0.999982 579730 54613.33
9.463 0.999985 579732 65536.00
9.671 0.999986 579733 72817.78
9.671 0.999988 579733 81920.00
9.751 0.999989 579734 93622.86
9.975 0.999991 579735 109226.67
10.087 0.999992 579736 131072.00
10.095 0.999993 579737 145635.56
10.095 0.999994 579737 163840.00
10.095 0.999995 579737 187245.71
10.511 0.999995 579738 218453.33
10.511 0.999996 579738 262144.00
10.567 0.999997 579739 291271.11
10.567 0.999997 579739 327680.00
10.567 0.999997 579739 374491.43
10.567 0.999998 579739 436906.67
10.567 0.999998 579739 524288.00
10.591 0.999998 579740 582542.22
10.591 1.000000 579740 inf
#[Mean = 0.850, StdDeviation = 0.403]
#[Max = 10.584, Total count = 579740]
#[Buckets = 27, SubBuckets = 2048]
----------------------------------------------------------
599924 requests in 5.00m, 253.92MB read
Requests/sec: 1999.74
Transfer/sec: 866.70KB
[ec2-user@ip-172-31-57-83 scripts]$ ./wrk2_wrapper.sh -r 2000 -d 300 -c 100 -t 4 -h http://$SUT2_IP:8080
Running 5m test @ http://x.x.x.x:8080
4 threads and 100 connections
Thread calibration: mean lat.: 13.823ms, rate sampling interval: 41ms
Thread calibration: mean lat.: 1.984ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 14.562ms, rate sampling interval: 43ms
Thread calibration: mean lat.: 14.487ms, rate sampling interval: 41ms
Thread Stats Avg Stdev Max +/- Stdev
Latency 0.96ms 417.26us 11.78ms 68.28%
Req/Sec 528.03 819.00 2.78k 88.39%
Latency Distribution (HdrHistogram - Recorded Latency)
50.000% 0.97ms
75.000% 1.23ms
90.000% 1.45ms
99.000% 1.95ms
99.900% 2.31ms
99.990% 6.15ms
99.999% 8.38ms
100.000% 11.78ms
Detailed Percentile spectrum:
Value Percentile TotalCount 1/(1-Percentile)
0.118 0.000000 1 1.00
0.395 0.100000 58005 1.11
0.571 0.200000 115959 1.25
0.723 0.300000 174033 1.43
0.857 0.400000 232200 1.67
0.970 0.500000 290127 2.00
1.023 0.550000 319223 2.22
1.074 0.600000 348391 2.50
1.123 0.650000 377030 2.86
1.173 0.700000 406226 3.33
1.225 0.750000 435281 4.00
1.253 0.775000 449566 4.44
1.284 0.800000 464110 5.00
1.317 0.825000 478306 5.71
1.354 0.850000 492786 6.67
1.398 0.875000 507351 8.00
1.424 0.887500 514668 8.89
1.454 0.900000 521939 10.00
1.489 0.912500 529147 11.43
1.529 0.925000 536288 13.33
1.578 0.937500 543608 16.00
1.605 0.943750 547132 17.78
1.635 0.950000 550757 20.00
1.668 0.956250 554381 22.86
1.703 0.962500 558062 26.67
1.742 0.968750 561637 32.00
1.764 0.971875 563467 35.56
1.787 0.975000 565279 40.00
1.812 0.978125 567085 45.71
1.841 0.981250 568900 53.33
1.874 0.984375 570713 64.00
1.892 0.985938 571593 71.11
1.912 0.987500 572518 80.00
1.934 0.989062 573418 91.43
1.959 0.990625 574325 106.67
1.987 0.992188 575212 128.00
2.001 0.992969 575674 142.22
2.017 0.993750 576115 160.00
2.036 0.994531 576568 182.86
2.057 0.995313 577019 213.33
2.083 0.996094 577468 256.00
2.097 0.996484 577702 284.44
2.115 0.996875 577935 320.00
2.131 0.997266 578149 365.71
2.153 0.997656 578378 426.67
2.179 0.998047 578609 512.00
2.197 0.998242 578721 568.89
2.215 0.998437 578830 640.00
2.237 0.998633 578944 731.43
2.269 0.998828 579061 853.33
2.313 0.999023 579167 1024.00
2.347 0.999121 579221 1137.78
2.419 0.999219 579279 1280.00
2.609 0.999316 579334 1462.86
2.973 0.999414 579391 1706.67
3.393 0.999512 579447 2048.00
3.517 0.999561 579478 2275.56
3.609 0.999609 579504 2560.00
4.031 0.999658 579532 2925.71
4.979 0.999707 579561 3413.33
5.707 0.999756 579590 4096.00
5.807 0.999780 579604 4551.11
5.871 0.999805 579619 5120.00
5.963 0.999829 579632 5851.43
6.019 0.999854 579646 6826.67
6.071 0.999878 579661 8192.00
6.111 0.999890 579667 9102.22
6.167 0.999902 579676 10240.00
6.203 0.999915 579682 11702.86
6.275 0.999927 579688 13653.33
6.347 0.999939 579695 16384.00
6.407 0.999945 579699 18204.44
6.467 0.999951 579702 20480.00
6.619 0.999957 579706 23405.71
6.831 0.999963 579709 27306.67
7.147 0.999969 579713 32768.00
7.799 0.999973 579715 36408.89
7.851 0.999976 579716 40960.00
8.055 0.999979 579718 46811.43
8.083 0.999982 579720 54613.33
8.231 0.999985 579722 65536.00
8.247 0.999986 579723 72817.78
8.247 0.999988 579723 81920.00
8.375 0.999989 579724 93622.86
10.271 0.999991 579725 109226.67
10.591 0.999992 579726 131072.00
10.911 0.999993 579727 145635.56
10.911 0.999994 579727 163840.00
10.911 0.999995 579727 187245.71
10.927 0.999995 579728 218453.33
10.927 0.999996 579728 262144.00
10.983 0.999997 579729 291271.11
10.983 0.999997 579729 327680.00
10.983 0.999997 579729 374491.43
10.983 0.999998 579729 436906.67
10.983 0.999998 579729 524288.00
11.783 0.999998 579730 582542.22
11.783 1.000000 579730 inf
#[Mean = 0.955, StdDeviation = 0.417]
#[Max = 11.776, Total count = 579730]
#[Buckets = 27, SubBuckets = 2048]
----------------------------------------------------------
599444 requests in 5.00m, 253.69MB read
Requests/sec: 1998.14
Transfer/sec: 865.94KB
SUT1ではリクエストレートは約1999/sec、平均レイテンシは849.54μs。
SUT2ではリクエストレートは約1999/sec、平均レイテンシは960μs。
(変わらなくない...?)
グラフのX軸はレイテンシパーセンタイル(システムやサービスのレスポンス時間を評価する際に使用される統計的な指標、例えば99パーセンタイルは全リクエストの99%が収まる応答時間)を表し、Y軸は応答レイテンシをミリ秒単位で測定します。
今回の場合ではリクエストレート(1秒間に処理を行うHTTPリクエストの数)を2000rpsに設定されて、その際応答レイテンシは99パーセンタイルに近づくにつれて指数関数的に増加し始めました(一番遅いリクエストは約12ms)。
こちらのブログによると「99パーセンタイルは、APIの応答性を向上させるために非常に重要な指標」とのことで、今回のパフォーマンステストでも上記に明確な差が出ることを期待したのですが少し残念な結果となってしまいました。
(おまけ)価格パフォーマンスの定義について
例として、c5.2xlargeからc6g.2xlargeに移行してパフォーマンスが5%向上した場合、パフォーマンス/価格は34.6%向上したと考えられます(1.05/0.78、つまり5%のパフォーマンス向上、c6g.2xlargeは1時間あたりc5.2xlargeの78%のコスト)。
今回だとm6gのままJavaのバージョンを向上させたのでパフォーマンスの変化割合がそのまま価格パフォーマンスの変化割合となります。
まとめ
性能の比較という意味では正直なところGravitonと非Gravitonとの比較ができなかったこと、Javaのバージョン差による性能の差が期待していたものと違っていたのであまりいい結果が得られなかったワークショップとなりました。
wrk2というツールの使い方や、本ワークショップを受ける上で事前にGravitonの予習して詳しくなれた点が良かったです。