Изменения

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

Производительность Ceph

437 байтов добавлено, 22:03, 22 января 2019
Нет описания правки
== Краткий экскурс в устройство SSD и флеш-памяти ==
Особенность флеш-памяти (NAND/NOR) заключается в том, что пишется она мелкими блоками (обычно 512 байт), но перед тем, как писать — блок нужно стереть. А вот стирать она умеет только крупные блоки а стирается большими («erase unit»), размером обычно 2-4 мегабайта, ) — и при этом писать можно только в предварительно стёртую область. Чтение блока при этом быстрое, запись тоже быстрая; стирание довольно же медленное по отношению к записи. Кроме того, каждый да ещё и число стираний каждого erase unit ограничен числом стираний. После -а ограничено — после нескольких тысяч стираний (типичное значение для MLC) он блок физически выходит из строя. В более дешёвых чипах и плотных (MLC, TLC , QLC — 2-4 бита на ячейку) чипах лимит стираний меньше, в более дорогих и SLC — менее плотных (SLC, один бит на ячейку) — больше. Таким образомСоответственно, при «тупом» подходе перезапись подходе — если при записи каждого блока его просто стирать и перезаписывать — случайная запись во флеш-памятипамять, во-первых, была бы будет очень медленной, а во-вторых, она бы будет быстро выходила выводить её из строя.
Но почему тогда SSD быстрые? А потому, что внутри SSD на самом деле есть очень мощный и умный контроллер (1-2 гигагерца, примерно как процессоры мобильников), и на нём выполняется нечто, называемое Flash Translation Layer — прошивка, которая переназначает каждый мелкий логический сектор в произвольное место диска. FTL всё время поддерживает некоторое количество свободных стёртых блоков, каждая случайная и направляет каждую мелкую случайную запись на самом деле идёт в новое место диска — диска, в заранее стёртую область. Поэтому запись быстрая. Одновременно FTL делает дефрагментацию свободного места и Wear Leveling (распределение износа), направляя запись и перемещая данные так, чтобы все блоки диска стирались примерно одинаковое количество раз. Кроме того, во всех SSD некоторый % реального места зарезервирован под Wear Leveling («overprovision»), а в хороших серверных SSD этот процент весьма большой — например, в Micron 5100 Max это +60 % ёмкости.
Именно из наличия FTL вытекает и проблема с энергонезависимостью и «power loss protection»-ом. Карты отображения секторов — это метаданные, которые при сбросе кэша тоже нужно сбрасывать в постоянную память, и именно этот сброс и вносит торможение в работу настольных SSD с fsync.
Дополнение: когда я попытался кого-то в списке рассылки полечить на тему, что «все SSD делают fsync», мне в ответ кинули статью: https://www.usenix.org/system/files/conference/fast13/fast13-final80.pdf. В общем, суть статьи в том, что в 2013 году нормой было то, что SSD вообще не сбрасывали метаданные на диск при fsync, и при отключении питания это приводило к разным весёлым вещам вплоть до (!!!) полного отказа SSD.
Есть экземпляры старых SSD без конденсаторов (OCZ Vector/Vertex), которые при этом выдают большие iops на запись с fsync. Как это возможно? Неизвестно, но есть предположение, что суть как раз в небезопасности записи. Принцип работы флеш-памяти за последние годы вроде как не менялся — в SSD как раньше был FTL, так и сейчас FTL. Как достигнуть быстрой записи, если постоянно сбрасывать на диск карты трансляции — хз… наверное, если только сделать некое подобие лог-структурированной ФС внутри — писать всё время вперемешку метаданные и данные. Но при этом, по идее, при старте всё это «добро» придётся сканировать и старт/монтирование станет долгим. А в SSD долгого монтирования вроде как нет.
Ну и, собственно, «power loss protection», видимо, бывает простой, а бывает advanced. Простой означает просто «мы корректно делаем fsync и не сдохнем при отключении питания», а advanced означает наличие конденсаторов и быструю безопасную запись с fsync. Возможно, сейчасСейчас, в 2018 (уже почти 2019) году2018—2019 годах, обычный «обычный» PLP , похоже, всё-таки стал нормойи при отключении питания большая часть SSD терять данные и умирать уже не должна.
=== Бонус: USB-флешки ===

Навигация