Вступление
Сравнительный анализ позволяет оценить производительность инфраструктуры, чтобы вы могли определить, может ли конкретная установка удовлетворить ваши потребности в рабочей нагрузке. Это важный компонент поддержания высокой производительности сервера и масштабирования для удовлетворения растущих вычислительных потребностей. С помощью тестов производительности вы можете отслеживать ресурсы сервера, оптимизировать производительность, управлять использованием и прогнозировать возможные проблемы.
В этом руководстве мы рассмотрим лучшие практики для сравнения ваших объемов блочных хранилищ 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 |
---|---|
|
The queue depth that fio will issue to the file. In order to hit best input/output (I/O) rates, a number greater than |
|
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 |
|
The time in seconds to run the benchmark. We recommend a runtime greater than 60 seconds, usually in the range of |
|
The |
|
Takes a Boolean value: |
|
Use synchronous I/O for buffered writes. This option takes a Boolean value: |
|
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]. ”