Статьи

IOPS: сравнительный анализ дискового ввода-вывода — AWS против DigitalOcean

Рассмотрение IOPS

Учтите, что вы расширяете свои операции в облаке или планируете сменить провайдера облачного хостинга или покупаете новый VPS. Как вы решаете, VPS, предоставленный облачным провайдером, будет соответствовать вашим требованиям?

Есть много аспектов, которые вы должны попробовать и проверить, прежде чем выбрать поставщика. Одним из таких аспектов является то, насколько быстро ваш сервер основан на производительности диска (IOPS — ввод-вывод в секунду) и как вы измеряете его производительность?

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

Как это сделать?

Многие из вас могли использовать команду dd (драйверы устройств) для проверки скорости диска. Но у него довольно много проблем:

  • Это однопоточный тест с последовательной записью. Если вы используете типичный сервер базы данных web + на VPS, это число не имеет смысла, поскольку типичные службы не выполняют длительную последовательную запись.
  • Там нет никакого тестирования производительности чтения вообще.

Мы будем использовать ‘FIO’ (гибкий тестер ввода / вывода), чтобы выполнить сравнительный анализ для преодоления всех вышеупомянутых недостатков команды dd.

Со страницы руководства:

fio — это инструмент, который порождает несколько потоков или процессов, выполняющих действия ввода-вывода определенного типа, указанные пользователем. Типичное использование fio — это написание файла задания, соответствующего нагрузке ввода-вывода, которую вы хотите смоделировать.

Установить ФИО

Я буду делать тест в Ubuntu 14.04. Чтобы установить FIO в Ubuntu, запустите

apt-get install fio

Давайте проверим это

Я проведу тест на VPS в AWS и Digital Ocean и проведу сравнение. В AWS я буду использовать экземпляр t2.small . Подробности экземпляра между провайдерами ниже,

  • AWS

Тип экземпляра — t2.small (2 ГБ ОЗУ, 1 ядро), SSD общего назначения для хранения — 50 ГБ

  • Цифровой океан

Тип экземпляра — (2 ГБ ОЗУ, 2 ядра), SSD для хранения — 60 ГБ

Примечание . Базовая производительность ЦП t2.small составляет 20% от процессоров семейства Intel Xeon. Тем не менее, он будет зарабатывать 12 кредитов процессора в час. 1CPU кредит = 100% производительности процессора за 1 минуту. Экземпляр t2 может взорваться выше базового уровня, если у него достаточно кредитов ЦП. Подробнее об этом здесь .

Произвольное чтение / запись производительности

Запустите следующую команду

fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=64 –size=4G –readwrite=randrw –rwmixread=75

Это создаст файл размером 4 ГБ и выполнит операции чтения и записи размером 4 КБ, используя 75% / 25% (т. Е. 3 чтения выполняются для каждой 1 записи), разделенных внутри файла, с одновременным выполнением 64 операций. Соотношение 3: 1 является приблизительным приближением к вашей типичной базе данных. Вы можете изменить его в соответствии с вашими потребностями.

Случайное чтение / запись — Digital Ocean

# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=64 –size=4G –readwrite=randrw –rwmixread=75
test: (g=0): rw=randrw, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio 1.59
Starting 1 process
test: Laying out IO file(s) (1 file(s) / 4096MB)
Jobs: 1 (f=1): [m] [100.0% done] [142.2M/49469K /s] [35.6K/12.8K iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=22329
read : io=3070.5MB, bw=132862KB/s, iops=33215 , runt= 23665msec
write: io=1025.6MB, bw=44375KB/s, iops=11093 , runt= 23665msec
cpu : usr=14.62%, sys=45.22%, ctx=30449, majf=0, minf=17
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued r/w/d: total=786042/262534/0, short=0/0/0

Run status group 0 (all jobs):
READ: io=3070.5MB, aggrb=132861KB/s, minb=136050KB/s, maxb=136050KB/s, mint=23665msec, maxt=23665msec
WRITE: io=1025.6MB, aggrb=44375KB/s, minb=45440KB/s, maxb=45440KB/s, mint=23665msec, maxt=23665msec

Disk stats (read/write):
vda: ios=779743/260397, merge=0/6, ticks=400068/754896, in_queue=1154500, util=99.55%

Случайное чтение / запись — AWS

/home/ubuntu# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=64 –size=4G –readwrite=randrw –rwmixread=75
test: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.1.3
Starting 1 process
test: Laying out IO file(s) (1 file(s) / 4096MB)
Jobs: 1 (f=1): [m] [100.0% done] [11136KB/3640KB/0KB /s] [2784/910/0 iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=13241: Mon Jun 13 09:47:55 2016
read : io=3071.7MB, bw=9028.2KB/s, iops=2257, runt=348403msec
write: io=1024.4MB, bw=3010.7KB/s, iops=752, runt=348403msec
cpu : usr=1.28%, sys=2.36%, ctx=1014229, majf=0, minf=22
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued : total=r=786347/w=262229/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
READ: io=3071.7MB, aggrb=9028KB/s, minb=9028KB/s, maxb=9028KB/s, mint=348403msec, maxt=348403msec
WRITE: io=1024.4MB, aggrb=3010KB/s, minb=3010KB/s, maxb=3010KB/s, mint=348403msec, maxt=348403msec

Disk stats (read/write):
xvda: ios=783129/261925, merge=3166/439, ticks=16287332/5908212, in_queue=22196660, util=100.00%

Результат: (Случайное чтение / запись)

Цифровой океан

  • SSD-накопитель Digital Ocean выполняет 33215 операций чтения в секунду и 11093 операций записи в секунду
  • Тест завершен за ~ 30 секунд

AWS

  • SSD AWS, выполняющий операции чтения 2257 в секунду и операции записи 752 в секунду
  • Тест был завершен через ~ 5 минут

Произвольное чтение

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

fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=64 –size=4G –readwrite=randread

Случайное чтение — цифровой океан

# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=64 –size=4G –readwrite=randread
test: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio 1.59
Starting 1 process
Jobs: 1 (f=1): [r] [100.0% done] [328.7M/0K /s] [82.2K/0 iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=22615
read : io=4096.0MB, bw=346522KB/s, iops=86630 , runt= 12104msec
cpu : usr=14.31%, sys=52.84%, ctx=12981, majf=0, minf=85
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued r/w/d: total=1048576/0/0, short=0/0/0

Run status group 0 (all jobs):
READ: io=4096.0MB, aggrb=346522KB/s, minb=354838KB/s, maxb=354838KB/s, mint=12104msec, maxt=12104msec

Disk stats (read/write):
vda: ios=1030890/3, merge=0/2, ticks=441920/0, in_queue=441828, util=95.57%

Случайное чтение — AWS

/home/ubuntu# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=64 –size=4G –readwrite=randread
test: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.1.3
Starting 1 process
Jobs: 1 (f=1): [r] [100.0% done] [15880KB/0KB/0KB /s] [3970/0/0 iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=13266: Mon Jun 13 10:03:45 2016
read : io=4096.0MB, bw=12065KB/s, iops=3016, runt=347640msec
cpu : usr=1.07%, sys=2.36%, ctx=1019315, majf=0, minf=88
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued : total=r=1048576/w=0/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
READ: io=4096.0MB, aggrb=12065KB/s, minb=12065KB/s, maxb=12065KB/s, mint=347640msec, maxt=347640msec

Disk stats (read/write):
xvda: ios=1042450/8, merge=5210/2, ticks=22138824/132, in_queue=22139708, util=100.00%

Результат: (Случайное чтение)

Цифровой океан

  • Твердотельный накопитель Digital Ocean, выполняющий операции чтения «86630» в секунду.
  • Тест завершен за ~ 30 секунд

AWS

  • AWS ‘SSD, выполняющий’ 3016 ‘операций чтения в секунду.
  • Тест был завершен через ~ 5 минут

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

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

fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=64 –size=4G –readwrite=randwrite

Случайная запись — цифровой океан

# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=64 –size=4G –readwrite=randwrite
test: (g=0): rw=randwrite, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio 1.59
Starting 1 process
test: Laying out IO file(s) (1 file(s) / 4096MB)
Jobs: 1 (f=1): [w] [100.0% done] [0K/39016K /s] [0 /9525 iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=22927
write: io=4096.0MB, bw=35404KB/s, iops=8850 , runt=118471msec
cpu : usr=3.41%, sys=25.19%, ctx=155102, majf=0, minf=17
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued r/w/d: total=0/1048576/0, short=0/0/0

Run status group 0 (all jobs):
WRITE: io=4096.0MB, aggrb=35403KB/s, minb=36253KB/s, maxb=36253KB/s, mint=118471msec, maxt=118471msec

Disk stats (read/write):
vda: ios=1/1048294, merge=0/67571, ticks=0/5491480, in_queue=5491644, util=99.87%

Случайная запись — AWS

/home/ubuntu# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=64 –size=4G –readwrite=randwrite
test: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.1.3
Starting 1 process
test: Laying out IO file(s) (1 file(s) / 4096MB)
Jobs: 1 (f=1): [w] [100.0% done] [0KB/16560KB/0KB /s] [0/4140/0 iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=13273: Mon Jun 13 10:10:59 2016
write: io=4096.0MB, bw=11774KB/s, iops=2943, runt=356237msec
cpu : usr=0.51%, sys=2.89%, ctx=1029874, majf=0, minf=22
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued : total=r=0/w=1048576/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
WRITE: io=4096.0MB, aggrb=11773KB/s, minb=11773KB/s, maxb=11773KB/s, mint=356237msec, maxt=356237msec

Disk stats (read/write):
xvda: ios=530/1051034, merge=390/143157, ticks=7336/22762076, in_queue=22770100, util=100.00%

Результат: (Случайная запись)

Цифровой океан

  • Твердотельный накопитель Digital Ocean, выполняющий операции записи 8850 в секунду.
  • Тест завершен за ~ 30 секунд

AWS

  • AWS ‘SSD, выполняющий’ 2943 ‘операций записи в секунду.
  • Тест был завершен через ~ 5 минут

IO Latency по индивидуальному запросу

Мы будем использовать ioping для измерения задержки по индивидуальному запросу. Установите ioping, выполнив следующую команду.

apt-get install ioping

Запустите приведенную ниже команду, чтобы измерить задержку ввода-вывода с помощью ioping

ioping -c 10 .

IO Latency — DigitalOcean

# ioping -c 10 .
4096 bytes from . (ext4 /dev/disk/by-label/DOROOT): request=1 time=0.2 ms
4096 bytes from . (ext4 /dev/disk/by-label/DOROOT): request=2 time=0.3 ms
4096 bytes from . (ext4 /dev/disk/by-label/DOROOT): request=3 time=0.6 ms
4096 bytes from . (ext4 /dev/disk/by-label/DOROOT): request=4 time=0.3 ms
4096 bytes from . (ext4 /dev/disk/by-label/DOROOT): request=5 time=0.2 ms
4096 bytes from . (ext4 /dev/disk/by-label/DOROOT): request=6 time=0.2 ms
4096 bytes from . (ext4 /dev/disk/by-label/DOROOT): request=7 time=0.2 ms
4096 bytes from . (ext4 /dev/disk/by-label/DOROOT): request=8 time=0.4 ms
4096 bytes from . (ext4 /dev/disk/by-label/DOROOT): request=9 time=0.2 ms
4096 bytes from . (ext4 /dev/disk/by-label/DOROOT): request=10 time=0.2 ms

— . (ext4 /dev/disk/by-label/DOROOT) ioping statistics —
10 requests completed in 9005.3 ms, 3318 iops, 13.0 mb/s
min/avg/max/mdev = 0.2/0.3/0.6/0.1 ms

IO Latency — AWS

/home/ubuntu# ioping -c 10 .
4.0 KiB from . (ext4 /dev/disk/by-uuid/0a76513a-37fc-43df-9833-34f8f9598ada): request=1 time=710 us
4.0 KiB from . (ext4 /dev/disk/by-uuid/0a76513a-37fc-43df-9833-34f8f9598ada): request=2 time=347 us
4.0 KiB from . (ext4 /dev/disk/by-uuid/0a76513a-37fc-43df-9833-34f8f9598ada): request=3 time=312 us
4.0 KiB from . (ext4 /dev/disk/by-uuid/0a76513a-37fc-43df-9833-34f8f9598ada): request=4 time=333 us
4.0 KiB from . (ext4 /dev/disk/by-uuid/0a76513a-37fc-43df-9833-34f8f9598ada): request=5 time=349 us
4.0 KiB from . (ext4 /dev/disk/by-uuid/0a76513a-37fc-43df-9833-34f8f9598ada): request=6 time=294 us
4.0 KiB from . (ext4 /dev/disk/by-uuid/0a76513a-37fc-43df-9833-34f8f9598ada): request=7 time=309 us
4.0 KiB from . (ext4 /dev/disk/by-uuid/0a76513a-37fc-43df-9833-34f8f9598ada): request=8 time=363 us
4.0 KiB from . (ext4 /dev/disk/by-uuid/0a76513a-37fc-43df-9833-34f8f9598ada): request=9 time=337 us
4.0 KiB from . (ext4 /dev/disk/by-uuid/0a76513a-37fc-43df-9833-34f8f9598ada): request=10 time=305 us

— . (ext4 /dev/disk/by-uuid/0a76513a-37fc-43df-9833-34f8f9598ada) ioping statistics —
10 requests completed in 9.0 s, 2.7 k iops, 10.7 MiB/s
min/avg/max/mdev = 294 us / 365 us / 710 us / 116 us

Результат: (IO Latency)

Цифровой океан

  • Время ожидания ввода-вывода Digital Ocean составляет в среднем около 0,3 мс

AWS

  • Задержка ввода-вывода AWS составляет около 356 микросекунд, что в среднем составляет около 0,3 мс

Анализ

Как работает AWS SSD общего назначения?

Из документации AWS:

Кредиты ввода / вывода и производительность

хранилища общего назначения (SSD) определяются размером тома, который определяет базовый уровень производительности тома и скорость накопления кредитов ввода / вывода. Большие тома имеют более высокий базовый уровень производительности и быстрее накапливают кредиты ввода / вывода.
Кредиты ввода / вывода представляют доступную полосу пропускания, которую ваше хранилище общего назначения (SSD) может использовать для увеличения количества операций ввода / вывода, когда требуется более высокий базовый уровень производительности. Чем больше кредитов у вашего хранилища для ввода-вывода, тем больше времени он может превысить базовый уровень производительности и тем лучше он работает, когда требуется большая производительность.

Изучив документацию по общему объему SSD EBS общего назначения, вы поймете, что AWS обеспечивает базовую производительность 3 IOPS на гибибайт (ГиБ) и возможность увеличения до 3000 IOPS для томов общего назначения (SSD) при 1000 ГиБ ,

Примечание : я отметил, что это для тома размером менее 1000 ГБ.

1 IOPS = 256 КиБ (для томов SSD)

IOPS означает операции ввода-вывода в секунду

Для томов SSD общего назначения менее 1000 ГБ вы получите базовую производительность 100 IOPS независимо от размера тома. Например, если размер вашего тома составляет 50 ГБ, вы получите базовую производительность 50 x 3 IOPS = 150 IOPS.

С другой стороны, если размер вашего тома составляет 10 ГБ, вы все равно получите 100 IOPS, а не 10 x 3 = 30 IOPS.

В то время, когда ваш сервер не использует базовые IOPS, избыточные IOPS будут храниться в кредитах. Кредиты будут использоваться, когда есть необходимость взрыва больше, чем базовое значение. Он может достигать 3000 IOPS, и это то, что мы видим в производительности дисков AWS.

Мы увидели значения 3009 для чтения / записи, 3016 для чтения и 2943 для записи. Хотя он немного превысил отметку 3000, вход / выход для SSD общего назначения составлял ~ 3000 макс.

С другой стороны, SSD от Digital Ocean не имеет такой крышки, как AWS. Он взорвался в тот момент, когда мы запустили команду, и достиг значений 44308 для чтения / записи, 86630 для чтения и 8850 для операций записи. Он реагировал как струя.

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

С другой стороны, если все, что вам нужно, это VPS, то теперь вы должны знать, который дает реальное соотношение цены и качества

Ниже приведены ссылки на тома общего назначения SSD объемом более 1000 ГБ

Для томов общего назначения (SSD) выше 1000 ГиБ вы получаете базовую производительность от 100 на ГиБ до 10000 IOPS. Тома более 1000 ГиБ имеют базовую производительность, равную или превышающую максимальную производительность пакета, и их кредитный баланс ввода / вывода никогда не истощается.

Вышеупомянутое утверждение означает, что если у вас есть объем 1000 ГБ, то вы получите 1000 x 3 = 3000 IOPS по умолчанию в качестве базовой производительности. Кредиты IO здесь не будут играть никакой роли. Этот IOPS может достигать максимального предела в 10000 IOPS, который достигается при объеме тома 3334 ГиБ. Выше этого значения независимо от размера тома вы получите максимум 10000 IOPS (максимальный размер тома, который вы можете создать, составляет 16 ТиБ для SSD общего назначения).

И это все для этой статьи! Надеюсь, это поможет.