Изменения

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

Ceph performance

2070 байтов убрано, 12:34, 24 апреля 2019
Нет описания правки
There also exist some very old SSDs without capacitors (OCZ Vector/Vertex) which are capable of very large sync iops numbers. How do they work? Nobody knows, but I suspect that they just don’t do safe writes :). The core principle of flash memory overwrites didn’t change in the last years, and SSDs were also based on FTLs just as they do now.
So it seems there are two kinds of «power loss protection»: simple PLP means «we do fsyncs and don’t die or lose your data when a power loss occurs», and advanced PLP means that fsync’ed writes are just as fast as non-fsynced. It also seems that in the current years (2018—2019) simple PLP is already a standard and most SSDs don’t lose data on power failure.
=== A bonus: USB thumb drives ===
А почему тогда Why are USB-флешки такие медленныеflash drives so slow then? Случайная запись на флешку 512-байтными (или 4 Кб) блоками обычно идёт со скоростью In terms of small random writes they usually only deliver 2-3 iops. А флеш-память там ровно та же, что в SSD — ну, может, более дешёвые вариации, но разница же не на порядки. Ответ кроется в том, что на флешках тоже есть FTL (и даже Wear Leveling), но по сравнению с SSD-шным он маленький и тупой. У него слабый процессор и мало памяти. Из-за малого объёма RAM контроллеру флешки, в отличие от контроллера SSD, негде хранить полную таблицу сопоставления виртуальных и реальных секторов — поэтому отображаются не сектораoperations per second, а крупные блоки гдеwhile being powered by same flash memory chips -то по мегабайту или большеmaybe slightly cheaper and worse ones, а при записи есть лимит на количество «открытых» блоковbut obviously not 1000 times worse. Как это происходит:
* Допустим, вы пишете в сектор XThe answer also lies in the FTL.* Контроллер отображает блокThumb drives also have FTL and they even have some Wear Leveling, которому принадлежит этот сектор, на реальный блок, и «открывает» его — выделяет пустой блок, запоминает, что он «дочерний» для открытого и записывает туда один изменённый вами секторbut it's very small and dumb compared to SSD FTLs.* Таким макаром можно открыть максимум N разных блоков; число N обычно очень маленькое — от 3 до 6It has a slow CPU and only a little memory.* Дальше если вы пишете следующий сектор из уже открытого блока — он просто записывается в его дочерний блок Thus it doesn't have place to store a full mapping table for small blocks and thus it translates the positions of big blocks (что быстро1-2 megabytes or even bigger)instead.* Если же следующий записываемый сектор принадлежит другому блоку — какой-то из открытых блоков приходится закрывать и «сливать» содержимое дочернего блока с оригинальнымWrites are buffered and then flushed one block at a time; there is a small limit on number of blocks that can be buffered at once. The limit is usually only between 3 and 6 blocks.
Для копирования больших файлов на флешку, отформатированную в любую из стандартных файловых систем, двух блоков достаточно: в один открытый блок пишутся данные, во второй — метаданные записываемого файлаThis limit is always sufficient to copy big files to a flash drive formatted in any of common filesystems. Запись последовательнаяOne opened block receives metadata and another receives data, всё быстроthen it just moves on. А вот при случайной записи вы перестаёте попадать в уже «открытые» блоки и каждая операция записи превращается в полное стираниеBut if you start doing random writes you stop hitting the opened blocks and this is where lags come in. Тут-то и начинаются тормоза…

Навигация