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

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

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

Про K8s мне тоже есть что сказать, но поговорим про производительность.

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

К счастью, все эти платформы публичные и что бы я не намерил, каждый при желании может пойти, повторить и проверить.

Итогом всего этого стала мысль — почему бы не потратить пару сотен рублей, все выходные и действительно вдумчиво не померить все шесть платформ и выяснить, какая из них дает лучшую производительность относительно стоимости и в абсолютных цифрах при одинаковых конфигурациях, а заодно и сравнить глобальных поставщиков с российскими.
А так же, как выяснилось, прояснить некоторые «особенности» в выделении ресурсов и напомнить себе и окружающим, что далеко не всегда и не на всех платформах за одни и те же деньги можно получить предсказуемую производительность.

Результаты получились не сказать чтобы феноменальными, но на мой взгляд крайне любопытными.

Интересующихся прошу под кат.

Методика

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

У каждого облачного провайдера последовательно запускаются в разных зонах доступности (если зоны две, то 1 машина первой зоне и 2 во второй) три виртуальные машины с 4 CPU, 8 GB оперативной памяти и системным диском на 50 GB.

Тип процессора/инстанса — новейший из доступных, если есть выбор.

Тип ВМ — shared с полным выделением ядер.

Тип дисков — сетевой SSD с возможностью перемонтирования на другую ВМ.

Опции гарантированного выделения IOPS или машины оптимизированные под это не использовались, если это не предусмотрено стандартными условиями использования и отказаться от этого нельзя.

Файловая система дефолтная — ext4.

Никакие ручные настройки системы не производились.

На каждой из машин запускалась серия тестов, итоговые значения по каждой машине были усреднены.

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

04 последнего доступного уровня патчей. Операционная система — Ubuntu 16.

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

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

Так же, некоторые платформы позволяют путем определенных ограничений (которые вполне можно умеючи пережить) весомо снизить стоимость ресурсов.

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

Тесты

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

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

#!/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=$ [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 назад и недавно переехавшим в состав этой сборки.

2, то средствами bhyve была создана подходящая виртуалочка и там же был запущен тест. Так как работает все это под FreeBSD 11.

Лог запуска

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%

По итогам — слабо. Гомогенность неплохая, но кроме общей низкой производительности, есть повторяющаяся проблема с дисками.

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

Итоги

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

Начнем со сводной таблицы результатов.

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


Чем свелтее, тем лучше

Посмотрим подробнее на производительность CPU:

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

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

Теперь память:

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

Второе место для мультипоточного режима делят AWS и Selectel.

Диски:

Нечего подобного за сопоставимые деньги никто из участников сравнения не предлагает. По скорости дисков у нас однозначный победитель — 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

Таблица стоимости требует некоторого пояснения.

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

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

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

Итак, стоимость каждого решения, приведенная к рублям за попугай в тесте stress-ng за минимальное количество ресурсов, которые было получено в тесте:


Меньше — лучше

Если посчитать на основании средних результатов теста, картина принципиально не поменяется, но кое что-что все таки изменится:


Меньше — лучше

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

В варианте тяжелой постоянной нагрузки однозначное лидерство принадлежит Selectel с двухкратным отрывом от ближайшего конкурента.

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

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

Альтернативная стоимость с учетом экономии за счет сценария использования, приведенная к рублям за попугай в тесте stress-ng за минимальное количество ресурсов, которые было получено в тесте:


Меньше — лучше

Оно же, но к среднему количеству ресурсов:

Здесь картина кардинально меняется.

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

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

Вот так, если аккуратно и грамотно подойти к архитектуре, можно здорово экономить на казалось бы пустом месте.

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

Тест получился длинный, но как по мне — интересный.

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


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Интересные факты об истории Китайской лунной программы и космической миссии «Чанъэ-4»

Многое скрыто за заборами полигонов и стенами лабораторий Китайской академии космических технологий при реализации лунных научно-исследовательских космических программ, но часть информации потом все равно любезно предоставляется в открытый доступ.В продолжении этой публикации. Ранее опубликованные материалы о «Чанъэ-4»: Краткая Китайская история ...

Путеводитель по программе JPoint 2019

Благо, всего месяц остался до JPoint 2019 — международной Java-конференции, которая пройдёт в начале апреля в Москве. Последний месяц зимы подходит к концу, и просыпается здоровое желание сходить на какую-нибудь большую Java-конференцию. Программа почти стабилизировалась, и настало время раскрыть все ...