Сравнение производительности виртуальных машин 6 облачных платформ: Selectel, MCS, Я.Облако, Google Cloud, AWS и Azure

в 0:35, , рубрики: azure, EC2, google cloud, mcs, selectel cloud, виртуализация, виртуальная инфраструктура, виртуальные машины, виртуальный хостинг, Облачные вычисления, облачные сервисы, производительность, системное администрирование, Тестирование IT-систем, тесты, я.облако

Давеча на глаза мне тут попалось аж две статьи из одного корпоративного блога, касающиеся облаков — одна про Kubernetes, а во второй была попытка замера производительности по методике, которая мне показалась сомнительной (спойлер — и не зря).
Про K8s мне тоже есть что сказать, но поговорим про производительность.
Недоверие к результатам было вызвано многими факторами, но основными из них для меня стали следующие: параметров запуска тестов не было, количество итераций не озвучено, как выбирались машины не озвучено, подробной конфигурации тоже не было. Сомнительно, в общем.
В целом, я пользуюсь в основном Google Cloud и AWS (в сумме уже с десяток лет опыта по ним набежало) и с отечественными облачными провайдерам особо не работаю, но, по стечению обстоятельств, у меня есть активные аккаунты в Selectel, MCS, Я.Облаке и, после этого теста, еще и в Azure.
К счастью, все эти платформы публичные и что бы я не намерил, каждый при желании может пойти, повторить и проверить.
Итогом всего этого стала мысль — почему бы не потратить пару сотен рублей, все выходные и действительно вдумчиво не померить все шесть платформ и выяснить, какая из них дает лучшую производительность относительно стоимости и в абсолютных цифрах при одинаковых конфигурациях, а заодно и сравнить глобальных поставщиков с российскими.
А так же, как выяснилось, прояснить некоторые «особенности» в выделении ресурсов и напомнить себе и окружающим, что далеко не всегда и не на всех платформах за одни и те же деньги можно получить предсказуемую производительность.
Результаты получились не сказать чтобы феноменальными, но на мой взгляд крайне любопытными.
Интересующихся прошу под кат.

Методика

Виртуальные машины

У каждого облачного провайдера последовательно запускаются в разных зонах доступности (если зоны две, то 1 машина первой зоне и 2 во второй) три виртуальные машины с 4 CPU, 8 GB оперативной памяти и системным диском на 50 GB.
Тип процессора/инстанса — новейший из доступных, если есть выбор.
Тип ВМ — shared с полным выделением ядер.
Тип дисков — сетевой SSD с возможностью перемонтирования на другую ВМ.
Опции гарантированного выделения IOPS или машины оптимизированные под это не использовались, если это не предусмотрено стандартными условиями использования и отказаться от этого нельзя.
Файловая система дефолтная — ext4.
Никакие ручные настройки системы не производились.
На каждой из машин запускалась серия тестов, итоговые значения по каждой машине были усреднены.
Итоговая производительность платформы выражается средним арифметическим усредненных значений тестов для каждой из виртуальных машин, но стандартное отклонение тоже есть в таблицах для интересующихся.
Операционная система — Ubuntu 16.04 последнего доступного уровня патчей.

Расчет стоимости

Расчет стоимости производился без учета каких-либо бонусных начислений от провайдера, без учета стоимости трафика, из расчета работы виртуальной машины полный календарный месяц без остановки.
Так же, некоторые платформы позволяют путем определенных ограничений (которые вполне можно умеючи пережить) весомо снизить стоимость ресурсов.
Для AWS это Spot инстансы, для GCE — Preemptible инстансы. При подходящей архитектуре приложения ими вполне можно успешно пользоваться без вреда для него, но с пользой для кошелька, проверено как лично мной, так и десятками компаний, использующих и то, и другое.
К этой же категории можно отнести тип диска в Selectel. Несмотря на то, что в основных замерах участвовали диски типа «Быстрый», существует еще ощутимо более дешевый «Универсальный», не блистающий скоростью, но подходящий для огромного количества задач. Варианты с его использованием тоже были учтены при окончательных расчетах.

Тесты

Для запуска тестов был написан вот такой скриптик, из которого видно все параметры запуска:

Скрипт тестирования

#!/usr/bin/env bash
TIME=60

# Workload 70% read 30% write
cat > fio-rand.fio << EOL
[global]
name=fio-rand-RW
filename=fio-rand-RW
rw=randrw
rwmixread=70
rwmixwrite=30
bs=4K
direct=1
numjobs=1
time_based=1
runtime=${TIME}

[file1]
size=2G
iodepth=16
EOL

echo "Run FIO"
for i in {1..3}; do
  echo "$i iter:"
  fio fio-rand.fio |grep -E "(read|write|bw|iops|READ|WRITE)" |grep -v "Disk"
done
echo "Run stress-ng."
for i in {1,2,4}; do
  for z in {1..3}; do
    echo -n "$z iter. Stress-NG for $i CPU: "
    stress-ng --cpu $i --cpu-method matrixprod --metrics-brief -t $TIME  2>&1 |sed -n '6p'| awk '{print $5}'
  done
done
for i in {1,2,4}; do
  for z in {1..3}; do
    echo -n "$z iter. Sysbench CPU for $i thread(s): "
    sysbench --num-threads=$i --max-time=$TIME --test=cpu run 2>&1|grep "total time:"|awk '{print $3}'
  done
done
for i in {1,2,4}; do
  for z in {1..3}; do
    echo -n "$z iter. Sysbench Memory for $i thread(s): "
    sysbench --num-threads=$i --max-time=$TIME --test=memory run 2>&1| grep "Operations performed:"
  done
done

Для всех тестов, кроме Sysbench CPU, больше — лучше.

Результаты всех запусков были собраны в Excel таблицы для дальнейший расчетов.
Ну, вроде как делал — рассказал, теперь надо рассказать что получилось.

Тестирование

Машинка-пример вне теста.

Облака принято сравнивать с обычными железными серверами. Я не вижу в этом особого смысла, так как облако — это не только и не столько непосредственно вычислительные мощности, а в первую очередь — экосистема но, тем не менее, я думаю многим все-таки будет интересно такое сравнение. Ну и вообще, с чем то надо сравнивать. С чем то близким, известным и понятным.
Именно железной машинки под рукой у меня не оказалось, зато есть весьма не новая рабочая станция Dell, она же домашний сервер с известным процессором (E5-4650L @ 2.60GHz), подходящим количеством не самой быстрой памяти DDR3 EEC (если быть откровенным — самой медленной из тех, что вообще были совместимы) и SSD диском SmarBuy, купленным года 4 назад и недавно переехавшим в состав этой сборки.
Так как работает все это под FreeBSD 11.2, то средствами bhyve была создана подходящая виртуалочка и там же был запущен тест.

Лог запуска

Run FIO
1 iter:
  read : io=891652KB, bw=14861KB/s, iops=3715, runt= 60001msec
    bw (KB  /s): min=  116, max=17520, per=100.00%, avg=15449.34, stdev=2990.83
  write: io=381908KB, bw=6365.3KB/s, iops=1591, runt= 60001msec
    bw (KB  /s): min=   49, max= 7752, per=100.00%, avg=6620.06, stdev=1290.46
   READ: io=891652KB, aggrb=14860KB/s, minb=14860KB/s, maxb=14860KB/s, mint=60001msec, maxt=60001msec
  WRITE: io=381908KB, aggrb=6365KB/s, minb=6365KB/s, maxb=6365KB/s, mint=60001msec, maxt=60001msec
2 iter:
  read : io=930228KB, bw=15504KB/s, iops=3875, runt= 60001msec
    bw (KB  /s): min= 5088, max=17144, per=99.98%, avg=15500.61, stdev=2175.23
  write: io=398256KB, bw=6637.6KB/s, iops=1659, runt= 60001msec
    bw (KB  /s): min= 2064, max= 7504, per=100.00%, avg=6639.82, stdev=979.69
   READ: io=930228KB, aggrb=15503KB/s, minb=15503KB/s, maxb=15503KB/s, mint=60001msec, maxt=60001msec
  WRITE: io=398256KB, aggrb=6637KB/s, minb=6637KB/s, maxb=6637KB/s, mint=60001msec, maxt=60001msec
3 iter:
  read : io=886780KB, bw=14779KB/s, iops=3694, runt= 60001msec
    bw (KB  /s): min= 1823, max=17248, per=100.00%, avg=15520.09, stdev=2453.59
  write: io=379988KB, bw=6333.3KB/s, iops=1583, runt= 60001msec
    bw (KB  /s): min=  731, max= 7488, per=100.00%, avg=6647.33, stdev=1054.67
   READ: io=886780KB, aggrb=14779KB/s, minb=14779KB/s, maxb=14779KB/s, mint=60001msec, maxt=60001msec
  WRITE: io=379988KB, aggrb=6333KB/s, minb=6333KB/s, maxb=6333KB/s, mint=60001msec, maxt=60001msec
Run stress-ng.
1 iter. Stress-NG for 1 CPU: 12227
2 iter. Stress-NG for 1 CPU: 12399
3 iter. Stress-NG for 1 CPU: 12134
1 iter. Stress-NG for 2 CPU: 23812
2 iter. Stress-NG for 2 CPU: 23558
3 iter. Stress-NG for 2 CPU: 21254
1 iter. Stress-NG for 4 CPU: 39495
2 iter. Stress-NG for 4 CPU: 39876
3 iter. Stress-NG for 4 CPU: 42370
1 iter. Sysbench CPU for 1 thread(s): 11.0566s
2 iter. Sysbench CPU for 1 thread(s): 11.0479s
3 iter. Sysbench CPU for 1 thread(s): 11.0451s
1 iter. Sysbench CPU for 2 thread(s): 5.6159s
2 iter. Sysbench CPU for 2 thread(s): 5.5664s
3 iter. Sysbench CPU for 2 thread(s): 5.5407s
1 iter. Sysbench CPU for 4 thread(s): 2.8368s
2 iter. Sysbench CPU for 4 thread(s): 2.8801s
3 iter. Sysbench CPU for 4 thread(s): 2.8244s
1 iter. Sysbench Memory for 1 thread(s): Operations performed: 104857600 (2537704.01 ops/sec)
2 iter. Sysbench Memory for 1 thread(s): Operations performed: 104857600 (2536025.17 ops/sec)
3 iter. Sysbench Memory for 1 thread(s): Operations performed: 104857600 (2472121.34 ops/sec)
1 iter. Sysbench Memory for 2 thread(s): Operations performed: 104857600 (3182800.43 ops/sec)
2 iter. Sysbench Memory for 2 thread(s): Operations performed: 104857600 (3379413.65 ops/sec)
3 iter. Sysbench Memory for 2 thread(s): Operations performed: 104857600 (3306495.59 ops/sec)
1 iter. Sysbench Memory for 4 thread(s): Operations performed: 104857600 (4300089.71 ops/sec)
2 iter. Sysbench Memory for 4 thread(s): Operations performed: 104857600 (4163689.93 ops/sec)
3 iter. Sysbench Memory for 4 thread(s): Operations performed: 104857600 (4163996.47 ops/sec)

Если перевести результаты в табличный вид, получается следующее:

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 3715.00 3875.00 3694.00 3761.33 99.00
FIO WRITE IOPS 1591.00 1659.00 1583.00 1611.00 41.76
STRESS-NG 1 CPU 12227.00 12399.00 12134.00 12253.33 134.45
STRESS-NG 2 CPU 23812.00 23558.00 21254.00 22874.67 1409.27
STRESS-NG 4 CPU 39495.00 39876.00 42370.00 40580.33 1561.56
Sysbench CPU for 1 11.06 11.05 11.05 11.05 0.01
Sysbench CPU for 2 5.62 5.57 5.54 5.57 0.04
Sysbench CPU for 4 2.84 2.88 2.82 2.85 0.03
Sysbench Mem t 1 2537704.01 2536025.17 2472121.34 2515283.51 37388.96
Sysbench Mem t 2 3182800.43 3379413.65 3306495.59 3289569.89 99393.41
Sysbench Mem t 4 4300089.71 4163689.93 4163996.47 4209258.70 78662.11

Ну, опорные данные есть, теперь непосредственно результаты тестирования провайдеров.

Далее я не буду приводить полные логи, чтобы не раздувать статью, но они у меня хранятся, при желании — просите ссылку, поделюсь, хотя данные из них перенесены в таблицу.

Яндекс.Облако

Результаты по зоне ru-central1-a:

Таблица результатов

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 554.00 543.00 545.00 547.33 5.86
FIO WRITE IOPS 237.00 232.00 233.00 234.00 2.65
STRESS-NG 1 CPU 10236.00 10045.00 10161.00 10147.33 96.23
STRESS-NG 2 CPU 19756.00 19479.00 20291.00 19842.00 412.77
STRESS-NG 4 CPU 18743.00 17906.00 18192.00 18280.33 425.43
Sysbench CPU for 1 11.94 11.95 11.98 11.96 0.02
Sysbench CPU for 2 7.19 7.23 6.16 6.86 0.61
Sysbench CPU for 4 3.72 3.72 3.70 3.71 0.01
Sysbench Mem t 1 2080442.66 2085059.55 2079872.00 2081791.40 2844.64
Sysbench Mem t 2 2460594.62 2715142.01 2536824.57 2570853.73 130641.04
Sysbench Mem t 4 2978385.59 2928369.70 3020014.59 2975589.96 45886.36

Результаты по зоне ru-central1-b:

Таблица результатов

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 543.00 537.00 523.00 534.33 10.26
FIO WRITE IOPS 232.00 230.00 224.00 228.67 4.16
STRESS-NG 1 CPU 10634.00 10848.00 11870.00 11117.33 660.55
STRESS-NG 2 CPU 22109.00 20861.00 21020.00 21330.00 679.30
STRESS-NG 4 CPU 18964.00 19449.00 18992.00 19135.00 272.29
Sysbench CPU for 1 11.30 11.35 11.34 11.33 0.03
Sysbench CPU for 2 5.87 5.88 5.89 5.88 0.01
Sysbench CPU for 4 3.56 3.55 3.54 3.55 0.01
Sysbench Mem t 1 2190808.15 2197111.57 2197600.12 2195173.28 3788.20
Sysbench Mem t 2 2442631.19 2433028.20 2415710.66 2430456.68 13643.25
Sysbench Mem t 4 3010239.12 3168720.68 3088677.50 3089212.43 79242.13

Результаты по зоне ru-central1-c:

Таблица результатов

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 541.00 551.00 558.00 550.00 8.54
FIO WRITE IOPS 232.00 236.00 239.00 235.67 3.51
STRESS-NG 1 CPU 10424.00 10192.00 10325.00 10313.67 116.41
STRESS-NG 2 CPU 19637.00 20330.00 19585.00 19850.67 415.93
STRESS-NG 4 CPU 28884.00 28477.00 28750.00 28703.67 207.42
Sysbench CPU for 1 11.67 11.64 11.68 11.67 0.02
Sysbench CPU for 2 6.02 6.05 7.06 6.38 0.59
Sysbench CPU for 4 3.40 3.40 3.40 3.40 0.00
Sysbench Mem t 1 2131168.41 2130201.75 2142809.68 2134726.61 7016.81
Sysbench Mem t 2 2777100.50 2592860.27 2226863.89 2532274.89 280076.82
Sysbench Mem t 4 2834838.09 2935298.85 2753443.73 2841193.56 91093.99

Сводные результаты:

Test Average Avg Min Avg Max StDev StDev %
FIO READ IOPS 543.89 534.33 550.00 8.38 1.5%
FIO WRITE IOPS 232.78 228.67 235.67 3.66 1.6%
STRESS-NG 1 CPU 10526.11 10147.33 11117.33 518.72 4.9%
STRESS-NG 2 CPU 20340.89 19842.00 21330.00 856.61 4.2%
STRESS-NG 4 CPU 22039.67 18280.33 28703.67 5786.99 26.3%
Sysbench CPU for 1 11.65 11.33 11.96 0.31 2.7%
Sysbench CPU for 2 6.37 5.88 6.86 0.49 7.7%
Sysbench CPU for 4 3.55 3.40 3.71 0.16 4.5%
Sysbench Mem t 1 2137230.43 2081791.40 2195173.28 56732.39 2.7%
Sysbench Mem t 2 2511195.10 2430456.68 2570853.73 72533.45 2.9%
Sysbench Mem t 4 2968665.32 2841193.56 3089212.43 124154.35 4.2%

Хочу обратить отдельное внимание на один примечательный факт.
При полной нагрузке всех ядер виртуальных машин в зонах A и B суммарная производительность НИЖЕ, чем при нагрузке только двух ядер из четырех.
Более того, я взял еще дополнительных машин в одной из зон и прогнал тест на них — проблема никуда не ушла.
Предполагаю, что это проблема технического характера и связана она с аппаратными особенностями машин, используемых для гипервизоров и учете их при аллокации ресурсов (припоминается такой случай из практики). Ну или с чем то другим, внутрь посмотреть я не могу, а сильно уж гадать не хочу.
Надеюсь, товарищи из Я.Облака прочитают эту статью и что-то с этим сделают, а если сильно повезет, то и расскажут что именно, а то получается несколько обидно и местами неприятно (достаточно много приложений ориентируются на количество ядер для расчета количества потоков).

Mail.RU Cloud (MCS)

У Mail.ru только две зоны доступности, поэтому два теста были проведены на разных машинах в одной зоне.
Результаты по зоне «Москва-Восток»(первая ВМ):

Таблица с результатами

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 487.00 538.00 534.00 519.67 28.36
FIO WRITE IOPS 209.00 231.00 229.00 223.00 12.17
STRESS-NG 1 CPU 7359.00 6567.00 7022.00 6982.67 397.46
STRESS-NG 2 CPU 14144.00 14916.00 13137.00 14065.67 892.08
STRESS-NG 4 CPU 21381.00 21199.00 21032.00 21204.00 174.55
Sysbench CPU for 1 15.54 16.20 14.98 15.57 0.61
Sysbench CPU for 2 7.30 7.70 7.53 7.51 0.20
Sysbench CPU for 4 4.02 4.09 3.79 3.96 0.16
Sysbench Mem t 1 1117493.99 1161261.85 1423941.92 1234232.59 165744.17
Sysbench Mem t 2 1819474.62 1692128.17 1668347.81 1726650.20 81262.88
Sysbench Mem t 4 2357943.97 2379492.56 2312976.14 2350137.56 33938.38

Результаты по зоне «Москва-Восток»(вторая ВМ):

Результаты тестирования

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 475.00 509.00 472.00 485.33 20.55
FIO WRITE IOPS 205.00 218.00 204.00 209.00 7.81
STRESS-NG 1 CPU 6953.00 7030.00 7127.00 7036.67 87.19
STRESS-NG 2 CPU 14623.00 13945.00 13523.00 14030.33 554.94
STRESS-NG 4 CPU 27022.00 27184.00 27670.00 27292.00 337.23
Sysbench CPU for 1 14.88 13.44 14.45 14.26 0.74
Sysbench CPU for 2 6.89 7.13 6.69 6.90 0.22
Sysbench CPU for 4 3.52 3.49 3.68 3.57 0.10
Sysbench Mem t 1 1129165.42 1238462.80 1344025.16 1237217.79 107435.28
Sysbench Mem t 2 1904396.37 1740914.98 1733216.87 1792842.74 96684.92
Sysbench Mem t 4 2416702.17 2437844.98 2384159.80 2412902.32 27043.55

Результаты по зоне «Москва-Север»:

Результаты тестирования

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 510.00 647.00 613.00 590.00 71.34
FIO WRITE IOPS 218.00 277.00 262.00 252.33 30.66
STRESS-NG 1 CPU 9657.00 9742.00 9867.00 9755.33 105.63
STRESS-NG 2 CPU 19251.00 20069.00 19677.00 19665.67 409.12
STRESS-NG 4 CPU 39020.00 38665.00 38461.00 38715.33 282.88
Sysbench CPU for 1 12.45 12.53 12.66 12.55 0.11
Sysbench CPU for 2 6.25 6.20 6.22 6.22 0.02
Sysbench CPU for 4 3.18 3.16 3.16 3.17 0.01
Sysbench Mem t 1 2003899.51 1990350.38 1974380.86 1989543.58 14775.85
Sysbench Mem t 2 1990419.20 2022621.53 1934822.52 1982621.08 44415.93
Sysbench Mem t 4 2337084.52 2227633.06 2021779.21 2195498.93 160090.01

Сводные результаты:

Test Average Avg Min Avg Max StDev StDev %
FIO READ IOPS 531.67 485.33 590.00 53.36 10.0%
FIO WRITE IOPS 228.11 209.00 252.33 22.11 9.7%
STRESS-NG 1 CPU 7924.89 6982.67 9755.33 1585.44 20.0%
STRESS-NG 2 CPU 15920.56 14030.33 19665.67 3243.41 20.4%
STRESS-NG 4 CPU 29070.44 21204.00 38715.33 8890.10 30.6%
Sysbench CPU for 1 14.13 12.55 15.57 1.52 10.7%
Sysbench CPU for 2 6.88 6.22 7.51 0.64 9.3%
Sysbench CPU for 4 3.57 3.17 3.96 0.40 11.2%
Sysbench Mem t 1 1486997.99 1234232.59 1989543.58 435219.81 29.3%
Sysbench Mem t 2 1834038.01 1726650.20 1982621.08 132864.82 7.2%
Sysbench Mem t 4 2319512.93 2195498.93 2412902.32 111890.39 4.8%

Из интересного хочется отметить, что проблемы деградации производительности при использовании четырех потоков тут нет, и похоже выдаются честные (хоть и достаточно слабые) ядра.
Так же, в зоне «Север» используются значительно более мощные процессоры, чем в зоне Восток, разница в производительности при полной нагрузке доходит до двух раз. За те же деньги. Выводы делайте сами.

Selectel

Результаты его тестирования получились очень интересными. В абсолюте он предоставляет самые мощные 4-х ядерные машины из всех протестированных провайдеров.

Результаты по зоне «Москва — Березина-1»:

Результаты тестирования

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 2319.00 2294.00 2312.00 2308.33 12.90
FIO WRITE IOPS 998.00 986.00 995.00 993.00 6.24
STRESS-NG 1 CPU 11320.00 11038.00 10936.00 11098.00 198.91
STRESS-NG 2 CPU 23164.00 22093.00 22558.00 22605.00 537.04
STRESS-NG 4 CPU 43879.00 44118.00 44086.00 44027.67 129.74
Sysbench CPU for 1 12.01 11.96 11.97 11.98 0.02
Sysbench CPU for 2 6.01 5.99 5.99 6.00 0.02
Sysbench CPU for 4 3.01 3.00 3.00 3.00 0.01
Sysbench Mem t 1 2158876.40 2162098.22 2158738.03 2159904.22 1901.32
Sysbench Mem t 2 2413547.34 2340801.67 2569554.40 2441301.14 116874.54
Sysbench Mem t 4 2858920.38 2935705.54 2714476.62 2836367.51 112325.57

Результаты по зоне «Москва — Березина-2»:

Таблица с результатами

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 1735.00 1729.00 1724.00 1729.33 5.51
FIO WRITE IOPS 745.00 742.00 740.00 742.33 2.52
STRESS-NG 1 CPU 18231.00 18462.00 18518.00 18403.67 152.13
STRESS-NG 2 CPU 36965.00 36495.00 37006.00 36822.00 283.93
STRESS-NG 4 CPU 74272.00 74428.00 74218.00 74306.00 109.05
Sysbench CPU for 1 11.22 11.17 11.15 11.18 0.03
Sysbench CPU for 2 5.60 5.60 5.60 5.60 0.00
Sysbench CPU for 4 2.83 2.81 2.81 2.82 0.01
Sysbench Mem t 1 2396762.92 2405750.19 2394240.05 2398917.72 6050.06
Sysbench Mem t 2 1980511.45 2079328.96 1968664.26 2009501.56 60761.74
Sysbench Mem t 4 2283159.05 2271698.71 2299665.98 2284841.25 14059.32

Результаты по зоне «СПБ — Дубровка-1»:

Таблица с результатами

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 2550.00 2618.00 2666.00 2611.33 58.29
FIO WRITE IOPS 1096.00 1126.00 1147.00 1123.00 25.63
STRESS-NG 1 CPU 10801.00 10512.00 11175.00 10829.33 332.41
STRESS-NG 2 CPU 21418.00 21642.00 23179.00 22079.67 958.62
STRESS-NG 4 CPU 44183.00 44557.00 43012.00 43917.33 806.03
Sysbench CPU for 1 11.97 11.99 11.99 11.99 0.01
Sysbench CPU for 2 5.99 5.99 6.00 5.99 0.01
Sysbench CPU for 4 3.02 3.00 3.00 3.01 0.01
Sysbench Mem t 1 2159958.70 2162062.66 2158540.58 2160187.31 1772.13
Sysbench Mem t 2 2430650.73 2512678.85 2417945.57 2453758.38 51420.53
Sysbench Mem t 4 3171660.68 3018827.14 3343661.47 3178049.76 162511.39

Сводная таблица с результатами:

Test Average Avg Min Avg Max StDev StDev %
FIO READ IOPS 2216.33 1729.33 2611.33 448.14 20.2%
FIO WRITE IOPS 952.78 742.33 1123.00 193.49 20.3%
STRESS-NG 1 CPU 13443.67 10829.33 18403.67 4297.59 32.0%
STRESS-NG 2 CPU 27168.89 22079.67 36822.00 8363.96 30.8%
STRESS-NG 4 CPU 54083.67 43917.33 74306.00 17513.14 32.4%
Sysbench CPU for 1 11.72 11.18 11.99 0.46 4.0%
Sysbench CPU for 2 5.86 5.60 6.00 0.23 3.9%
Sysbench CPU for 4 2.94 2.82 3.01 0.11 3.7%
Sysbench Mem t 1 2239669.75 2159904.22 2398917.72 137912.86 6.2%
Sysbench Mem t 2 2301520.36 2009501.56 2453758.38 252972.39 11.0%
Sysbench Mem t 4 2766419.51 2284841.25 3178049.76 450693.81 16.3%

Как я уже говорил, из всех протестиванных этот провайдер предоставляет самые производительные машины из расчета на 4 потока. Но и тут есть своя особенность — опять, за те же деньги, мы получаем производительность, отличающуюся практически в 2 раза — сравните результаты Березина-2 с остальными.
Так же, хочется отметить весьма быстрые диски по разумной цене, лучше из доступных у трех тестируемых отечественных провайдеров. При этом, у машины с самым быстрым процессором самый медленный диск из трех.
Получается эдакая лотерея, правда с учетом что даже если не повезет, все равно все будет весьма и весьма прилично.

Google Cloud

Результаты тестирования GCE особых сюрпризов не принесли.
Все вполне предсказуемо, гомогенно и в целом соответствует заявленному.

Результаты по зоне europe-west1-b:

Результаты тестирования

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 924.00 910.00 888.00 907.33 18.15
FIO WRITE IOPS 396.00 391.00 380.00 389.00 8.19
STRESS-NG 1 CPU 14237.00 14137.00 14094.00 14156.00 73.37
STRESS-NG 2 CPU 28576.00 28419.00 28544.00 28513.00 82.96
STRESS-NG 4 CPU 29996.00 29880.00 29449.00 29775.00 288.22
Sysbench CPU for 1 12.63 12.66 12.67 12.65 0.02
Sysbench CPU for 2 6.52 6.41 6.38 6.44 0.08
Sysbench CPU for 4 3.35 3.56 3.56 3.49 0.12
Sysbench Mem t 1 2055240.49 2056617.63 2054720.94 2055526.35 980.13
Sysbench Mem t 2 1377683.73 1346931.63 1397680.79 1374098.72 25563.81
Sysbench Mem t 4 2279937.89 2275427.56 2278615.94 2277993.80 2318.63

Результаты по зоне europe-west-1c:

Результаты тестирования

FIO READ IOPS 946.00 995.00 984.00 975.00 25.71
FIO WRITE IOPS 406.00 428.00 422.00 418.67 11.37
STRESS-NG 1 CPU 14256.00 14250.00 14423.00 14309.67 98.20
STRESS-NG 2 CPU 28875.00 29057.00 29256.00 29062.67 190.56
STRESS-NG 4 CPU 30317.00 30462.00 29478.00 30085.67 531.23
Sysbench CPU for 1 12.52 12.49 12.61 12.54 0.06
Sysbench CPU for 2 6.28 6.30 6.31 6.29 0.02
Sysbench CPU for 4 3.38 3.57 3.52 3.49 0.10
Sysbench Mem t 1 2085832.84 2066794.24 2086303.39 2079643.49 11130.26
Sysbench Mem t 2 1368168.11 1535725.51 1710618.59 1538170.74 171238.33
Sysbench Mem t 4 2375534.54 2307610.22 2386046.89 2356397.22 42576.47

Результаты по зоне europe-west1-d:

Результаты тестирования

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 885.00 910.00 943.00 912.67 29.09
FIO WRITE IOPS 379.00 390.00 405.00 391.33 13.05
STRESS-NG 1 CPU 14254.00 14230.00 14008.00 14164.00 135.63
STRESS-NG 2 CPU 28262.00 28321.00 28473.00 28352.00 108.86
STRESS-NG 4 CPU 29615.00 29312.00 29138.00 29355.00 241.39
Sysbench CPU for 1 12.61 12.65 12.66 12.64 0.03
Sysbench CPU for 2 6.37 6.35 6.35 6.36 0.01
Sysbench CPU for 4 3.43 3.56 3.55 3.52 0.07
Sysbench Mem t 1 2050031.60 2068677.64 2052707.70 2057138.98 10081.96
Sysbench Mem t 2 1228313.90 1530374.73 1345581.79 1368090.14 152283.14
Sysbench Mem t 4 2335035.15 2420871.72 2361505.39 2372470.75 43956.33

Сводная таблица с результатами:

Test Average Avg Min Avg Max StDev StDev %
FIO READ IOPS 931.67 907.33 975.00 37.62 4.0%
FIO WRITE IOPS 399.67 389.00 418.67 16.50 4.1%
STRESS-NG 1 CPU 14209.89 14156.00 14309.67 86.50 0.6%
STRESS-NG 2 CPU 28642.56 28352.00 29062.67 372.63 1.3%
STRESS-NG 4 CPU 29738.56 29355.00 30085.67 366.69 1.2%
Sysbench CPU for 1 12.61 12.54 12.65 0.06 0.5%
Sysbench CPU for 2 6.36 6.29 6.44 0.07 1.1%
Sysbench CPU for 4 3.50 3.49 3.52 0.01 0.4%
Sysbench Mem t 1 2064102.94 2055526.35 2079643.49 13482.64 0.7%
Sysbench Mem t 2 1426786.53 1368090.14 1538170.74 96508.32 6.8%
Sysbench Mem t 4 2335620.59 2277993.80 2372470.75 50549.23 2.2%

Тут даже комментировать особо нечего.
Производительность в 4 потока едва отличается от двух, но не деградирует.
В целом каждое ядро весьма производительно и в половину мощнее ядра тестовой виртуалки, которая идет вне-конкурса, а они не сказать чтобы самые слабые.
Диски звезд с неба не хватают, но для большинства задач их будет предостаточно.
Единственное, что стоит отдельно отметить — отличная гомогенность. Каждая из машин отличается по производительности не более, чем на погрешность измерения, что дает отличную предсказуемость и удобство планирования.

AWS

Лидер рынка, его тест меня несколько удивил, так как у них есть та же проблема, что обнаружилась у Я.Облака.
Несмотря на то, что я достаточно долго с ним работаю, мне все как-то недосуг было выяснить разницу производительности между режимами полной нагрузки и частично, поэтому результаты и стали для меня в какой-то мере сюрпризом.
Для тестирования использовался тип c5.xlarge, как самый дешевый из подходящих под требования.

Результаты по зоне eu-central-1a:

Результаты тестирования

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 1839.00 1976.00 2083.00 1966.00 122.31
FIO WRITE IOPS 789.00 850.00 895.00 844.67 53.20
STRESS-NG 1 CPU 21422.00 21722.00 21736.00 21626.67 177.38
STRESS-NG 2 CPU 43305.00 43331.00 43197.00 43277.67 71.06
STRESS-NG 4 CPU 40876.00 40884.00 40888.00 40882.67 6.11
Sysbench CPU for 1 8.77 8.77 8.77 8.77 0.00
Sysbench CPU for 2 4.40 4.40 4.40 4.40 0.00
Sysbench CPU for 4 2.52 2.52 2.52 2.52 0.00
Sysbench Mem t 1 3063495.18 3064238.67 3063452.11 3063728.65 442.21
Sysbench Mem t 2 1848705.16 1841708.24 1751938.22 1814117.21 53962.11
Sysbench Mem t 4 2413033.89 2249609.19 2299986.20 2320876.43 83691.15

Результаты по зоне eu-central-1b:

Результаты тестирования

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 1723.00 1988.00 2101.00 1937.33 194.03
FIO WRITE IOPS 739.00 855.00 903.00 832.33 84.32
STRESS-NG 1 CPU 21785.00 21733.00 21741.00 21753.00 28.00
STRESS-NG 2 CPU 43370.00 43323.00 40351.00 42348.00 1729.61
STRESS-NG 4 CPU 40857.00 40864.00 40916.00 40879.00 32.23
Sysbench CPU for 1 8.77 8.77 8.77 8.77 0.00
Sysbench CPU for 2 4.39 4.40 4.39 4.39 0.00
Sysbench CPU for 4 2.52 2.52 2.52 2.52 0.00
Sysbench Mem t 1 3065227.23 3065688.95 3063830.23 3064915.47 967.78
Sysbench Mem t 2 2032840.35 1987864.46 1968489.39 1996398.07 33013.31
Sysbench Mem t 4 2684716.32 2654257.87 2618592.53 2652522.24 33096.05

Результаты по зоне eu-central-1c:

Результаты тестирования

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 1761.00 2003.00 2108.00 1957.33 177.95
FIO WRITE IOPS 756.00 861.00 906.00 841.00 76.97
STRESS-NG 1 CPU 21632.00 21708.00 21615.00 21651.67 49.52
STRESS-NG 2 CPU 43247.00 43236.00 43283.00 43255.33 24.58
STRESS-NG 4 CPU 39931.00 39359.00 40835.00 40041.67 744.20
Sysbench CPU for 1 8.77 8.77 8.77 8.77 0.00
Sysbench CPU for 2 4.40 4.40 4.40 4.40 0.00
Sysbench CPU for 4 2.52 2.52 2.52 2.52 0.00
Sysbench Mem t 1 3064343.66 3064434.20 2998820.16 3042532.67 37856.17
Sysbench Mem t 2 2235882.60 2088501.51 2166875.91 2163753.34 73740.15
Sysbench Mem t 4 2870035.79 2813221.50 2771999.66 2818418.98 49224.29

Сводная таблица результатов:

Test Average Avg Min Avg Max StDev StDev %
FIO READ IOPS 1953.56 1937.33 1966.00 14.70 0.8%
FIO WRITE IOPS 839.33 832.33 844.67 6.33 0.8%
STRESS-NG 1 CPU 21677.11 21626.67 21753.00 66.90 0.3%
STRESS-NG 2 CPU 42960.33 42348.00 43277.67 530.41 1.2%
STRESS-NG 4 CPU 40601.11 40041.67 40882.67 484.50 1.2%
Sysbench CPU for 1 8.77 8.77 8.77 0.00 0.0%
Sysbench CPU for 2 4.40 4.39 4.40 0.00 0.1%
Sysbench CPU for 4 2.52 2.52 2.52 0.00 0.1%
Sysbench Mem t 1 3057058.93 3042532.67 3064915.47 12594.10 0.4%
Sysbench Mem t 2 1991422.87 1814117.21 2163753.34 174871.16 8.8%
Sysbench Mem t 4 2597272.55 2320876.43 2818418.98 253330.90 9.8%

Как я уже сказал выше — результаты меня удивили.
Да, я понимаю что проблема проявляется явно только при некоторых типах нагрузки (в Sysbench ее не видно), но учитывая результаты других платформ, это явно не проблема с тестом, а именно ограничение производительности.
В защиту AWS могу сказать, что он при создании машины позволяет отключать HyperThreading, что по крайней мере поможет исключить проблему с просадкой производительности у некоторых приложений.
В остальном — диски не гарантируют такую производительность, но поддерживают Burst для сглаживания нагрузок, так что если надо почитать/пописать относительно много, быстро, но не очень часто (допустим, раз в несколько минут), то все будет хорошо.
Так же, гомогенность результатов просто отличная, все предсказуемо и без сюрпризов.

Azure

Изначально я не хотел включать его в тест, т.к. никогда особо с ним не работал и у меня даже учетки то там не было. Но, подумав, решил все-таки протестировать и его, для ровного счета, получив в итоге однозначного аутсайдера.
Сразу хочу объяснить, что регион был выбран из принципа «где-то в Европе», а тип машины — на 100% подходящий под условия (4 процессора, 8Гб памяти), кажется это были A4 v2.

Disclamer.
Я понимаю, что это мог быть не совсем удачный выбор, есть машины точно такой же конфигурации, немного дороже и возможно мощнее (возможно даже в 3 раза и порвут всех участников теста), но выяснил я это уже в процессе подготовки статьи, забравшись в дебри описания типов машин по их индексам.
В момент же тестирования в интерфейсе Azure никаких комментариев относительно предназначения этих машин я не видел и выбирал по обычному принципу «самое дешевое, подходящее под требования».
Так что пусть это несколько и не объективно, но по крайней мере иллюстрирует то, что получит обычный человек, не знакомый с тонкостями Azure.

Результаты по зоне France-Central-1:

Результаты тестирования

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 169 1843 1192 1068 843.8607705
FIO WRITE IOPS 72 791 511 458 362.4182666
STRESS-NG 1 CPU 4653 4756 4857 4755.333333 102.001634
STRESS-NG 2 CPU 9035 9116 8968 9039.666667 74.11027819
STRESS-NG 4 CPU 17857 18246 17723 17942 271.6633947
Sysbench CPU for 1 22.4285 22.2068 22.3068 22.31403333 0.111026859
Sysbench CPU for 2 11.5679 11.3655 11.6188 11.5174 0.13398847
Sysbench CPU for 4 5.9578 5.9417 5.8889 5.929466667 0.036042244
Sysbench Mem t 1 1105732.11 1147854.37 1142950.85 1132179.11 23034.62576
Sysbench Mem t 2 1512408.01 1555144.89 1484544.59 1517365.83 35560.30897
Sysbench Mem t 4 1611256.86 1622333.18 1596986.1 1610192.047 12707.04477

Результаты по зоне France-Central-2:

Результаты тестирования

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 201 1847 1268 1105.333333 834.9696601
FIO WRITE IOPS 85 792 543 473.3333333 358.6116748
STRESS-NG 1 CPU 4438 4057 4455 4316.666667 225.0385152
STRESS-NG 2 CPU 8869 8822 8388 8693 265.1810702
STRESS-NG 4 CPU 17349 17050 17184 17194.33333 149.7675977
Sysbench CPU for 1 27.0918 27.0328 27.0543 27.05963333 0.029859393
Sysbench CPU for 2 13.4462 13.4139 13.4268 13.42896667 0.016258639
Sysbench CPU for 4 6.7283 6.7255 6.7128 6.7222 0.008260145
Sysbench Mem t 1 945794.75 943134.05 945269.62 944732.8067 1409.240057
Sysbench Mem t 2 1421487.55 1421976.55 1448068.81 1430510.97 15207.50109
Sysbench Mem t 4 1778615.79 1773343.76 1749641.94 1767200.497 15432.94396

Результаты по зоне France-Central-3:

Результаты тестирования

Test Iter 1 Iter 2 Iter 3 Average StDev
FIO READ IOPS 157.00 1518.00 1467.00 1047.33 771.47
FIO WRITE IOPS 67.00 650.00 628.00 448.33 330.43
STRESS-NG 1 CPU 4137.00 4563.00 4239.00 4313.00 222.43
STRESS-NG 2 CPU 8434.00 8427.00 8826.00 8562.33 228.37
STRESS-NG 4 CPU 16656.00 16781.00 16598.00 16678.33 93.52
Sysbench CPU for 1 26.06 25.50 25.65 25.74 0.29
Sysbench CPU for 2 13.54 13.17 12.89 13.20 0.33
Sysbench CPU for 4 6.72 6.63 6.49 6.61 0.12
Sysbench Mem t 1 1011271.00 1009517.00 1003501.35 1008096.45 4074.96
Sysbench Mem t 2 1507230.58 1466942.05 1520724.35 1498298.99 27981.49
Sysbench Mem t 4 1708304.46 1681778.94 1692809.59 1694297.66 13325.22

Сводная таблица результатов:

Test Average Avg Min Avg Max StDev StDev %
FIO READ IOPS 1073.56 1047.33 1105.33 29.40 2.7%
FIO WRITE IOPS 459.89 448.33 473.33 12.61 2.7%
STRESS-NG 1 CPU 4461.67 4313.00 4755.33 254.33 5.7%
STRESS-NG 2 CPU 8765.00 8562.33 9039.67 246.68 2.8%
STRESS-NG 4 CPU 17271.56 16678.33 17942.00 635.36 3.7%
Sysbench CPU for 1 25.04 22.31 27.06 2.45 9.8%
Sysbench CPU for 2 12.71 11.52 13.43 1.04 8.2%
Sysbench CPU for 4 6.42 5.93 6.72 0.43 6.7%
Sysbench Mem t 1 1028336.12 944732.81 1132179.11 95348.11 9.3%
Sysbench Mem t 2 1482058.60 1430510.97 1517365.83 45648.16 3.1%
Sysbench Mem t 4 1690563.40 1610192.05 1767200.50 78570.81 4.6%

По итогам — слабо. Гомогенность неплохая, но кроме общей низкой производительности, есть повторяющаяся проблема с дисками.
Обратите внимание, во время теста всех машин в первой итерации теста диска результаты крайне низкие, но в течении последующих двух выправляются. Что является первопричиной такого поведение — неизвестно, но думается мне может сыграть злую шутку, если нагрузка серьезная, но неравномерная и с большими паузами.

Итоги

Производительность

Начнем со сводной таблицы результатов.
Я вставляю ее изображением, т.к. хочу использовать цвета, но данные там из таблиц, представленных выше.
Сравнение производительности виртуальных машин 6 облачных платформ: Selectel, MCS, Я.Облако, Google Cloud, AWS и Azure - 1
Чем свелтее, тем лучше

Посмотрим подробнее на производительность CPU:
Сравнение производительности виртуальных машин 6 облачных платформ: Selectel, MCS, Я.Облако, Google Cloud, AWS и Azure - 2

В целом, лидерство по средней измеренной производительности для одно- и двух-ядерной нагрузки прочно удерживает AWS. На втором месте Google Cloud.
Из российских провайдеров лучше всего себя показал Selectel. Кроме третьего места по неполной нагрузке у него однозначное первое при нагрузке всех ядер, даже с учетом неравномерности результатов между зонами (что неприятно, но в данном случае не влияет).

Теперь память:
Сравнение производительности виртуальных машин 6 облачных платформ: Selectel, MCS, Я.Облако, Google Cloud, AWS и Azure - 3

По скорости работы с памятью плашку памяти пальму первенства удерживает AWS для однопоточного режима и Я.Облако для мультипоточного. В целом, в этом тесте Я.Облако показало себя с весьма положительной стороны.
Второе место для мультипоточного режима делят AWS и Selectel.

Диски:
Сравнение производительности виртуальных машин 6 облачных платформ: Selectel, MCS, Я.Облако, Google Cloud, AWS и Azure - 4
По скорости дисков у нас однозначный победитель — Selectel. Нечего подобного за сопоставимые деньги никто из участников сравнения не предлагает.
На втором месте — AWS благодаря разрешенному Burst-у и в целом приличной скорости.
За ним GCE и Azure, учитывая проблему с первой итерацией тестирования.
Замыкают список Я.Облако и MSC, которые предлагают примерно одинаковые по производительности решения.

Стоимость относительно производительности

А теперь поговорим о еще одном интересном факторе — стоимости.
Это сравнение не в коем случае не покрывает совокупности стоимости решений на разных платформах, его цель проста — сопоставить стоимость единицы производительности у разных провайдеров.
За основу расчета возьмем тест stress-ng и расчетные цены за 1 месяц использования каждого инстанса:

Provider Yandex.Cloud MCS Selectel GCE AWS Azure
Price (cur) 3799.12 4510 5063.28 103.08 147.57 180
Price (rub) 3799.12 4510 5063.28 6747.6168 9659.9322 11782.8
Alt price (cur) 3799.12 4510 4,318.68 35.6 56.07 11782.8
Alt price (rub) 3799.12 4510 4,318.68 2330.376 3670.3422 11782.8

Таблица стоимости требует некоторого пояснения.
Для тех провайдеров, у которых есть возможности снижения стоимости ресурсов, описанных в начале статьи, есть две стоимости — основная и альтернативная, рассчитанная с учетом этих возможностей.
Так как это не скидка и завязано на сценарии использования, которые бывают разными, я счет хорошей идеей посчитать стоимость и с их учетом.
Так же, из-за разницы валют, стоимость AWS, Azure (да, я знаю что он умеет показывать в рублях (как-то), их калькулятор показал мне значения в долларах) и GCE приведена к рублевому эквиваленту, соответствующему курсу 65.46 рублей за доллар США.

Итак, стоимость каждого решения, приведенная к рублям за попугай в тесте stress-ng за минимальное количество ресурсов, которые было получено в тесте:
Сравнение производительности виртуальных машин 6 облачных платформ: Selectel, MCS, Я.Облако, Google Cloud, AWS и Azure - 5
Меньше — лучше

Если посчитать на основании средних результатов теста, картина принципиально не поменяется, но кое что-что все таки изменится:
Сравнение производительности виртуальных машин 6 облачных платформ: Selectel, MCS, Я.Облако, Google Cloud, AWS и Azure - 6
Меньше — лучше

Подробно интерпретировать результаты я не хочу, так как в зависимости от нагрузки лидерство принадлежит разным платформам.
В варианте тяжелой постоянной нагрузки однозначное лидерство принадлежит Selectel с двухкратным отрывом от ближайшего конкурента.
В варианте средней и легкой нагрузки с минимальным преимуществом перед AWS, GCE и Selectel побеждает Я.Облако.

Теперь посмотрим что будет, если перечитать стоимость с учетом возможной экономии в зависимости от сценария использования.

Альтернативная стоимость с учетом экономии за счет сценария использования, приведенная к рублям за попугай в тесте stress-ng за минимальное количество ресурсов, которые было получено в тесте:
Сравнение производительности виртуальных машин 6 облачных платформ: Selectel, MCS, Я.Облако, Google Cloud, AWS и Azure - 7
Меньше — лучше

Оно же, но к среднему количеству ресурсов:
Сравнение производительности виртуальных машин 6 облачных платформ: Selectel, MCS, Я.Облако, Google Cloud, AWS и Azure - 8

Здесь картина кардинально меняется.
Во всех сценариях, кроме тяжелой постоянно полной нагрузки с огромным перевесом вперед выходят AWS и GCE с практически идентичной стоимостью за единицу ресурсов.
В случае тяжелой нагрузки конкуренцию им составляет Selectel, предлагающий ресурсы за те же деньги, но с меньшим количеством «уступков» (все же, его ноды постоянны и не выключаются в произвольным момент времени, в отличии от AWS Spot и Google Preemptible инстансов).
Вот так, если аккуратно и грамотно подойти к архитектуре, можно здорово экономить на казалось бы пустом месте.

Вместо выводов

Тест получился длинный, но как по мне — интересный.
Для себя я сделал некоторые выводы по результатам, надеюсь он поможет и вам посмотреть на вопрос производительности облачных платформ немного с другой стороны и возможно немного облегчит муки выбора, а так же поможет в диагностике проблем производительности на некоторых платформах из-за выявленных «особенностей».

Автор: onlinehead

Источник

* - обязательные к заполнению поля