Ячейки памяти в SSD. Как работают, почему ломаются? SLC, MLC, TLC, QLC

Для данной статьи существует видоеверсия с большим количеством анимаций, рекомендую к просмотру именно её, вместо текстовой версии:

Принципы работы ячеек памяти, определение носителя информации, принципы считывания состояния ячейки памяти

Каждая ячейка памяти — это полевой транзистор с изолированным затвором, но не простой, а хитрый. Со сдвоенным затвором. Если кто не в курсе общая суть полевого транзистора заключается в следующем:

У нас есть исток и сток, проще говоря вход и выход, и между ними область через которую может проходить заряд от стока к истоку, и есть ещё одна отделённая область от этих структур диэлектриком, которая называется — затвор. И если подать заряд на затвор, то затвор своим электромагнитным полем начинает влиять на легированную часть транзистора между стоком и истоком и этим перекрывает возможность протекания тока между ними.

Бывают конструкции наоборот, что если не подавать заряд на затвор, то ток от стока к истоку не идёт, а если подавать — то идёт. Но общая суть — это то, что затвор — это типа ручки у крана. Когда хочешь открываешь, когда хочешь закрываешь. Ну либо замок у ворот, собственно термин «затвор» как бы и намекает, что мы им можем затворять или отворять ток между стоком и истоком. Наиболее классический вариант для ячеек памяти — это когда без подачи питания на затвор — между стоком и истоком ток не идёт, а при питании плюсом на затвор — ток — идёт. Очень удобно в части управления, но как этим сохранять информацию — не понятно. И для того чтобы сохранять информацию была придумана модификация с двумя затворами. Первый, грубо говоря, внешний. Простой обыкновенный, а второй — внутренний, хитрый, называемый «плавающим». А хитрость его в том, что он со всех сторон окружён изолятором.

То есть если поместить в него какой-то заряд, то этот заряд сам никуда не денется. И тут начинается самое интересное. Предположим, что заряда на плавающем затворе — нет. В таком случае — транзистор работает ровно так же, как и в случае когда второго затвора не было вообще. То есть не подаём заряд на затвор ток не идёт — подаём — ток идёт. Но если в плавающий затвор подать отрицательный заряд, то логика работы меняется. Если не подавать заряд на обычный затвор, то ток идти не будет, но если падать положительный заряд, то этот заряд будет компенсирован отрицательным зарядом плавающего затвора и в сумме они не дадут необходимого заряда чтобы ток через транзистор пошёл. То есть в случае активации транзистора ток через него всё равно не идёт. Иными словами — в случае подачи положительного заряда, если на плавающем ничего нет, то транзистор будет открыт, а если заряд есть — то транзистор будет закрыт. А теперь вспоминаем, что заряд в плавающем затворе никуда не девается, в том числе и в моменты когда питание на весь накопитель не подаётся вообще. То есть в любой момент времени мы можем по поведению тока сток исток понять есть ли заряд в нашем хитром затворе или нет. То есть прочитать заранее сохранённое состояние нашего транзистора, который стал уже вовсе и не транзистором, а ячейкой памяти.

Запись данных в ячейку памяти и причины ограниченности ресурса работы SSD

С запоминанием информации в целом понятно. С тем как понять что записано надеюсь тоже понятно. Остаётся понять только то, как осуществляется зарядка и разрядка плавающего изолированного затвора. То есть изменение состояния самой ячейки памяти. Иными словами — запись и стирание данных. И тут всё в общем-то не так сложно. Общая суть в том, что если приложить достаточное напряжение — то электроны могут пройти через диэлектрик, в нашем случае диоксид кремния.

При подаче высокого напряжения на Затвор и Сток электроны вынужденно проходят в область плавающего затвора

И имея вокруг нашего хитрого затвора достаточную разность потенциалов можно в него насильно впихнуть электроны, или наоборот высосать из него электроны, тем самым придав ему некий заряд, который сам по себе, без этих повышенных напряжений, никуда уже не денется долгие годы. Собственно таким образом и производится запись в ячейки памяти.

Подача отрицательного заряда на затвор «выталкивает» электроны из плавающего затвора и они притягиваются на исток

Проблема только в том, что эти насильственные действия над транзистором на повышенном напряжении разрушают диоксид кремния вокруг затвора раз за разом при каждом прохождении через него заряда.

Что ведёт к деградации свойств, и в конечном итоге к выходу ячейки памяти из строя. То есть при многократном воздействии на изолированный плавающий затвор для изменения его заряда — разрушается транзистор. То есть для транзистора существует предельное количество циклов изменения состояния этого затвора перед тем как ячейка памяти перестанет работать должным образом. Естественно разработчики накопителей в курсе проблемы, это всё учитывается в создаваемых контроллеров памяти, которые стремятся равномерно производить износ всего накопителя, вводятся резервные области для замены вышедших из строя ячеек, есть и другие софтовые оптимизации уже и на уровне операционных систем позволяющие максимально редко производить ненужные перезаписи.

Многобитные ячейки памяти. MLC, TLC, QLC. Принципы работы и отличия от однобитных. Причины падения скорости от увеличения битности.

С точки зрения работы транзистора наш дополнительный затвор позволяет сдвигать сток затворную характеристику. И кардинальное наличие заряда в плавающем затворе сдвигает эту характеристику так далеко, что рабочие напряжения для транзистора его не открывают.

Отрицательные заряды сильно смещают напряжение Затвор-исток при котором начинает идти ток сток-исток

И в показанной схеме у нас есть некий широкий диапазон напряжений на затворе который нам позволяет понять что записано условно 0 или 1. То есть мы сохраняем 1 бит информации.

И описанный метод записи и чтения — полностью цифровой. То есть транзистор либо проводит ток, либо — нет, и это мы можем интерпретировать условно в то, что записан условно 0 или 1.

И так работает SLC память, SLC расшифровывается как «Single-Level Cells», то есть одноуровневая ячейка. Величины зарядов, напряжения и прочее параметры плавающего затвора — не имеют особого значения значения, как-то произведена перезарядка затвора, как-то проводит транзистор и в целом это всё надёжно и просто работает. Однако при разных градациях зарядов на плавающем затворе — напряжения на которых начинает открываться транзистор разные. И если фиксировать не только факт проводимости транзистора, а характеристику проводимости — то можно более точно и контролируемо заряжая плавающий затвор получить больше информации при записи в одну ячейку.

Набор стоко-затворных характеристик для разного уровня заряда плавающего затвора

И это уже не цифровая запись, а аналоговая, то есть если мы зарядили чуть-чуть плавающий затвор, то и сместили мы характеристику чуть-чуть и у нас транзистор открывается если подать на затвор напряжение чуть выше чем минимально нужное, если зарядить плавающий затвор чуть сильнее, то и открыть транзистор будет ещё сложнее и т.д. В теории можно допустить бесконечное количество градаций уровней записей. Сейчас наверное некоторые из вас в шоке, но ячейки памяти в  MLC, TLC и QLC SSD накопителях — это аналоговые носители информации, а не цифровые. Потому что именно таким образом и производиться запись многобитных ячеек памяти. Ячейка всё равно может сохранить только одно состояние записи, но если для однобитных ячеек записью было наличие или отсутствие заряда на плавающем затворе, то в многобитных ячейках под записью понимается не факт наличия или отсутствия заряда — а величина заряда. И уже эта величина при чтении должна быть оцифрована таким образом, чтобы это можно было записать в более чем один бит информации. И при оцифровывании любого аналогового сигнала емкость его данных в цифровом виде зависит от получаемой дискретности уровней распознавания сигнала. То есть чем больше градаций сигнала можно распознать, тем выше ёмкость данных аналогового сигнала. В текущий момент дискретизация сигнала производиться не очень сильная. Для двух битов данных нужно распознать 4 уровня величины сохранённого заряда,

для трёх бит нужно распознать 8 уровней величины заряда,

и для 4-х бит нужно распознавать до 16 уровней заряда.

И распознование производиться по смещению характеристики открытия транзистора. Грубо говоря, если у нас разбит весь диапазон тестирования открытия транзистора на 16 диапазонов, то надо по очереди тестировать каждое напряжение на затвор и зная при каком из них у нас в достаточной степени открылся транзистор — такой уровень и считать записанным в этом транзисторе. И просто каждой градации этих напряжений даются порядковые номера которые и есть цифровая интерпретация уровня заряда плавающего затвора. И для 16 градаций или для QLC памяти — это 4 бита. Некоторые компании грозятся сейчас выпустить 5 битные ячейки.

Как вы понимаете именно по технике разницы с 4-х битными не будет, но градаций будет уже не 16, а 32. То есть надо очень точно попадать в нужный диапазон заряда при наполнении плавающего затвора, и гораздо сложнее становится процесс считывания сигнала, вернее процесс оцифровки уровня заряда плавающего затвора. Естественно при этом снижается скорость работы с памятью. Кроме того — напомню, что процесс наполнения затвора зарядом — это аварийный для транзистора режим работы, и этот аварийный режим надо ещё очень точно контролировать, чтобы действительно был помещён нужный заряд, а не чуть больше или чуть меньше, потому что если заряд не попал в строгие рамки, то при его интерпритации он может дать другие цифровые значения. И, естественно, чем больше градаций — тем сложнее попасть в нужный диапазон. И в многобитных ячейках — неверная запись не является чем-то очень редким, поэтому для записи всегда требуется контроль на ошибки, что отнимает время, снижая скорость работы, вдобавок в случае ошибочной записи требуется перезапись ячеек в странице в которой была произведена ошибочная запись, что, как вы понимаете, ещё и снижает ресурс.

Причины снижения ресурса работы накопителей, запись накопителей с уплотнением данных.

Но не только этим снижается ресурс записи на многобитных ячейках. Как вы могли понять из теории — аппаратных различий для MLC, TLC или QLC памяти — нет. Меняется только процесс интерпретации записи, который задаётся программно. Иными словами если контроллер накопителя это позволяет, то QLC можно записывать в более простых для записи TLC, MLC или SLC режимах. Что сейчас активно и делается, хотя не на всех накопителях, но если пару лет назад было редкость — перезапись накопителей с уплотнением, то сейчас редкость когда такого не происходит. Работу уплотнения записи отлично было видно в тестах накопителей, когда при полной последовательной записи скорость падала в несколько градаций.

Пример «Ступенчатой» скорости записи, когда она падает градациями несколько раз

Разберёмся в том, что при этом происходило с накопителем.

Вначале накопитель занимал весь свой объём записывая всё в однобитном режиме. То есть абы какой заряд уже абы как смещает стоко-затворную характеристику, но этого достаточно чтобы записать один бит на ячейку. И в таком режиме весь объём ячеек быстро заканчивается. По данным о диске он ещё записан совсем чуть-чуть, но на самом деле он полностью забит данными. И для дальнейшего записывания накопитель начинает уплотнять запись. Но происходит это исключительно перезаписыванием. То есть надо во временное место скопировать данные страницы, далее затереть записанные данные, то есть вытащить из плавающих затворов заряды, дальше взять новый кусок информации, собрать его со старым куском информации и записать в те же ячейки, но уже не абы как, а, допустим, в MLC режиме, то есть с 4-мя градациями уровней заряда плавающих затворов. Далее накопитель так же заполняется полностью уже в режиме MLC. Если надо продолжить запись, а в MLC режиме место опять закончилось, то процесс уплотнения, то есть перезаписи в более плотном формате производиться уже в TLC режиме. Далее ещё может быть произведена запись в QLC режиме. Подобный механизм работает и в случае если вам хватило места до уплотнения. Как только вы перестаёте заполнять накопитель он автоматически начинает уплотнять запись, чтобы в случае необходимости он мог опять кратковременно вести запись в однобитном режиме используя свободный остаток. Хотя ещё раз напомню, что не все накопители так делают. В некоторых выделен фиксированный объём для быстрой записи и дальше накопитель заполняется уже с финальной плотностью.

Естественно такое огромное количество травмирующих ячейки перезаписей а также перезаписей из-за ошибок — крайне негативно сказывается на долговечности работы ячеек. Кроме того при большей плотности записи для изменения одного и того же объёма данных записанных случайным образом потребуется перезаписать больше страниц накопителя. Иными словами — ресурс накопителей от увеличения плотности резко падает и, в общем-то, причин на это аж несколько.

Надеюсь теперь полученные знания сделают для вас тесты накопителей увлекательнее.

Видео на YouTube канале "Этот компьютер"

2 Comments on “Ячейки памяти в SSD. Как работают, почему ломаются? SLC, MLC, TLC, QLC”

  1. Прив!
    Четкая статья. А ты не шаришь за вот эти всякие новые штуки по типу PCRAM или лазерной памяти? Было бы круто почитать про них понятным языком. Я как понял там дошли до 50 градаций на ячейку и это при большем чем у mlc ресурсе. Но не уверен что правильно интерпретировал всё

  2. Добрый день! Есть вопрос о перезаписи с уплотнением. Есть ли смысл разбивать ssd на логические диски? Ведь по логике вещей, если создать 2 тома, первый 20% а второй 80% тогда первый том будет работать в быстром slc режиме? Или это всё до первой «аппаратной дефрагментации» когда контроллер сам всё перепишет как хочет? И есть ли вообще какие то способы это настроить? На практике было бы удобно выделить быструю slc область например для системы, а всё остальное уже распределить по степени важности самостоятельно. Есть ли такая возможность? И смысл. Спасибо!)

Добавить комментарий