Прежде всего: усиление записи не является исключительным свойством Flash, но происходит со всеми блочными устройствами.
Это побочный эффект того, что блочное устройство называют block
устройством: данные записываются порциями ("блоками"), обычно состоящими из 512 байт в 4 килобайта. Это приводит к ситуации, когда для изменения одного байта на блочном устройстве нам нужно сначала прочитать остальную часть блока (этот шаг обычно не активен, так как буферы ОС обычно имеют размер как минимум блока), затем измените один байт в памяти, затем запишите полный блок на устройство: чтобы изменить один байт, нам нужно было записать полный блок, часто тысячи байтов.
Этот давно известный механизм имеет особое значение для твердотельных накопителей, так как они
- обычно имеют большой (ish) размер блока
- может выдержать только ограниченное количество записей, меньше, чем вращающийся диск на порядки.
Если шаблон использования для SSD с размером блока 4 КБ будет состоять в изменении 1 байта на блок, то общее число записанных байтов будет в 4096 раз больше количества байтов полезной нагрузки, то есть произойдет write amplification
4096. Это будет означать, что твердотельный накопитель с типичной выносливостью 10 лет будет преодолен за этот предел выносливости менее чем за день.
Контрмеры против этого многократно:
- Самое главное: этот шаблон использования очень редко
- ОС с поддержкой SSD (и / или контроллеры) пытаются планировать записи таким образом, чтобы избежать усиления.
- Многие современные твердотельные накопители используют кэш-память DRAM, чтобы накапливать небольшие записи в один и тот же блок и записывать их во флэш-память только при заполнении или как можно позже. Сверхпроводники обеспечивают мощность, чтобы закончить это, когда питание отключено.
Что касается первой части вопроса: хотя на вращающемся диске выполняются операции чтения и записи как на физическом, так и на логическом уровне, физические операции с флэш-памятью - это erase
, program
и read
. Это означает, что логическая запись преобразуется в program
в пустом (стертом) блоке. Современные контроллеры SSD ведут инвентаризацию уже стертых блоков и используют их для максимально быстрой логической записи. Операция стирания для теперь неиспользуемой ячейки может быть отложена на более позднюю, если текущие требования к пропускной способности или нагрузка контроллера высоки. Так что на самом деле использование другого блока - это не что иное, как механизм настройки производительности, хотя и очень важный.