Alibaba Cloud Sapporoでお話しました。~Alibaba Cloudのベンチマークテスト
6月29日(金)に開催されたAlibaba Cloud のセミナー「Alibaba Cloud Sapporo」に参加しました。
Alibaba Cloudは、Alibabaグループが展開するクラウドサーバーサービス(IaaS)です。
日本では、SBクラウド社がサービスを提供しています。
https://jp.alibabacloud.com/
今回はお声がけいただいて、「Alibaba Cloudのベンチマークテスト」と題して、10分ぐらいお話ししました。
発表資料はこちら。
2月の「CloudGarage Deep Meetup」のときと同様に、Alibaba CloudのECS仮想サーバーに対して、いつも使っているツールunixbenchとdbenchによるベンチマークテストを行い、AWS EC2、IDCFクラウドのサーバーと比較してみました。
unixbenchのスコアは各サービスほとんど同じ。
dbenchのほうは、Alibaba Cloudはスループット値がやや低く、最大レイテンシ値が大きい、という結果となりました。
Alibaba Cloudのディスクスループット値がやや低い点については、発表では、「AWS EC2は(EBSの)IOPSバーストが効いているからよい値なのでは?」と推測しましたが、ここではもう一歩踏み込んでみます。
ディスクベンチマークツールfioでもシーケンシャル、ランダムのディスク読み書きテストを行ってみたところ、「レイテンシにばらつきがある」という結果となりました。
以下はfioにおけるランダムRead/Writeテストの結果です。
パラメータは以下のとおりで、4KBのランダム読み書き処理をたくさん行います。
size=1g // 読み書きの総サイズは1GB iodepth=32 // 非同期で同時に要求するI/O数(多重度)は32 bs=4k // ブロックサイズは4KB rw=randrw // ランダムでRead50%, Write50% runtime=300 // テストの実行時間は300秒 ioengine=libaio // IOエンジンは非同期
・AWS EC2 c5.large SSD 20GBのfioランダム読み書き実行結果(抜粋)
1g_Rand-ReadWrite-4K-QD32: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=32 fio-2.1.7 Starting 1 process 1g_Rand-ReadWrite-4K-QD32: Laying out IO file(s) (1 file(s) / 1024MB) 1g_Rand-ReadWrite-4K-QD32: (groupid=0, jobs=1): err= 0: pid=2461: Fri Jun 8 12:59:51 2018 read : io=1765.3MB, bw=6025.3KB/s, iops=1506, runt=300011msec slat (usec): min=1, max=8248, avg=279.93, stdev=459.41 clat (usec): min=384, max=21015, avg=10311.31, stdev=813.67 lat (usec): min=388, max=21017, avg=10591.28, stdev=837.47 clat percentiles (usec): | 1.00th=[ 9408], 5.00th=[ 9792], 10.00th=[ 9792], 20.00th=[ 9920], | 30.00th=[10048], 40.00th=[10048], 50.00th=[10176], 60.00th=[10432], | 70.00th=[10688], 80.00th=[10944], 90.00th=[11072], 95.00th=[11200], | 99.00th=[11456], 99.50th=[12096], 99.90th=[14656], 99.95th=[15808], | 99.99th=[17280] bw (KB /s): min= 5584, max=18424, per=100.00%, avg=6031.24, stdev=533.41 write: io=1761.9MB, bw=6013.7KB/s, iops=1503, runt=300011msec slat (usec): min=1, max=8741, avg=282.19, stdev=465.96 clat (usec): min=501, max=20061, avg=10390.12, stdev=787.23 lat (usec): min=528, max=20414, avg=10672.37, stdev=783.98 clat percentiles (usec): | 1.00th=[ 9408], 5.00th=[ 9792], 10.00th=[ 9920], 20.00th=[10048], | 30.00th=[10048], 40.00th=[10176], 50.00th=[10304], 60.00th=[10560], | 70.00th=[10816], 80.00th=[10944], 90.00th=[11072], 95.00th=[11200], | 99.00th=[11328], 99.50th=[11584], 99.90th=[14144], 99.95th=[15680], | 99.99th=[17536] bw (KB /s): min= 5544, max=17568, per=100.00%, avg=6018.32, stdev=500.71 lat (usec) : 500=0.01%, 750=0.07%, 1000=0.20% lat (msec) : 2=0.10%, 4=0.01%, 10=25.68%, 20=73.94%, 50=0.01% cpu : usr=0.33%, sys=0.99%, ctx=390201, majf=0, minf=26 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0% issued : total=r=451913/w=451037/d=0, short=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=32 Run status group 0 (all jobs): READ: io=1765.3MB, aggrb=6025KB/s, minb=6025KB/s, maxb=6025KB/s, mint=300011msec, maxt=300011msec WRITE: io=1761.9MB, aggrb=6013KB/s, minb=6013KB/s, maxb=6013KB/s, mint=300011msec, maxt=300011msec Disk stats (read/write): nvme0n1: ios=451728/450964, merge=0/84, ticks=4511784/4571656, in_queue=8779496, util=99.89%
IOPSはRead/Write合計で3009。IOPSは3000までバーストするので、完全にバーストが効いた状態といえる。
レイテンシ(lat)は、約99%が4~20msec。
・Alibaba Cloud ECS sn1ne.large SSD 20GBのfioランダム読み書き実行結果(抜粋)
1g_Rand-ReadWrite-4K-QD32: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=32 fio-2.1.7 Starting 1 process 1g_Rand-ReadWrite-4K-QD32: Laying out IO file(s) (1 file(s) / 1024MB) 1g_Rand-ReadWrite-4K-QD32: (groupid=0, jobs=1): err= 0: pid=10463: Fri Jun 8 12:55:33 2018 read : io=1055.6MB, bw=3602.6KB/s, iops=900, runt=300032msec slat (usec): min=1, max=93276, avg= 6.82, stdev=180.12 clat (usec): min=90, max=246192, avg=17268.90, stdev=34139.77 lat (usec): min=381, max=246201, avg=17275.88, stdev=34139.91 clat percentiles (usec): | 1.00th=[ 548], 5.00th=[ 668], 10.00th=[ 756], 20.00th=[ 876], | 30.00th=[ 996], 40.00th=[ 1128], 50.00th=[ 1272], 60.00th=[ 1512], | 70.00th=[ 1992], 80.00th=[ 4768], 90.00th=[91648], 95.00th=[93696], | 99.00th=[94720], 99.50th=[95744], 99.90th=[99840], 99.95th=[102912], | 99.99th=[111104] bw (KB /s): min= 2574, max= 4384, per=100.00%, avg=3603.52, stdev=180.40 write: io=1054.6MB, bw=3597.5KB/s, iops=899, runt=300032msec slat (usec): min=2, max=11895, avg= 7.39, stdev=28.52 clat (usec): min=420, max=246084, avg=18269.92, stdev=34417.68 lat (usec): min=427, max=246093, avg=18277.48, stdev=34417.51 clat percentiles (usec): | 1.00th=[ 620], 5.00th=[ 796], 10.00th=[ 932], 20.00th=[ 1128], | 30.00th=[ 1320], 40.00th=[ 1528], 50.00th=[ 1784], 60.00th=[ 2224], | 70.00th=[ 3152], 80.00th=[10176], 90.00th=[92672], 95.00th=[94720], | 99.00th=[95744], 99.50th=[97792], 99.90th=[105984], 99.95th=[110080], | 99.99th=[123392] bw (KB /s): min= 2363, max= 4296, per=100.00%, avg=3597.98, stdev=177.04 lat (usec) : 100=0.01%, 250=0.01%, 500=0.21%, 750=6.50%, 1000=15.11% lat (msec) : 2=41.04%, 4=13.95%, 10=3.99%, 20=1.27%, 50=0.17% lat (msec) : 100=17.56%, 250=0.20% cpu : usr=0.47%, sys=1.47%, ctx=257229, majf=0, minf=48 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0% issued : total=r=270220/w=269839/d=0, short=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=32 Run status group 0 (all jobs): READ: io=1055.6MB, aggrb=3602KB/s, minb=3602KB/s, maxb=3602KB/s, mint=300032msec, maxt=300032msec WRITE: io=1054.6MB, aggrb=3597KB/s, minb=3597KB/s, maxb=3597KB/s, mint=300032msec, maxt=300032msec Disk stats (read/write): vda: ios=270111/269871, merge=0/69, ticks=4660087/4926290, in_queue=9586725, util=100.00%
IOPSはRead/Write合計で1799。SSD 20GBにおける仕様は1800なのでほぼ仕様どおり。
レイテンシ(lat)は、約77%ぐらいが4msec未満だが、約18%が50~100msec。
ということで、レイテンシを比較すると、
- AWS EC2は、全体がほぼ同じ範囲内に収まる。
- Alibaba Cloud ECSは、全体の3/4ぐらいは速いけど、残り1/4が少し遅く、ばらつきがある。
という、分布の違いがありました。
このように、たまに遅延する時間帯があることが、ディスクスループット値を少し下げる要因となっているのかもしれません。
ばらつきが出る原因は、もちろん僕のほうではわかりません。
AWS EC2のEBSストレージについては、最近のm4/m5, c4/c5インスタンスは「EBS最適化」がデフォルトで有効となっており、ストレージ以外のアクセスとは別に、ストレージアクセス専用のネットワーク帯域が確保されています。
一方、Alibaba Cloud ECSのストレージ「エラスティックブロックストレージ/クラウドディスク」については、「ストレージアクセス専用のネットワーク帯域」のような仕組みが存在するかどうかは、ドキュメントからはわかりませんでした。
ストレージ以外のネットワークアクセスが影響しているのかもしれませんし、ストレージのネットワーク制御や、物理的なストレージシステムそのものに原因があるのかもしれません。
(参考)
・Alibaba Cloud ECSドキュメントセンター エラスティックブロックストレージ
https://jp.alibabacloud.com/help/doc-detail/25383.htm
とはいっても、僕が少し使ってみた限りでは、ディスクアクセスが極端に遅いわけではありません。
(「AWS EC2やIDCFクラウドのスループット値がよすぎる」ともいえます。)
今後改善される可能性もありますし、発表にも含めましたが、同時クライアント数を増やすとスループット値が上がっていく傾向も見られたので、実際のアプリケーション実行環境としては大きな問題はないように思います。
また、ディスクサイズを増やせば、仕様上のスループット上限値が増えますし、アプリケーション側でキャッシュ機構をうまく使って、ディスクアクセスを極力減らすという解決方法もあるでしょう。
他の方の発表にもありましたが、Alibaba Cloudには、
- 中国リージョンでサーバーを作れる。
- ドキュメントが充実している(日本語も)。
- 機能や管理コンソール画面がAWSに似ているので、AWSユーザーは使いやすい(入りやすいのはよいこと!)。
- 機能の追加スピードが速い。
といった長所があります。
僕はまだ仮想サーバーサービスのECSしか使っていないので、RDBサービスなど、いろいろ試してみたいと思います。
Alibaba Cloudの無料トライアルは、30,000円分が1年間無料で利用できるというものです。
1ヵ月や3ヵ月ではなく、1年間と長期に渡って使えるのはうれしいですね。
なお、アカウント登録は、クレジットカードの登録が必要で、(法人ではなく)個人登録の場合は顔写真付き証明書の画像送付が必要となります。
この点は他のクラウドサービスより手間がかかります。
(参考)
・Alibaba Cloud お支払い方法の有効化手順
https://jp.alibabacloud.com/help/doc-detail/50661.htm
(関連記事)
・AWS SSDベースEBSのディスクベンチマーク
https://inaba-serverdesign.jp/blog/20140618/aws_ssd_ebs_disk_benchmark.html
・CloudGarage Deep Meetup in SapporoのLTでお話しました。~CloudGarageのベンチマークテスト
https://inaba-serverdesign.jp/blog/20180226/cloudgarage_deep_meetup_sapporo_benchmark.html