Тестируем
производительность
распределенных систем
хранения данных
Киров Александр
Parallels
О себе
5+ лет в Parallels
Деятельность:
• Анализ производительности Parallels Plesk Panel
• Анализ производительности серверной виртуализации
• Program manager Parallels Cloud Storage
Чем важен доклад
• Что тестировать и как? (консистентность, производительность)
• На что нужно обращать внимание в первую очередь?
• Как обойти множество подводных камней при тестировании?
• Раздаем утилиты для тестирования
Мы знаем о хранении данных
Диски подключенные в кластер
Индивидуальные диски
1TB
1TB
1TB
3TB
Parallels Cloud Storage
Высокая производительность
• Автоматическая балансировка данных
• Out-of-the-box SSD-кеширование
Масштабируемость
• Легко расширяется, автоматически
масштабируется, реорганизует кластер про
добавлении новых дисков/серверов
Отказоустойчивость
• Автоматически управляет отказоустойчивостью
и восстановлением
• Прозрачная репликация данных
File:
101110
011001
101100
File:
000111
010101
101010
File:
111000
011101
001010
Как тестировать?
Определиться что хотим получить
• Понять какая предполагается нагрузка на систему
• Что и сколько хотим получить от системы
Позволяет:
• Понять что действительно важно, а что нет
• Числено определить требования (IOPS, MB/s, ms)
• Понять характер нагрузки, основные сценарии
• Сколько машин работает с хранилищем
Различия сценариев
Файловый
сервер
VPS хостинг
VPS кластер
=VM
Не используйте хорошо сжимаемые
шаблоны данных
dd if=/dev/urandom of=/tmp/rnd_f size=1M
dd if=/tmp/rnd_f of=/dev/sda size=1M oflag=direct
Правильно:
dd if=/dev/zero of=/dev/sda size=1M
Самый популярный неправильный тест:
dd if=/dev/urandom of=/dev/sda size=1M
Улучшенный вариант, но по-прежнему неправильный :
Используйте большой working set
Пример плохого теста: iozone имеет маленький working set, поэтому
меряет память
Пример как working-set влияет на результат:
Random 4K write на Adaptec RAID 71605 (12 SSD) при различном working
set:
Working set Random 4K write
512 MB 100’000 IOPS
2048 MB 3’000 IOPS
Кстати, о RAID - контроллерах
Model Seq. write
LSI MegaRAID 2008M-8i 298 MB/s
MegaRAID 9271CV-8i 834 MB/s
Производительность одного диска:
Model Seq. write
LSI MegaRAID 2008M-8i 118 MB/s
MegaRAID 9271CV-8i 134 MB/s
RAID-контроллеры иногда показывают удивительные вещи, если нагружать
все диски параллельно (Sum Total Throughput across all 6 devices:)
Не пренебрегайте статистикой
• Отведите не меньше минуты на проведение теста
• Лучше – дольше
• Проводите один тест несколько раз, чтобы сгладить отклонения
• Делайте паузу между тестами
Убедитесь, что сравнение честное
Всегда сравнивать только «Яблоки с Яблоками»:
• Одинаковое железо
• Одинаковая нагрузка
• Одинаковый уровень отказоустойчивости
Тестируем Sync()
• Write() и Read() – это не все операции
над блочным хранилищем
• Необходимо тестировать sync()
• Операции sync() и fdatasync() требуют
записи данных из кешей на диск
User application
write(),read(),…
Kernel buffer
RAID cache
disk cache
disk
File:
101110
011001
101100
User
Kernel
HW
Kernel
Масштабируемость Sync()/flush
Тип Входящих дисков Кол-во Sync() / сек
1 disk 1
RAID 1 N
RAID 0 N
RAID 10 N
RAID 5/6 N
Во сколько раз массив из дисков способен сделать больше операций
sync()/flush по сравнению с одним диском?
Данные должны быть сброшены на каждом диске!
Скорость одного диска
Скорость одного диска
Скорость одного диска
Скорость одного диска
Скорость одного диска
Sync() в распределенной системе
File:
101110
011001
101100
Kernel
HW
Результат тестирования
*Parallels Cloud Storage 6.0: pstorage-5.0.1-440 ; OnApp Cloud 3.0: onapp-store-install-3.0.0-24, onapp-cp-install-3.0.0-20
Cluster: 7 nodes, 14 HDD, 1 Gbit
Как тестируем?
IO workloads:
• Sequential read of 16MB block
• Sequential write of 16MB block
• Random read of 4KB block
• Random write of 4KB block + sync
• Random write of 32x 4KB block + sync
Масштабируемость:
• 1, 10, 21 физических серверов в кластере
• 1, 4, 16 IO workloads на каждом сервере
At_io_iops
at_io_iops --read --rand -s 4K --iops -p 4 -t 60 -u 16G -S -f
/pstorage/<cluster_name>/<benchmark_dir>
• Умеет покрывать все необходимые сценарии
• Правильно подготавливает данные для теста
• Удобная настройка working set, потоков, нагружаемых файлов
• Умеет тестирвать sync
• Умеет aio/dio, cached/uncached
• Через опцию “-vvv” пишет все вызовы
Результаты: Read Performance
HW: Core i5 2400, 16 GB RAM, HDD 2x2TB SATA, Intel 82574L 1Gbit, Cisco Catalyst 2960
Результаты: Write Performance
HW: Core i5 2400, 16 GB RAM, HDD 2x2TB SATA, Intel 82574L 1Gbit, Cisco Catalyst 2960
Раздатка
Скачать методологию: Скачать at_io_iops:
http://goo.gl/aWAiVZhttp://goo.gl/dIuxLI
Консистентность
Консистентность
• Строгая консистентность (англ. strict consistency) гарантировано
возвращает значение, записанное самой последней операцией "запись”
Примеры: Parallels Cloud Storage, Lustre, …
• Консистентность в конечном счете (англ. eventual consistency)
гарантирует, что, в отсутствии изменений данных, в конечном счете
все запросы будут возвращать последнее обновленное значение.
Примеры: DNS, Amazon S3, …
Как проверять консистентность?
Решение:
• Записать данные и прочитать их
Проблемы:
• Кеши
• Распределенность системы
• Консистентность системы связана с её устойчивостью к сбоям
Чем проверять консистентность?
Утилита «hw_flush_check»
Принцип работы:
1. Клиент записывает данные и посылает Sync() (сбрасывает на диск)
2. По окончанию Sync(), посылает отчет аудитору
3. Моделируем отключение питания
4. Когда система запустится то клиент проверит сохранились ли данные
disk
Клиент Аудитор
Раздатка
Скачать hw_flush_check:
http://goo.gl/dIuxLI
Как железо влияет на системы хранения?
Консистентность данных на SSD
Тот же подход применим к тестированию железа:
SSD, RAID-контролеров, SAN
Ищите в спецификации к SSD:
• Intel: Enhanced Power Loss Data Protection
• Samsung: Cache Power Protection
• Kingston: Power-Failure Support
• OCZ: Complete Power Fail Protection
SSD не теряющие данные имеют конденсаторы
Консистентность. Выводы
• SW и HW необходимо тестировать на сохранность данных
• Используем для этого утилиту hw_flush_check
• Не используем SSD для ноутбуков в серверах
• Покупаем SSD с Power Loss Protection
• Покупаем SSD с большим сроком службы (durability)
Наработка на отказ
The mean time to data loss (MTTDL) — среднее время наработки
до потери данных:
MTTDL ~= 1 / T^2
T – время восстановления
Вывод: Чем быстрее система восстанавливает данные, тем выше
наработка на отказ
Наработка на отказ связана со скоростью восстановления данных
Как проверить?
Сценарий:
1. Записать значительный объем данных
2. Отключить компонент
3. Замерить время до полного восстановления данных
Результат:
Сильно зависит от архитектуры
Время восстановления RAID
Тип Чтение с рабочих дисков Запись на новый диск
RAID 0 n/a n/a
RAID 1 1 Скорость 1 диска
RAID 5/6 со всех Скорость 1 диска
RAID 10 1 Скорость 1 диска
Если на диски идёт нагрузка, то время будет значительно больше
Сравнение скорости восстановления
HW: Core i5 2400, 16 GB RAM, HDD 2x2TB SATA, Intel 82574L 1Gbit, Cisco Catalyst 2960
Попробовать Parallels Cloud
Storage
http://goo.gl/kdXxLF
Parallels Cloud Storage в PCS:
http://sp.parallels.com/products/pcs/
Parallels Cloud Storage для
OpenVZ:
http://openvz.org/Parallels_Cloud_Storage
http://goo.gl/4MXwRa
Q&A
Киров Александр
Parallels®
akirov@parallels.com
+7-495-783-29-77 (76244)
Appendix
CEPH
Традиционные системы хранения
Резервируют всё на HW уровне:
• Дублированное питание
• Двойные «мозги»
• Дублированное подключение
• Централизованная система
принятия решений
Распределенные системы хранения
Резервируют всё на SW уровне:
• HW априори никогда не надежно
• Резервирование на уровне SW
• Готова к отказу любого компонента
• Не требует необычного железа
• Распределенная система принятия
решений

Тестируем производительность распределённых систем, Александр Киров (Parallels)

  • 1.
  • 2.
    О себе 5+ летв Parallels Деятельность: • Анализ производительности Parallels Plesk Panel • Анализ производительности серверной виртуализации • Program manager Parallels Cloud Storage
  • 3.
    Чем важен доклад •Что тестировать и как? (консистентность, производительность) • На что нужно обращать внимание в первую очередь? • Как обойти множество подводных камней при тестировании? • Раздаем утилиты для тестирования
  • 4.
    Мы знаем охранении данных Диски подключенные в кластер Индивидуальные диски 1TB 1TB 1TB 3TB Parallels Cloud Storage Высокая производительность • Автоматическая балансировка данных • Out-of-the-box SSD-кеширование Масштабируемость • Легко расширяется, автоматически масштабируется, реорганизует кластер про добавлении новых дисков/серверов Отказоустойчивость • Автоматически управляет отказоустойчивостью и восстановлением • Прозрачная репликация данных
  • 6.
  • 8.
  • 9.
    Определиться что хотимполучить • Понять какая предполагается нагрузка на систему • Что и сколько хотим получить от системы Позволяет: • Понять что действительно важно, а что нет • Числено определить требования (IOPS, MB/s, ms) • Понять характер нагрузки, основные сценарии • Сколько машин работает с хранилищем
  • 10.
  • 11.
    Не используйте хорошосжимаемые шаблоны данных dd if=/dev/urandom of=/tmp/rnd_f size=1M dd if=/tmp/rnd_f of=/dev/sda size=1M oflag=direct Правильно: dd if=/dev/zero of=/dev/sda size=1M Самый популярный неправильный тест: dd if=/dev/urandom of=/dev/sda size=1M Улучшенный вариант, но по-прежнему неправильный :
  • 12.
    Используйте большой workingset Пример плохого теста: iozone имеет маленький working set, поэтому меряет память Пример как working-set влияет на результат: Random 4K write на Adaptec RAID 71605 (12 SSD) при различном working set: Working set Random 4K write 512 MB 100’000 IOPS 2048 MB 3’000 IOPS
  • 13.
    Кстати, о RAID- контроллерах Model Seq. write LSI MegaRAID 2008M-8i 298 MB/s MegaRAID 9271CV-8i 834 MB/s Производительность одного диска: Model Seq. write LSI MegaRAID 2008M-8i 118 MB/s MegaRAID 9271CV-8i 134 MB/s RAID-контроллеры иногда показывают удивительные вещи, если нагружать все диски параллельно (Sum Total Throughput across all 6 devices:)
  • 14.
    Не пренебрегайте статистикой •Отведите не меньше минуты на проведение теста • Лучше – дольше • Проводите один тест несколько раз, чтобы сгладить отклонения • Делайте паузу между тестами
  • 15.
    Убедитесь, что сравнениечестное Всегда сравнивать только «Яблоки с Яблоками»: • Одинаковое железо • Одинаковая нагрузка • Одинаковый уровень отказоустойчивости
  • 16.
    Тестируем Sync() • Write()и Read() – это не все операции над блочным хранилищем • Необходимо тестировать sync() • Операции sync() и fdatasync() требуют записи данных из кешей на диск User application write(),read(),… Kernel buffer RAID cache disk cache disk File: 101110 011001 101100 User Kernel HW Kernel
  • 17.
    Масштабируемость Sync()/flush Тип Входящихдисков Кол-во Sync() / сек 1 disk 1 RAID 1 N RAID 0 N RAID 10 N RAID 5/6 N Во сколько раз массив из дисков способен сделать больше операций sync()/flush по сравнению с одним диском? Данные должны быть сброшены на каждом диске! Скорость одного диска Скорость одного диска Скорость одного диска Скорость одного диска Скорость одного диска
  • 18.
    Sync() в распределеннойсистеме File: 101110 011001 101100 Kernel HW
  • 19.
    Результат тестирования *Parallels CloudStorage 6.0: pstorage-5.0.1-440 ; OnApp Cloud 3.0: onapp-store-install-3.0.0-24, onapp-cp-install-3.0.0-20 Cluster: 7 nodes, 14 HDD, 1 Gbit
  • 20.
    Как тестируем? IO workloads: •Sequential read of 16MB block • Sequential write of 16MB block • Random read of 4KB block • Random write of 4KB block + sync • Random write of 32x 4KB block + sync Масштабируемость: • 1, 10, 21 физических серверов в кластере • 1, 4, 16 IO workloads на каждом сервере
  • 21.
    At_io_iops at_io_iops --read --rand-s 4K --iops -p 4 -t 60 -u 16G -S -f /pstorage/<cluster_name>/<benchmark_dir> • Умеет покрывать все необходимые сценарии • Правильно подготавливает данные для теста • Удобная настройка working set, потоков, нагружаемых файлов • Умеет тестирвать sync • Умеет aio/dio, cached/uncached • Через опцию “-vvv” пишет все вызовы
  • 22.
    Результаты: Read Performance HW:Core i5 2400, 16 GB RAM, HDD 2x2TB SATA, Intel 82574L 1Gbit, Cisco Catalyst 2960
  • 23.
    Результаты: Write Performance HW:Core i5 2400, 16 GB RAM, HDD 2x2TB SATA, Intel 82574L 1Gbit, Cisco Catalyst 2960
  • 24.
    Раздатка Скачать методологию: Скачатьat_io_iops: http://goo.gl/aWAiVZhttp://goo.gl/dIuxLI
  • 25.
  • 26.
    Консистентность • Строгая консистентность(англ. strict consistency) гарантировано возвращает значение, записанное самой последней операцией "запись” Примеры: Parallels Cloud Storage, Lustre, … • Консистентность в конечном счете (англ. eventual consistency) гарантирует, что, в отсутствии изменений данных, в конечном счете все запросы будут возвращать последнее обновленное значение. Примеры: DNS, Amazon S3, …
  • 27.
    Как проверять консистентность? Решение: •Записать данные и прочитать их Проблемы: • Кеши • Распределенность системы • Консистентность системы связана с её устойчивостью к сбоям
  • 28.
    Чем проверять консистентность? Утилита«hw_flush_check» Принцип работы: 1. Клиент записывает данные и посылает Sync() (сбрасывает на диск) 2. По окончанию Sync(), посылает отчет аудитору 3. Моделируем отключение питания 4. Когда система запустится то клиент проверит сохранились ли данные disk Клиент Аудитор
  • 29.
  • 30.
    Как железо влияетна системы хранения?
  • 31.
    Консистентность данных наSSD Тот же подход применим к тестированию железа: SSD, RAID-контролеров, SAN Ищите в спецификации к SSD: • Intel: Enhanced Power Loss Data Protection • Samsung: Cache Power Protection • Kingston: Power-Failure Support • OCZ: Complete Power Fail Protection SSD не теряющие данные имеют конденсаторы
  • 32.
    Консистентность. Выводы • SWи HW необходимо тестировать на сохранность данных • Используем для этого утилиту hw_flush_check • Не используем SSD для ноутбуков в серверах • Покупаем SSD с Power Loss Protection • Покупаем SSD с большим сроком службы (durability)
  • 33.
    Наработка на отказ Themean time to data loss (MTTDL) — среднее время наработки до потери данных: MTTDL ~= 1 / T^2 T – время восстановления Вывод: Чем быстрее система восстанавливает данные, тем выше наработка на отказ Наработка на отказ связана со скоростью восстановления данных
  • 34.
    Как проверить? Сценарий: 1. Записатьзначительный объем данных 2. Отключить компонент 3. Замерить время до полного восстановления данных Результат: Сильно зависит от архитектуры
  • 35.
    Время восстановления RAID ТипЧтение с рабочих дисков Запись на новый диск RAID 0 n/a n/a RAID 1 1 Скорость 1 диска RAID 5/6 со всех Скорость 1 диска RAID 10 1 Скорость 1 диска Если на диски идёт нагрузка, то время будет значительно больше
  • 36.
    Сравнение скорости восстановления HW:Core i5 2400, 16 GB RAM, HDD 2x2TB SATA, Intel 82574L 1Gbit, Cisco Catalyst 2960
  • 37.
    Попробовать Parallels Cloud Storage http://goo.gl/kdXxLF ParallelsCloud Storage в PCS: http://sp.parallels.com/products/pcs/ Parallels Cloud Storage для OpenVZ: http://openvz.org/Parallels_Cloud_Storage http://goo.gl/4MXwRa
  • 38.
  • 39.
  • 40.
  • 41.
    Традиционные системы хранения Резервируютвсё на HW уровне: • Дублированное питание • Двойные «мозги» • Дублированное подключение • Централизованная система принятия решений
  • 42.
    Распределенные системы хранения Резервируютвсё на SW уровне: • HW априори никогда не надежно • Резервирование на уровне SW • Готова к отказу любого компонента • Не требует необычного железа • Распределенная система принятия решений

Editor's Notes

  • #4 Какую бы систему не выбрали, Кому полезен доклад: Тем, кто выбирает систему хранения Тем, кто собирается разворачивать ту или иную системы хранения данных Тем, кому важно не потерять свои данные
  • #6 Narrator: Parallels Cloud Storage works by turning unused disk space on your hardware nodes into a single pooled cloud storage resource. Service Providers typically deploy 1 to 2 terabytes of storage on hard drives in the node. However, on average over 50% of this disk space is not utilized and can’t be shared across other nodes. Parallels Cloud Storage solves this problem by connecting the hard drives in multiple hardware nodes into a storage cluster that is shared across all nodes.
  • #7 Narrator: Each node see a shared storage. Each saved file onto the storage are divided into chunks. Each chunk saved in several replicas. We will consider the case when each chunk has two replicas (replication level =2). You can see on the picture that each file is divided into 3 chunks. Each chunk has 2 replicas (one locally and one on the other server). Thus data is distributed over the cluster.
  • #8 Narrator: If one hardware node fails, replicas on the node becomes unavailable. Thus some chunks have only one replica (they blinks). Parallels Cloud Storage detects it and create necessary replicas on online servers. Thus all saved files is a safe state and accessible on each node in the cluster
  • #9 http://www.vodospad.net.ua/news/company-news/otboyniy-molotok-bosch-gsh-11-vc-novie-standarti-145.html
  • #10 Максимально приближенный к реальной нагрузке Производительность полученная с одной ноды не дает представления о производительности системы в целом Лучше постепенно менять параметры
  • #11 Если файловый север, то у нас есть только один хост осуществляет нагрузку на все хранилище. Т.е. хранилище должно максимально быстро уметь обслужить один хост. В сценарии же кластера для VMок (VPS хостинг), кластер должен уметь обслуживать несколько хостов. Либо у вас кластероное хранилище совмещено с вычислительными нодами и нагрузка на сам кластер идет изнутри на тех же самых нода. Учитывайте расстояние между компонентами, разнесенными друг от друга. По сути это 3 разных сценария. Нужно не забывать о сети (пропускной способности) и расстоянии (latency). Если предполагается, что все сервисы работают с хранилищем одновременно, то необходимо гразить хранилище одновременно со всех нод. Результат замеров для одной ноды умноженный на количество нод не даст вам даже похожего результата с реальностью.
  • #12 Многие системы (в том числе HW, SSD) имеют специальные тригеры на обработку нулевых данных. 
  • #13 Типичная проблема тестов, как Iozone
  • #14 Типичная проблема тестов, как Iozone
  • #15 Я сначала расскажу что делать не надо, а потом расскажу что же в итоге нужно делать
  • #16 Это – самая распространённая ошибка. Всегда надо спрашивать себя: «А честное ли это соревнование?». Система
  • #20 Проверить это казалось бы очень просто. Н
  • #25 Типичная проблема тестов, как Iozone
  • #27 Строгая консистентность гарантирует, что вы прочитаете строго то, что записали. Всегда. Представить это можно как транзакционную базу данных, где добавив и закоммитив новую строчку в базу вы полностью уверены, что она в этом базе есть. Eventual consistency не гарантирует, что вы прочитаете новые данные NFS – “Close-to-Open Consistency”
  • #28 Проверить это казалось бы очень просто. Но запись фактически может пройти в кеш вместо того чтобы упасть на диски. Так как система распределенная, то кеш может быть даже не на локальной машине, а где-то в кластере. Поэтому нужно тестировать консистентность во время моделирование сбоя компонент, чтобы убедиться, что данные реально лежат на дисках.
  • #29 Моделируем проблему на оборудовании, а hw_flush_check позволяет проверить сохранились ли данные.
  • #30 Типичная проблема тестов, как Iozone
  • #31 http://nowaday.biz/interesting/samye-neobychnye-lodki-v-mire.html
  • #32 SSD – это мини компьютер, с кэшем (RAM)
  • #38 Любое хранилище, которое имеет дисковые группы, покажет производительность ниже
  • #42 http://nowaday.biz/interesting/samye-neobychnye-lodki-v-mire.html
  • #44 Обычно промышленные NAS и SAN это несколько юнитовые коробки с откоусточивостью на железном уровне. Они имеют двойные мозги, двойное питание и все их компоненты дублируются на уровне железа. Их можно представить себе как отказоустойчивую кружку с двойными ручками. Самое главное – они имеют централизованное место принятия решений, так называемые «мозги». Есть какой-то выделенный блок, которое определяет состояние данных.
  • #45 В распределенной системе центр принятия решений не может быть один иначе он будет является единой точной отказа. То есть система принятий решения должна быть распределенная, иметь устойчивый к сбою.