Как оценить объемы DigitalOcean

Вступление

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

В этом руководстве мы рассмотрим лучшие практики для сравнения ваших объемов блочных хранилищ DigitalOcean путем моделирования рабочих нагрузок, имитирующих ваше приложение.

Настройка тестирования объема хранилища капель и блоков

Вы захотите определить спецификации рабочей нагрузки, которую вы тестируете, чтобы настроить соответствующую настройку тома хранилища капель и блоков. Если вы сравниваете DigitalOcean Volumes с альтернативным продуктом, убедитесь, что вы выбрали планы с аналогичной конфигурацией, чтобы получить более точное сравнение.

Инструкции по настройке капли см. В нашем учебном пособии «https://www.digitalocean.com/community/tutorials/how-to-create-your-first-digitalocean-droplet[How To Create Your First DigitalOcean Droplet]. Том блочного хранилища может быть создан одновременно с Droplet, а в некоторых случаях вы можете создать его позже на вкладке * Volumes * в * Droplets * на панели управления *. Чтобы узнать больше о создании томов и управлении ими, вы можете прочитать «https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-block-storage[A Введение в блочное хранилище DigitalOcean]».

Отформатируйте том с файловой системой, которая соответствует вашим требованиям к производительности. Наиболее популярной файловой системой по умолчанию является Ext4, которая более производительна, чем предыдущие поколения Ext3 и Ext2. Файловая система XFS специализируется на производительности и больших файлах данных. Вы можете прочитать больше о файловых системах в «https://www.digitalocean.com/community/tutorials/how-to-partition-and-format-digitalocean-block-storage-volumes-in-linux#formatting-the-partitions» [Как разделить и отформатировать тома блочного хранилища DigitalOcean в Linux] ». Если у вас нет конкретной файловой системы или предпочтения конфигурации, процесс создания и монтирования блочных томов для вас будет автоматизирован в Панели управления.

изображение: https: //assets.digitalocean.com/articles/benchmark-digitalocean-volumes/add-volume-gui.png [Вид панели управления DigitalOcean для настройки громкости]

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

Инструменты и конфигурации бенчмаркинга

Мы будем обсуждать инструмент измерения производительности fio для тестирования производительности, поскольку он чрезвычайно гибок и поддерживается большинством дистрибутивов. Альтернативные инструменты бенчмаркинга, которые вы можете исследовать и использовать, включают https://www.coker.com.au/bonnie/[Bonnie], btest и https: // github.com/filebench/filebench/wiki[Filebench].

Чтобы установить fio на сервер Ubuntu, вы должны сначала обновить список пакетов, а затем установить его, используя следующие команды:

sudo apt update
sudo apt install fio

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

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

С помощью инструмента тестирования производительности fio, некоторые типичные параметры конфигурации включают в себя:

Option Recommendations

iodepth

The queue depth that fio will issue to the file. In order to hit best input/output (I/O) rates, a number greater than iodepth=64 is recommended.

bs

Block size in bytes for I/O to use. File systems use 4K for metadata but tend to store files in much larger block sizes. Databases typically issue 8-16K sized I/O. For peak bandwidth tests, we recommend a block size of bs=64k or greater.

runtime

The time in seconds to run the benchmark. We recommend a runtime greater than 60 seconds, usually in the range of runtime=120s to runtime=300s.

ioengine

The ioengine option defines how the job issues I/O to the file. We recommend ioengine=libaio which refers to Linux native asynchronous I/O.

direct

Takes a Boolean value: 0 uses the filesystem cache returning a value closest to the application behavior which may result in higher than typical benchmark results; and 1 skips any file system caching behavior, returning the closest performance to what the block volume can do. We recommend direct=1.

sync

Use synchronous I/O for buffered writes. This option takes a Boolean value: 0 means not to force unit access, allowing for writeback cache behavior to operate like it does on normal disk drives with fio behaving more like a filesystem; 1 forces unit access, meaning I/O will not complete until the disk has guaranteed physical placement. We recommend sync=0.

size

Size of test file, taking an integer. We typically recommend at least 20 gigabytes. Note that DigitalOcean’s performance does not vary with volume size.

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

Запуск контрольных тестов

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

В следующих командах мы указываем на файл + fio.test + на томе в центре обработки данных NYC3, обязательно обновите его, чтобы он указывал на конкретную файловую систему, которую вы хотите использовать.

Запись пропускной способности

Этот тест выполняет случайную запись 1 МБ на блочные тома.

fio --filename= \
--direct=1 \
--rw=randwrite \
--ioengine=libaio \
--bs=1024K \
--iodepth=32 \
--name=bw-test \
--runtime=120s \

Для стандартной капли мы ожидаем вывод + 200MB / sec +. Если вы работаете с High CPU Droplet, вы должны ожидать вывода + 300MB / sec +.

Тест случайного чтения

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

fio --filename= \
--direct=1 \
--rw=randread \
--ioengine=libaio \
--bs=4K \
--iodepth=128 \
--name=rand-r \
--runtime=120s \

Для стандартной капли мы ожидаем вывод + 5000 + операций ввода-вывода в секунду (IOPS). Для High CPU Droplet мы ожидаем, что выходной сигнал будет больше, чем + 6000 + IOPS.

Случайная запись теста

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

fio --filename= \
--direct=1 \
--rw=randwrite \
--ioengine=libaio \
--bs=4K \
--iodepth=128 \
--name=rand-w \
--runtime=120s \

Вывод + 5000 + IOPS - это то, что мы ожидаем для стандартной капли, в то время как вывод, который больше, чем + 6000 + IOPS, - это то, что мы ожидаем для капли с высоким процессором.

Тест латентности чтения

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

fio --filename= \
--direct=1 \
--rw=randread \
--ioengine=libaio \
--bs=4K \
--iodepth=1 \
--name=lat-read \
--runtime=120s \

Для этого теста мы ожидаем, что результат будет меньше, чем + 5ms +.

Написать тест латентности

В этом тесте измеряется задержка с момента создания запроса на запись на диск до его завершения.

fio --filename= \
--direct=1 \
--rw=randwrite \
--ioengine=libaio \
--bs=4K \
--iodepth=1 \
--name=lat-write \
--runtime=120s \

Здесь мы также ожидаем, что для этого теста будет результат менее + 5ms +.

Проверять выход

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

Ниже приведен пример вывода из теста пропускной способности записи.

fio --filename=/mnt/volume-nyc3-04/test.fio --direct=1 --rw=randwrite --ioengine=libaio --bs=1024k --iodepth=32  --name=bw-test --runtime=120s
Outputbw-test: (groupid=0, jobs=1): err= 0: pid=2584: Fri Apr 20 17:14:19 2018
 write: io=22937MB, , , runt=120160msec
   slat (usec): min=54, max=622, avg=135.46, stdev=23.21
   clat (msec): min=7, max=779, avg=167.48, stdev=26.28
    lat (msec): min=7, max=779, avg=167.62, stdev=26.28
   clat percentiles (msec):
    |  1.00th=[  101],  5.00th=[  155], 10.00th=[  159], 20.00th=[  163],
    | 30.00th=[  165], 40.00th=[  167], 50.00th=[  167], 60.00th=[  167],
    | 70.00th=[  169], 80.00th=[  169], 90.00th=[  172], 95.00th=[  178],
    | 99.00th=[  306], 99.50th=[  363], 99.90th=[  420], 99.95th=[  474],
    | 99.99th=[  545]
   bw (KB  /s): min=137730, max=254485, per=100.00%, avg=195681.88, stdev=9590.24
   lat (msec) : 10=0.01%, 20=0.03%, 50=0.37%, 100=0.58%, 250=97.55%
   lat (msec) : 500=1.44%, 750=0.03%, 1000=0.01%
 cpu          : usr=1.76%, sys=1.83%, ctx=22777, majf=0, minf=11
 IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=99.9%, >=64=0.0%
    submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
    complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
    issued    : total=r=0/w=22937/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
    latency   : target=0, window=0, percentile=100.00%, depth=32

Run status group 0 (all jobs):
 WRITE: io=22937MB, aggrb=195468KB/s, minb=195468KB/s, maxb=195468KB/s, mint=120160msec, maxt=120160msec

Выделенная строка в выводе выше показывает нашу среднюю пропускную способность как + bw = 195468 КБ / с +, а также наши операции ввода-вывода в секунду (IOPS) как + iops = 190 +. В этом конкретном сценарии IOPS является низким, потому что мы выполняли 1 МБ записи с максимальной скоростью 200 МБ в секунду («+ 190iops * 1M = ~ 190 МБ / с +»).

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

Outputlat-read: (groupid=0, jobs=1): err= 0: pid=2628: Fri Apr 20 17:32:51 2018
 read : io=855740KB, bw=7131.2KB/s, iops=1782, runt=120001msec
   slat (usec): min=8, max=434, avg=16.77, stdev= 5.92
   clat (usec): min=2, max=450994, avg=539.15, stdev=2188.85
    lat (usec): min=53, max=451010, , stdev=2188.91

В приведенном выше примере мы видим, что задержка ввода / вывода составляет 556 мксек или микросекунд (или 0,5 мсек или миллисекунд). Это указывает на время, необходимое для выполнения одного ввода-вывода 4K на том блока.

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

По завершении тестов производительности вы можете удалить каплю и том.

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

Тома блочных хранилищ DigitalOcean - это хранилища SSD на основе SAN. Из-за этого производительность данного тома масштабируется с размером блока и глубиной очереди. То есть хранилище работает лучше всего, когда ему приходится выполнять много работы одновременно.

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

изображение: https: //assets.digitalocean.com/articles/benchmark-digitalocean-volumes/impact-queue-depth-graph.png [Влияние глубины очереди на график IOPS]

Производительность DigitalOcean ограничена максимальным IOPS и максимальной пропускной способностью, в зависимости от того, что достигается первым. На DigitalOcean производительность не меняется в зависимости от размера тома. Однако, поскольку IOPS и пропускная способность ограничены на определенных скоростях, существует эффект кроссовера. Таким образом, увеличение глубины очереди при малогабаритном вводе-выводе не достигнет пиковой пропускной способности 200 МБ / с, поскольку вместо этого будет достигнут предел IOPS. Для больших блоков пиковое число операций ввода-вывода в секунду, равное 5000, не будет достигнуто, поскольку вместо этого будет достигнут предел пропускной способности в 200 МБ / с.

Как правило, использование размера блока 32 КБ или более приведет к менее чем 5000 операций ввода-вывода в секунду, поскольку оно достигнет предела пропускной способности 200 МБ / с, в то время как использование размера блока или 16 КБ или меньше приведет к уменьшению предела пропускной способности. 200 МБ / с, потому что он будет работать с 5000 IOPS.

В качестве практического примера давайте сравним IOPS и пропускную способность.

изображение: https: //assets.digitalocean.com/articles/benchmark-digitalocean-volumes/read-throughput-graph.png [Прочитать график пропускной способности]

изображение: https: //assets.digitalocean.com/articles/benchmark-digitalocean-volumes/read-iops-graph.png [Читать график IOPS]

Первый график показывает типичную полосу пропускания с учетом размера блока и глубины очереди приложения. Мы рассмотрим два разных размера блока 4K и 256K.

Рассматривая значения 4K, мы видим, что он достигает 5000 IOPS при глубине очереди 4, но мы только когда-либо видим, что он достигает полосы пропускания 20 МБ / с. Это потому, что +5000 IOPS * 4K = 20 МБ / с +. Это означает, что рабочая нагрузка 4K никогда не будет превышать 20 МБ / с, поскольку она ограничена вводом / выводом.

Рассматривая рабочую нагрузку 256 КБ, мы видим, что она достигает 200 МБ / с при глубине очереди 2, но никогда не увидит скорость IOPS выше 800 IOPS, поскольку + 200 МБ / с / 256 К = 800 IOPS +.

Объем блочного хранилища DigitalOcean настроен для типичных рабочих нагрузок файловой системы 16K-64K. При таких размерах блоков мы видим хороший компромисс между IOPS и пропускной способностью.

Block Size IOPS Bandwidth

4K

~5000 IOPS

~20MB/sec

16K

~5000 IOPS

~80MB/sec

32K

~5000 IOPS

~160MB/sec

64K

~3200 IOPS

~200MB/sec

256K

~800 IOPS

~200MB/sec

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

Заключение

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

Чтобы узнать больше о том, как работать с блочным хранилищем DigitalOcean, вы можете прочитать «https://www.digitalocean.com/community/tutorials/how-to-create-an-encrypted-file-system-on-a-digitalocean -block-storage-volume [Как создать зашифрованную файловую систему на блочном хранилище DigitalOcean] »и« https://www.digitalocean.com/community/tutorials/how-to-work-with-digitalocean-block- storage-using-doctl [Как работать с блочным хранилищем DigitalOcean с помощью Doctl]. ”

Related