2018-06-27 Тестирование различных способов подключения SSD для Ceph

Материал из YourcmcWiki
Перейти к: навигация, поиск

Задача: проверить гипотезу, что дешёвые SSD без конденсаторов можно подключать к системе через RAID контроллер с батарейкой для получения приличных IOPS-ов в Ceph (хотя это и извращение).

TL;DR: похоже, можно. IOPS-ы растут, а данные потерять не удалось. Но, конечно, это всё равно в некоторой мере стрельба в ногу, поэтому лучше просто купить недорогие Enterprise SSD с «advanced power loss protection» типа Micron 5100/5200.

UPD: Предложенную идею официально считать дичью, делать так не надо.

Преамбула

Особенность Ceph — то, что вся запись (даже та, для которой никто этого явно не просит) ведётся транзакционно.

В силу этого IOPS-ы при записи мелкими блоками, то бишь при OLTP-применении, страдают. В силу этого же тестировать производительность дисков нужно обязательно с опцией fdatasync=1.

И в силу этого же нужно использовать SSD с конденсаторами (точнее — суперконденсаторами, ионисторами). Конденсаторы — это самое важное отличие Enterprise SSD от дешёвых Desktop SSD и служат они для защиты внутреннего кэша записи при отключении питания. Когда отключается питание, заряда конденсаторов хватает, чтобы SSD успела сбросить недозаписанное содержимое кэша во флеш-память. Это даёт ей возможность игнорировать запросы синхронизации данных (fsync, SATA FLUSH CACHE) и таким образом на порядок-два повышать производительность транзакционной записи (разницу по IOPS можно видеть ниже).

Конденсаторы называются «Расширенная защита от потери данных при отключении питания» / «Enhanced Power Loss Protection». В данном тесте этой характеристикой обладают Intel DC3500 и Intel 320.

…Но…

Есть же в природе серверные RAID контроллеры, тоже с батарейками/конденсаторами, служащими ровно той же цели. Может быть, можно подключить SSD через такой контроллер и получить повышенную производительность?

Сразу скажем: IOPS-ы при разных способах подключения различаются драматически и местами довольно странно.

Все тесты запускались утилитой fio с параметрами: fio -ioengine=libaio -fdatasync=1 -direct=1 -invalidate=1 -name=test -bs=4k -size=10G -iodepth=16 -rw=randwrite -filename=/dev/sdX (то есть, случайная запись блоками по 4 килобайта в обход кэша ОС (direct и invalidate) и в транзакционном режиме (fdatasync)).

Протестированные виды подключения:

  • Через контроллер Adaptec 6805 с ZMM (конденсатором):
    • RAID volume из одного диска. В этом случае доступны две настройки: внутренний кэш диска — вкл/выкл и кэш контроллера — вкл/выкл.
    • JBOD из одного диска. В этом случае доступна одна настройка: внутренний кэш диска — вкл/выкл.
  • Через SATA контроллер обычной десктопной материнской платы. Доступна одна настройка: внутренний кэш диска — вкл/выкл (через утилиту hdparm -W).

Результаты тестирования

Модель SSD / Подключение RAID,

оба кэша ВЫКЛ

RAID,

кэш диска ВКЛ

RAID,

кэш RAID вкл

RAID,

оба кэша ВКЛ

JBOD,

кэш диска выкл

JBOD,

кэш диска вкл

SATA,

кэш диска выкл

SATA,

кэш диска вкл

Без

fdatasync

Intel DC3500 SSDSC2BB080G4 80GB 25000 7000 9500 9500 26000 5000 21000 7000 26000
Intel X25-M SSDSA2M160G2GC 160GB 1100 21000 1100 9000 1100 5000 1100 5000 21000
Intel 320 SSDSA2CW160G3 160GB 20000

↓ 14000[1]

20000

↓ 14000

9500 9500 20000[2] 4500 9500 8000 20000
Intel 545s SSDSC2KW256G8 256GB 1100 33000 1150 9000 1100 то 2100,

то 700

1100 то 2600,

то 800[3]

33000

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

21000-26000 можно воспринимать как одинаковые цифры, так как скорость записи на один и тот же SSD на самом деле может варьироваться от теста к тесту и чтобы её установить точно, нужно более расширенное и долгое тестирование с представлением результатов в виде графиков.

Результаты приведены при нагрузке на один диск. Если дать параллельную нагрузку на 3 первых из списка диска, фактические iops-ы снижаются в 2 раза — в своём оптимальном режиме 12500, а во втором по оптимальности (с обоими включенными кэшами) — до 4500. Возможно, это обусловлено тем, что тестировался уже не самый новый и не самый быстрый RAID-контроллер (хотя SATA 6 GB/s вроде поддерживает).

Примечания

  1. Снижается до 13000-15000 iops через 3-5 Гб записанных данных
  2. В JBOD тот же диск почему-то не снижает скорость — х.з почему.
  3. процесс тестирования идёт примерно так: 25 секунд 2600 iops, потом 8 секунд 800 iops, потом опять 25 секунд 2600 iops, опять 8 секунд 800… То есть получается, что 256 Мб пишется на полной скорости, а потом 25 Мб в 3 раза медленнее. С одной стороны, это какой-то намёк на сброс кэша, но с другой — бред полный, так как в режиме НЕтранзакционной записи (без fdatasync=1) с включённым кэшем теми же 4к-блоками тот же SSD выдаёт стабильно 22000-25000 IOPS. А с выключенным 1100 iops.

Умозаключения

В целом, если немножко вдуматься, результаты не очень очевидные. Объяснение им в моём понимании такое:

  • На серверных SSD внутренний кэш записи может тормозить транзакционную запись. Отсюда 7000 на DC3500.
  • На дешёвых SSD внутренний кэш записи помогает транзакционной записи, но не сильно. Отсюда 2600/800 на 545s и 5000 на X25. Либо, возможно, кроме волатильного кэша у них есть ещё и неволатильный (например, маленькая область SLC флеш памяти) и при отключении кэша отключаются оба, а при включении и fsync «отключается» только волатильный.
  • На дешёвых SSD при выключенном внутреннем кэше записи скорость нетранзакционной записи очень сильно проседает (до скорости транзакционной), в итоге, даже если включить RAID-кэш — остаются тормоза, так как кэш не успевает сбрасываться на диск. Отсюда 1100 на X25 и 545s в режиме, когда включён только RAID-кэш.
  • Самая большая загадка — почему дешёвые SSD быстрые в режиме Write-Through (выключенного) RAID кэша при включенном внутреннем? Ответ может быть только один — в Write-Through («как бы отключённом») режиме кэша RAID контроллер тоже игнорирует запросы fsync. Остаётся только надеяться, что «Write-Through» фактически означает «записать в кэш, подтвердить запись и сразу передать на диск» — в этом случае при отключении питания данные всё-таки останутся в кэше и при следующем включении доедут до назначения. А вот если WT означает «пишем мимо кэша», то это просто отключение транзакционности и при отключении питания данные, скорее всего, повредятся. Чтобы проверить, как оно в реальности, проведены дополнительные тесты:
    • Простой тест записи пройден. Тест такой: пишем с максимальной скоростью 2 Гб, делаем fsync, выдёргиваем питание, включаем и проверяем, что все 2 гб записались.
    • Более сложный тест записи тоже пройден. Тест такой: запускаем на машине программу, который пишет по 1 случайному блоку в случайное место на диске, после каждой записи делает fsync и рапортует по сети второй машине, что только что записала. В процессе записи выдёргиваем питание, потом включаем обратно, копируем лог на тестируемую машину и проверяем, что все данные записались. По сути, программа изображает из себя СУБД, а проверка — то, что все закоммиченные транзакции записаны на диск. Скрипты, которыми тестировал: http://yourcmc.ru/git/vitalif/fsync-check
    • Вывод: по-видимому, Write-Through кэш тоже защищён батарейкой, а значит, RAID контроллеры можно использовать.

Выводы

  • Оптимальный способ подключения серверных SSD — SATA с выключенным кэшем (hdparm -W 0 /dev/sdX), либо SAS RAID контроллер с обоими отключенными кэшами (arcconf setcache 1 device 0 5 wt && arcconf setcache 1 logicaldrive 5 wt). SATA лучше, так как в этом случае поддерживается TRIM (хотя в нём серверные SSD и не нуждаются), а RAID-контроллер точно не может быть узким местом.
  • Оптимальный способ подключения дешёвых настольных SSD — SAS RAID контроллер с включённым кэшем диска и выключенным (write-through) кэшем RAID-контроллера.
  • При подключении через RAID контроллер и включении обоих кэшей записи получается некоторая гарантированно неплохая скорость. «Гарантированная» в том смысле, что не сильно зависит от модели SSD, так как упирается в скорость работы самого контроллера.
  • Способа обеспечить нормальные IOPS-ы на запись с Ceph два:
    • Предпочтительный: Серверные SSD + SATA/NVMe подключение
    • RAID контроллер с конденсатором. Но желательна поддержка скорости SATA 12 GB/s и хотя бы 1 Гб кэша (в противном случае контроллер сам может стать узким местом)

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.