Давеча на глаза мне тут попалось аж две статьи из одного корпоративного блога, касающиеся облаков — одна про 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% |
По итогам — слабо. Гомогенность неплохая, но кроме общей низкой производительности, есть повторяющаяся проблема с дисками.
Обратите внимание, во время теста всех машин в первой итерации теста диска результаты крайне низкие, но в течении последующих двух выправляются. Что является первопричиной такого поведение — неизвестно, но думается мне может сыграть злую шутку, если нагрузка серьезная, но неравномерная и с большими паузами.
Итоги
Производительность
Начнем со сводной таблицы результатов.
Я вставляю ее изображением, т.к. хочу использовать цвета, но данные там из таблиц, представленных выше.
Чем свелтее, тем лучше
Посмотрим подробнее на производительность CPU:
В целом, лидерство по средней измеренной производительности для одно- и двух-ядерной нагрузки прочно удерживает AWS. На втором месте Google Cloud.
Из российских провайдеров лучше всего себя показал 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 |
Таблица стоимости требует некоторого пояснения.
Для тех провайдеров, у которых есть возможности снижения стоимости ресурсов, описанных в начале статьи, есть две стоимости — основная и альтернативная, рассчитанная с учетом этих возможностей.
Так как это не скидка и завязано на сценарии использования, которые бывают разными, я счет хорошей идеей посчитать стоимость и с их учетом.
Так же, из-за разницы валют, стоимость AWS, Azure (да, я знаю что он умеет показывать в рублях (как-то), их калькулятор показал мне значения в долларах) и GCE приведена к рублевому эквиваленту, соответствующему курсу 65.46 рублей за доллар США.
Итак, стоимость каждого решения, приведенная к рублям за попугай в тесте stress-ng за минимальное количество ресурсов, которые было получено в тесте:
Меньше — лучше
Если посчитать на основании средних результатов теста, картина принципиально не поменяется, но кое что-что все таки изменится:
Меньше — лучше
Подробно интерпретировать результаты я не хочу, так как в зависимости от нагрузки лидерство принадлежит разным платформам.
В варианте тяжелой постоянной нагрузки однозначное лидерство принадлежит Selectel с двухкратным отрывом от ближайшего конкурента.
В варианте средней и легкой нагрузки с минимальным преимуществом перед AWS, GCE и Selectel побеждает Я.Облако.
Теперь посмотрим что будет, если перечитать стоимость с учетом возможной экономии в зависимости от сценария использования.
Альтернативная стоимость с учетом экономии за счет сценария использования, приведенная к рублям за попугай в тесте stress-ng за минимальное количество ресурсов, которые было получено в тесте:
Меньше — лучше
Оно же, но к среднему количеству ресурсов:
Здесь картина кардинально меняется.
Во всех сценариях, кроме тяжелой постоянно полной нагрузки с огромным перевесом вперед выходят AWS и GCE с практически идентичной стоимостью за единицу ресурсов.
В случае тяжелой нагрузки конкуренцию им составляет Selectel, предлагающий ресурсы за те же деньги, но с меньшим количеством «уступков» (все же, его ноды постоянны и не выключаются в произвольным момент времени, в отличии от AWS Spot и Google Preemptible инстансов).
Вот так, если аккуратно и грамотно подойти к архитектуре, можно здорово экономить на казалось бы пустом месте.
Вместо выводов
Тест получился длинный, но как по мне — интересный.
Для себя я сделал некоторые выводы по результатам, надеюсь он поможет и вам посмотреть на вопрос производительности облачных платформ немного с другой стороны и возможно немного облегчит муки выбора, а так же поможет в диагностике проблем производительности на некоторых платформах из-за выявленных «особенностей».
Автор: onlinehead