Почему запись во флеш-память быстрее удаления: разбор фундаментального заблуждения
С этого момента в этом разделе будут публиковаться не только новости, но и просто познавательные статьи на тему ИТ. О том как устроен компьютер или та или иная его составляющая. И поскольку занимаемся мы в том числе восстановлением данных с различных носителей то попробуем разобраться как они устроены, в частности модные нынче SSD. Например одно из главных заблуждений касательно устройства SSD, да и вообще любой флеш памяти, это то что удаление информации с такого носителя быстрее чем запись на этот носитель. В частности это причина почему и зачем используется технология TRIM. И так начнём....
Ключевое различие: гранулярность операций
Флеш-память NAND организована иерархически, и разные операции работают на разных уровнях:
-
Страница (page) — минимальная единица для чтения и программирования (записи). Типичный размер: 4–16 КБ.
-
Блок (block) — минимальная единица для стирания. Блок состоит из сотен или тысяч страниц, поэтому его размер составляет мегабайты.
Таким образом, запись оперирует килобайтами, а стирание — мегабайтами. Уже на этом уровне заложена разница в масштабе работы, которую выполняет чип.
Цифры: задержка (latency) операций
Сравним типичное время выполнения операций для разных типов NAND-памяти. Данные сведены в таблицу на основе спецификаций и научных публикаций.
| Тип операции | SLC (однобитная) | MLC (двухбитная) | TLC / QLC (современные) |
|---|---|---|---|
| Чтение страницы | 25–50 мкс | 50–100 мкс | ~100 мкс и выше |
| Программирование (запись) страницы | 200–250 мкс | 0.4–1.5 мс | 0.8–3 мс |
| Стирание блока | 1.5–2 мс | 3.5–10 мс | 10–20 мс |
Важно: В таблице приведены значения для одной страницы (запись) и одного блока (стирание). Блок содержит сотни страниц, поэтому «удельная» стоимость стирания в пересчёте на одну страницу оказывается ещё выше, но даже в абсолюте стирание блока занимает в несколько раз больше времени, чем запись одной страницы.
Вывод из таблицы: Запись одной страницы (сотни микросекунд) происходит в 5–10 раз быстрее, чем стирание целого блока (миллисекунды). Это подтверждает тезис: программирование быстрее удаления (стирания).
Физика процесса: почему стирание такое медленное?
Разница во времени обусловлена различными физическими механизмами, используемыми для инжекции и удаления заряда из плавающего затвора (floating gate) ячейки.
-
Программирование (запись): инжекция горячих электронов. Для записи «1» в ячейку (или изменения состояния с 1 на 0) используется относительно быстрый процесс инжекции горячих электронов (Channel Hot Electron Injection). Электроны получают высокую энергию от электрического поля и «перепрыгивают» на плавающий затвор. Этот процесс занимает микросекунды.
-
Стирание: туннелирование Фаулера-Нордхейма. Для удаления данных (сброса ячейки в состояние «1») необходимо «вытянуть» электроны с плавающего затвора. Это делается с помощью квантового туннелирования Фаулера-Нордхейма (Fowler-Nordheim tunneling), которое требует приложения очень высокого напряжения (около 20 В) и является существенно более медленным процессом. Время туннелирования измеряется миллисекундами.
Именно этот физический механизм делает стирание на порядок (или более) медленнее программирования.
Почему пользователю кажется, что удаление мгновенно? Роль контроллера (FTL)
Если физическое стирание такое медленное, почему же удаление файла в операционной системе происходит почти мгновенно?
Ответ кроется в слое трансляции флеш-памяти (Flash Translation Layer, FTL) — программно-аппаратном комплексе внутри SSD или контроллера флешки.
Когда вы удаляете файл, операционная система не даёт команду «стереть блок». Вместо этого FTL просто помечает страницы, содержащие данные, как «недействительные» (invalid). Это логическая операция, которая выполняется за наносекунды. Физическое стирание откладывается.
Схема работы FTL при перезаписи (out-of-place write):
-
Новые данные записываются в свободные, уже стёртые страницы (это быстро — микросекунды).
-
Старые страницы помечаются как недействительные.
-
Когда свободных страниц становится мало, FTL запускает сборку мусора (Garbage Collection) в фоновом режиме. Этот процесс включает в себя чтение оставшихся действительных данных из блока, их перенос в новый блок и, наконец, стирание всего старого блока (медленная операция — миллисекунды).
Именно фоновая сборка мусора может вызывать периодические «провалы» в скорости записи, но она скрывает от пользователя основную часть задержки стирания.
Сравнение: «удаление» против «записи» с точки зрения системы
| Действие пользователя / системы | Что происходит на физическом уровне | Типичное время выполнения | Восприятие |
|---|---|---|---|
| Удаление файла | FTL помечает страницы как недействительные (логическая операция) | Микросекунды и менее | Мгновенно |
| Запись новых данных | Программирование (program) свободных страниц | Сотни микросекунд на страницу | Быстро |
| «Холодное» стирание блока (во время GC) | Туннелирование Фаулера-Нордхейма | Миллисекунды на блок | Скрыто от пользователя |
| Перезапись «на месте» (без FTL, худший случай) | Стирание всего блока -> запись всех страниц заново | Миллисекунды стирания + время записи | Очень медленно |
Итог:
Фундаментальное заблуждение возникает из-за смешения логической операции удаления (мгновенной) и физической операции стирания (медленной). На уровне кремния всё наоборот:
-
Физически запись (программирование) страницы происходит в 5–10 раз быстрее, чем стирание блока.
-
Стирание медленное потому, что использует более медленный физический механизм (туннелирование Фаулера-Нордхейма) и выполняется на уровне крупных блоков.
-
Современные накопители кажутся быстрыми при удалении благодаря интеллектуальному контроллеру (FTL), который откладывает физическое стирание и выполняет его в фоновом режиме, когда это необходимо.
Таким образом, если сравнивать «чистые» физические операции, запись во флеш-память действительно быстрее удаления (стирания). А кажущаяся мгновенность удаления — это заслуга программной прослойки, скрывающей от нас медленную физику.