2018-06-27 Тестирование различных способов подключения SSD для Ceph
м |
|||
(не показано 12 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
− | Задача: | + | Задача: проверить гипотезу, что дешёвые SSD без конденсаторов можно подключать к системе через RAID контроллер с батарейкой для получения приличных IOPS-ов в Ceph (хотя это и извращение). |
+ | |||
+ | TL;DR: похоже, можно. IOPS-ы растут, а данные потерять не удалось. Но, конечно, это всё равно в некоторой мере стрельба в ногу, поэтому лучше просто купить недорогие Enterprise SSD с «advanced power loss protection» типа Micron 5100/5200. | ||
+ | |||
+ | '''UPD: Предложенную идею официально считать дичью, делать так не надо.''' | ||
== Преамбула == | == Преамбула == | ||
Строка 7: | Строка 11: | ||
В силу этого IOPS-ы при записи мелкими блоками, то бишь при OLTP-применении, страдают. В силу этого же тестировать производительность дисков нужно обязательно с опцией fdatasync=1. | В силу этого 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-ы при разных способах подключения различаются | + | Сразу скажем: IOPS-ы при разных способах подключения различаются драматически и местами довольно странно. |
Все тесты запускались утилитой fio с параметрами: {{Cmd|1=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)). | Все тесты запускались утилитой fio с параметрами: {{Cmd|1=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)). | ||
Строка 39: | Строка 49: | ||
!SATA, | !SATA, | ||
кэш диска вкл | кэш диска вкл | ||
+ | !Без | ||
+ | fdatasync | ||
|- | |- | ||
|Intel DC3500 SSDSC2BB080G4 80GB | |Intel DC3500 SSDSC2BB080G4 80GB | ||
− | |bgcolor=#C0FFC0|25000 | + | | bgcolor="#C0FFC0" |25000 |
|7000 | |7000 | ||
|9500 | |9500 | ||
− | |bgcolor=#D0D0FF|9500 | + | | bgcolor="#D0D0FF" |9500 |
− | |bgcolor=#C0FFC0|26000 | + | | bgcolor="#C0FFC0" |26000 |
− | |bgcolor=#FFC0C0|5000 | + | | bgcolor="#FFC0C0" |5000 |
− | |bgcolor=#C0FFC0|21000 | + | | bgcolor="#C0FFC0" |21000 |
|7000 | |7000 | ||
+ | |26000 | ||
|- | |- | ||
|Intel X25-M SSDSA2M160G2GC 160GB | |Intel X25-M SSDSA2M160G2GC 160GB | ||
− | |bgcolor=#FFC0C0|1100 | + | | bgcolor="#FFC0C0" |1100 |
− | |bgcolor=#C0FFC0|21000 | + | | bgcolor="#C0FFC0" |21000 |
− | |bgcolor=#FFC0C0|1100 | + | | bgcolor="#FFC0C0" |1100 |
− | |bgcolor=#D0D0FF|9000 | + | | bgcolor="#D0D0FF" |9000 |
− | |bgcolor=#FFC0C0|1100 | + | | bgcolor="#FFC0C0" |1100 |
|5000 | |5000 | ||
− | |bgcolor=#FFC0C0|1100 | + | | bgcolor="#FFC0C0" |1100 |
|5000 | |5000 | ||
+ | |21000 | ||
|- | |- | ||
|Intel 320 SSDSA2CW160G3 160GB | |Intel 320 SSDSA2CW160G3 160GB | ||
− | |bgcolor=#C0FFC0|20000 | + | | bgcolor="#C0FFC0" |20000 |
↓ 14000<ref>Снижается до 13000-15000 iops через 3-5 Гб записанных данных</ref> | ↓ 14000<ref>Снижается до 13000-15000 iops через 3-5 Гб записанных данных</ref> | ||
− | |bgcolor=#C0FFC0|20000 | + | | bgcolor="#C0FFC0" |20000 |
↓ 14000 | ↓ 14000 | ||
|9500 | |9500 | ||
− | |bgcolor=#D0D0FF|9500 | + | | bgcolor="#D0D0FF" |9500 |
− | |bgcolor=#C0FFC0|20000<ref>В JBOD тот же диск почему-то не снижает скорость — х.з почему.</ref> | + | | bgcolor="#C0FFC0" |20000<ref>В JBOD тот же диск почему-то не снижает скорость — х.з почему.</ref> |
|4500 | |4500 | ||
|9500 | |9500 | ||
|8000 | |8000 | ||
+ | |20000 | ||
|- | |- | ||
|Intel 545s SSDSC2KW256G8 256GB | |Intel 545s SSDSC2KW256G8 256GB | ||
− | |bgcolor=#FFC0C0|1100 | + | | bgcolor="#FFC0C0" |1100 |
− | |bgcolor=#C0FFC0|33000 | + | | bgcolor="#C0FFC0" |33000 |
− | |bgcolor=#FFC0C0|1150 | + | | bgcolor="#FFC0C0" |1150 |
− | |bgcolor=#D0D0FF|9000 | + | | bgcolor="#D0D0FF" |9000 |
− | |bgcolor=#FFC0C0|1100 | + | | bgcolor="#FFC0C0" |1100 |
|то 2100, | |то 2100, | ||
то 700 | то 700 | ||
− | |bgcolor=#FFC0C0|1100 | + | | bgcolor="#FFC0C0" |1100 |
|то 2600, | |то 2600, | ||
то 800<ref>процесс тестирования идёт примерно так: 25 секунд 2600 iops, потом 8 секунд 800 iops, потом опять 25 секунд 2600 iops, опять 8 секунд 800… То есть получается, что 256 Мб пишется на полной скорости, а потом 25 Мб в 3 раза медленнее. С одной стороны, это какой-то намёк на сброс кэша, но с другой — бред полный, так как в режиме НЕтранзакционной записи (без fdatasync=1) с включённым кэшем теми же 4к-блоками тот же SSD выдаёт стабильно 22000-25000 IOPS. А с выключенным 1100 iops.</ref> | то 800<ref>процесс тестирования идёт примерно так: 25 секунд 2600 iops, потом 8 секунд 800 iops, потом опять 25 секунд 2600 iops, опять 8 секунд 800… То есть получается, что 256 Мб пишется на полной скорости, а потом 25 Мб в 3 раза медленнее. С одной стороны, это какой-то намёк на сброс кэша, но с другой — бред полный, так как в режиме НЕтранзакционной записи (без fdatasync=1) с включённым кэшем теми же 4к-блоками тот же SSD выдаёт стабильно 22000-25000 IOPS. А с выключенным 1100 iops.</ref> | ||
+ | |33000 | ||
|} | |} | ||
+ | |||
+ | Последняя колонка — для справки, чтобы видеть верхнюю границу возможной скорости. | ||
+ | |||
+ | 21000-26000 можно воспринимать как одинаковые цифры, так как скорость записи на один и тот же SSD на самом деле может варьироваться от теста к тесту и чтобы её установить точно, нужно более расширенное и долгое тестирование с представлением результатов в виде графиков. | ||
Результаты приведены при нагрузке на один диск. Если дать параллельную нагрузку на 3 первых из списка диска, фактические iops-ы снижаются в 2 раза — в своём оптимальном режиме 12500, а во втором по оптимальности (с обоими включенными кэшами) — до 4500. Возможно, это обусловлено тем, что тестировался уже не самый новый и не самый быстрый RAID-контроллер (хотя SATA 6 GB/s вроде поддерживает). | Результаты приведены при нагрузке на один диск. Если дать параллельную нагрузку на 3 первых из списка диска, фактические iops-ы снижаются в 2 раза — в своём оптимальном режиме 12500, а во втором по оптимальности (с обоими включенными кэшами) — до 4500. Возможно, это обусловлено тем, что тестировался уже не самый новый и не самый быстрый RAID-контроллер (хотя SATA 6 GB/s вроде поддерживает). | ||
+ | |||
+ | == Примечания == | ||
+ | |||
+ | <references /> | ||
+ | |||
+ | == Умозаключения == | ||
+ | |||
+ | В целом, если немножко вдуматься, результаты не очень очевидные. Объяснение им в моём понимании такое: | ||
+ | * На серверных 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 контроллеры можно использовать. | ||
== Выводы == | == Выводы == | ||
Строка 91: | Строка 126: | ||
* Оптимальный способ подключения серверных 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 — 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-контроллера. | * Оптимальный способ подключения дешёвых настольных SSD — SAS RAID контроллер с включённым кэшем диска и выключенным (write-through) кэшем RAID-контроллера. | ||
− | * При подключении через RAID контроллер и включении обоих кэшей записи | + | * При подключении через RAID контроллер и включении обоих кэшей записи получается некоторая гарантированно неплохая скорость. «Гарантированная» в том смысле, что не сильно зависит от модели SSD, так как упирается в скорость работы самого контроллера. |
* Способа обеспечить нормальные IOPS-ы на запись с Ceph два: | * Способа обеспечить нормальные IOPS-ы на запись с Ceph два: | ||
− | ** Серверные SSD | + | ** '''Предпочтительный:''' Серверные SSD + SATA/NVMe подключение |
** RAID контроллер с конденсатором. Но желательна поддержка скорости SATA 12 GB/s и хотя бы 1 Гб кэша (в противном случае контроллер сам может стать узким местом) | ** RAID контроллер с конденсатором. Но желательна поддержка скорости SATA 12 GB/s и хотя бы 1 Гб кэша (в противном случае контроллер сам может стать узким местом) | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{wl-publish: 2018-06-27 18:19:47 +0300 | VitaliyFilippov }} | {{wl-publish: 2018-06-27 18:19:47 +0300 | VitaliyFilippov }} |
Текущая версия на 22:57, 14 августа 2020
Задача: проверить гипотезу, что дешёвые 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 вроде поддерживает).
Примечания
- ↑ Снижается до 13000-15000 iops через 3-5 Гб записанных данных
- ↑ В JBOD тот же диск почему-то не снижает скорость — х.з почему.
- ↑ процесс тестирования идёт примерно так: 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 Гб кэша (в противном случае контроллер сам может стать узким местом)