Твердотельные накопители. Внутреннее устройство и принципы их построения

    Наши клиенты часто интересуются внутренним устройством твердотельных накопителей. Чем определяется надежность накопителей? Почему нельзя хранить важные данные на флешках, и бывают ли надежные флешки? Зачем в контроллеры SSD-накопителей ставят многоядерные процессоры? Почему флешки больших объемов пишут быстро, а малых объемов медленно? Многие вопросы требуют длительного погружения в тему, а некоторые отпадают сами собой после небольшого ликбеза по внутреннему устройству твердотельных накопителей, о том и пойдет речь.

    image

    USB-флеш-накопитель, карта памяти microSD/SD, SSD-накопитель представляют собой, на первый взгляд, разные устройства, хотя на самом деле являются «близкими родственниками». Все три типа устройств относятся к твердотельным накопителям на основе NAND флеш-памяти. Забавный факт, именуемые в быту «SSD-диски» не являются дисками в прямом смысле. Название «диск» исторически унаследовано от жестких магнитных дисков (Hard Disk Drive — HDD).

    Несмотря на разницу в применении, архитектура всех твердотельных накопителей в общем виде выглядит одинаково.

    В состав твердотельных накопителей входят:

    • Контроллер – основной элемент твердотельного накопителя, выполняющий функции чтения, записи, контроля целостности данных и исправления битовых ошибок, возникающих в структуре NAND флеш-памяти. С одной стороны, контроллер подключается к хосту через внешний интерфейс SATA / USB / SD / PCIe, с другой – к микросхемам NAND флеш-памяти через интерфейс подключения ONFI / Toggle
    • NAND флеш-память – массив микросхем, формирующих объем памяти накопителя

    image

    Для понимания задач, выполняемых контроллером, необходимо иметь базовые представления об организации NAND флеш-памяти. Микросхемы NAND флеш-памяти достаточно специфичны в использовании, начиная от интерфейса подключения и заканчивая достоверностью хранения информации.

    NAND флеш-память


    Микросхема NAND флеш-памяти – хранилище для информации пользователя (фотографии, фильмы, документы, системные файлы операционной системы и т.п.).

    Остановимся на вопросах интерфейса доступа к данным и актуальных для твердотельных накопителей проблемах сохранности информации в NAND флеш-памяти.

    Микросхему NAND флеш-памяти можно сравнить с архивом бумажных документов. Наподобие того, как бумаги хранятся в архиве, также электронные документы хранятся в памяти микросхем.

    image

    Важнейшими функциями любой системы хранения данных и архива являются:

    • Хранение данных — архив должен иметь условия, обеспечивающие сохранность бумаг
    • Доступ к информации — библиотекарь должен иметь возможность поработать с нужным документом, иначе архив бесполезен

    Условия хранения, обеспечивающие сохранность бумаг (температура, влажность, защита от грызунов), определяют целостность данных, а наличие входной двери, пролетов между полками обеспечивает доступ к бумагам. По аналогии можно сказать, что каждый бит данных во флеш-памяти хранится в виде заряда в плавающем затворе транзистора (ячейка). Для записи бита информации в ячейку программируется определенный уровень заряда.

    Однако система хранения данных во флеш-памяти имеет следующие особенности:

    1. Заряд с затвора способен «утекать» со временем, что рано или поздно приведет к изменению данных. Например, как чернила на архивных бумагах со временем выцветают или растекаются, превращаясь в неразборчивые пятна. Чем дольше хранятся данные, тем меньше вероятность их потом прочитать.
    2. После записи одними и теми же цепями одинакового логического уровня заряда в разные ячейки из-за технологического разброса параметров транзисторов появится вероятность прочитать оттуда разные по величине значения заряда. (Бумага может иметь разные свойства впитывания и растекания чернил. Мелкий текст, написанный фломастером, не на каждой бумаге удастся прочитать.)
    3. Цепи записи и чтения заряда также не идеальны и имеют технологический разброс уровней напряжения программирования и порогов чтения логических уровней. (Похоже на то, как на бумажных носителях разные библиотекари по-разному могут разобрать текст, записанный разными авторами, потому что почерк у всех разный.)

    image

    Целью технологии разработки микросхем памяти является создание флеш-памяти с максимальным соотношением «качество/цена». Для хранения данных в накопителях
    NAND флеш-память является весьма достойным решением по этому соотношению, о чем говорит рост рынка накопителей. Но соотношение «качество/цена» не то же самое, что «качество». От площади кристалла микросхемы прямым образом зависит стоимость микросхемы. Поэтому производители флеш-памяти постоянно стремятся увеличить плотность хранения данных в микросхемах памяти. Увеличение плотности ячеек памяти достигается за счет уменьшения размера самих ячеек, так и за счет объединения цепей записи и чтения зарядов ячеек. Причем, второе, в свою очередь, создаёт некоторые сложности в доступе к хранимым данным.

    Понятия интерфейса доступа и правила доступа к NAND флеш-памяти:

    • Блок. Весь объем микросхемы разбит на блоки. Объем блока составляет порядка единиц мегабайт. (Например, в архиве, это книга или блокнот в переплете с прошитыми листами)
    • Стирание блока. Блок может быть стёрт, при этом каждый бит информации в нем будет установлен в «1». Нельзя стереть только часть блока. (Например, книгу можно выкинуть, но нельзя вырвать из книги лист, не нарушив целостность книги)
    • Страница. Блок разделен на страницы размером порядка десятков килобайт. (Например, книги и блокноты тоже имеют страницы)
    • Программирование страницы. В NAND флеш-память могут быть записаны (запрограммированы) одновременно данные всей страницы, биты устанавливаются при программировании в значения «0» или «1». (Например, чистые страницы книги или блокнота можно заполнить информацией только единожды)
    • Порядок программирования страниц. Страницы в пределах блока должны программироваться строго в порядке возрастания их номеров. (Например, последовательная запись информации в книгу или блокнот)
    • Порядок перезаписи. Каждая страница может быть запрограммирована только один раз. Для повторного программирования страницы необходимо стереть полностью блок. (Например, если в уже готовом издании книги необходимо заменить страницу, то придется перепечатать всю книгу и заново сделать переплет)

    Перечисленные выше особенности NAND флеш-памяти выглядят довольно безобидно, на первый взгляд, но множество вопросов возникает при первой же попытке перезаписать часть данных (например, один сектор). Задачи записи и чтения непосредственно NAND флеш-памяти решает контроллер.

    Контроллер


    Контроллер обеспечивает подключение к хосту, и, собственно, представляется накопителем. В общем виде архитектура любого контроллера любого накопителя выглядит типично: имеются аппаратные блоки интерфейсов для обмена данными с хостом (EXT_IF) и NAND-памятью (FLASH_IF). Между блоками интерфейсов в обязательном порядке присутствует буферная оперативная память (MEM_BUF), предназначенная для оперативного кэширования данных и сглаживания потока записи/чтения данных. В контроллерах USB-накопителей буферная память составляет десятки килобайт и размещается непосредственно в самом контроллере. В высокопроизводительных системах, таких как SSD-накопители, используются внешние микросхемы памяти. Данные между интерфейсными блоками и буферной памятью передаются без непосредственного участия процессора по каналам прямого доступа к памяти (DMA, direct memory access). Участие процессора в передаче данных заключается в настройке каналов DMA и синхронизации работы блоков.

    image

    Любой из подключаемых накопителей является «блочным устройством». Блочное устройство – это устройство, в котором данные хранятся в виде последовательной цепочки логических блоков, обращение к которым возможно по адресу Logical Block Address (LBA). Большинство устройств поддерживает размер блока в 512 байт, который называется «сектор». Сектор является минимальной дискретной информацией, которая может быть перезаписана на блочном устройстве. То есть для замены одного байта хост должен передать целиком сектор на устройство хранения.

    Для программистов, работающих с накопителями на физическом уровне (запись/чтение по физическим адресам), вполне очевидно, что запись и чтение одного сектора не должны затрагивать ни коим образом данные других секторов. Также это очевидно для пользователя блочного устройства, но NAND флеш-память, как было сказано ранее, не предоставляет такой возможности. Для того, чтобы заменить один сектор в массиве памяти NAND, необходимо перезаписать весь блок NAND флеш-памяти, размер которого составляет мегабайты. Такой метод решения задачи крайне неэффективен, так как приводит к недопустимому снижению скорости записи в NAND флеш-память относительно ее потенциальных возможностей. К тому же так как операционная система часто пишет в одни и те же адреса устройства (например, записи FAT), то блоки NAND флеш-памяти быстро придут в негодность из-за ограниченного ресурса на стирание. Чтобы увеличить скорость записи/чтения данных и продлить срок службы NAND флеш-памяти, применяются более хитрые методы адресации, переводящие логические адреса (LBA) накопителя в физические адреса NAND флеш-памяти. Алгоритм трансляции адресов NAND флеш-памяти в зарубежной литературе называется Flash Translation Layer (FTL). Если посмотреть описание контроллеров SSD (например, компании Marvell), то можно увидеть, что в состав контроллера входит до 4 процессорных ядер. Такая высокопроизводительная система в SSD необходима в первую очередь для расчета адресов трансляции.

    FTL, логическая и физическая адресация


    Не существует единого универсального алгоритма FTL, удовлетворяющего все запросы пользователя, в которые входят:

    • скорость записи/чтения данных по последовательным адресам
    • скорость записи/чтения данных по случайным адресам
    • срок службы накопителя
    • надежность хранения данных
    • объем и тип применяемой памяти

    Алгоритмы FTL могут отличаться как для разных типов накопителей (SD/USB/SSD), так и для одного типа. Например, существует разделение SSD по назначению: для серверов, для кэширования в персональном компьютере (ПК), для ноутбуков, для настольных ПК. При этом для каждого применения существуют свои приоритеты в требованиях и свои варианты реализации FTL. Каждый вариант FTL представляет собой компромисс параметров с учетом приоритетов конкретного применения накопителя.

    Суть FTL – преобразование логических адресов устройства в физичеcкие адреса NAND флеш-памяти.

    image

    Каждому логическому LBA ставится область памяти в NAND. Это называется Logical Unit Number Table (LUN table). Для перезаписи логического блока стираются данные свободного физического блока, после чего происходит замена в LUN table, что создает для пользователя видимость перезаписи. От того, какого размера выбираются логические блоки, зависит размер LUN table (не во всех устройствах целесообразно иметь большие объемы памяти). Существуют два принципиально разных подхода в реализации FTL: блочная адресация и страничная адресация.

    Блочная адресация


    В блочной адресации размер логического блока соответствует размеру физического блока. В свою очередь в массиве LUN table с индексом, равным адресу логического блока, указывается значение, соответствующее адресу физического блока. Для изменения части блока необходимо переписать весь блок целиком.

    Преимуществом блочной адресации является малый размер LUN table, что актуально для устройств с малым объемом оперативной памяти, таких как USB-флеш-накопитель или карта памяти microSD. Недостатком является то, что размер блока довольно большой (порядка мегабайтов), и для перезаписи малых объемов данных (например, 512 байт) приходится переписывать весь блок.

    Страничная адресация


    В страничной адресации в LUN table сохраняются адреса физических страниц. Размер логического блока при этом составляет порядка десятков килобайт.

    Преимуществом страничной адресации является высокая скорость перезаписи данных, как последовательно, так и в случайном порядке. Недостатком является большой размер LUN table. Поэтому в состав большинства SSD входит микросхема оперативной памяти, объемом более 100 Мбайт.

    На практике в основном применяются гибридные алгоритмы, сочетающие в себе оба варианта адресации. Например, в компактных накопителях (USB-флеш-накопитель, карта памяти SD) основная часть объема адресуется блочным методом, в то время, как часть объема, к которой часто производится обращение, адресуется постранично.



    Такова структура и принципы работы накопителей на NAND флеш-памяти. О методах адресации FTL написано большое количество научных статьей и запатентовано множество решений. Производители контроллеров непрерывно работают над совершенствованием ПО даже после выхода продукта на рынок. В целом, программное обеспечение является неотъемлемой частью контроллера, и его описание заслуживает отдельной статьи.

    Комментарии 22

      +1
      Спасибо за статью. Она хороша еще и тем, чтобы задать простой вопрос: флэш-память широко выпускается аж с конца прошлого века, решения описанных и столь же давно известных проблем уже даже запатентованы, но ни одна попытка разработки специальной файловой системы не была успешна, хотя даже смартфоны, а не только фотоаппараты своим количеством давно превзошли ПК и серверы.
      Да, есть\была какая-то система, которую аргументировано разгромили в журнале Хакер — ссылку искать лень.
      Так и что: легаси будет продолжать изнашивать FAT и пр. отрыжки прошлого?
      Про ex-FAT наслышан, но это даже не смешно.
        0
        Контроллёр также выполняет wear leveling — выравнивание износа, так что за FAT сектора не надо беспокоиться. Это верно для всех memory technology device (USB флешки, SD карты). 4 ядра скорее для (де)шифрования.
          0

          F2FS?

          0
          Много их: jffs, yaffs, logfs, ubifs. Но это все не для ssd. Это для всяких embedded, где нет контроллера с трансляцией адресов, а есть прямая адресация блоков NAND памяти.
            0
            Спасибо за комментарий.
            С приходом твердотельников проблема «изнашивания» памяти файловой системой если не утратила актуальность совсем, то уж точно не стоит остро так, как это было на дискетах. На магнитных дисках логические адреса (LBA) были тождественны физическим адресам. То есть, делая частые записи в FAT мы буквально «протирали до дыр» магнитный слой диска. В твердотельниках логическим адресам ставится соответствие физическим через LUN-table, запись в которой меняется каждый раз при записи в логический адрес. Таким образом, даже если вы будете перезаписывать многократно один и тот же LBA, данные будут писаться в разные физические адреса NAND-памяти, и вы не «протрете дырку» по какому-то конкретному адресу. Кроме того, как верно заметил Afterk, в твердотльных накопителях применяется алгоритм WearLeveling, который следит за тем, чтобы весь объем памяти изнашивался равномерно и прямолинейно.
            0
            Ваши контроллеры SSD для широкого рынка уже доступны?
              0
              Мы планируем начать поставки контроллеров с интерфейсом SATA 6Gb/s (с встроенным программным обеспечением нашей разработки) в первом квартале 2021 года.
                0
                Вот это очень круто конечно. И интересно. Где можно узнать подробности?
                  0
                  А какие именно подробности вас интересуют?
                    0
                    >>Мы планируем начать поставки контроллеров с интерфейсом SATA 6Gb/s (с встроенным программным обеспечением нашей разработки) в первом квартале 2021 года.

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

                    Также хотелось бы узнать больше об упомянутых на вашем сайте носителях информации. На какую «глубину» они вашего производства? Только сборка? Корпусировка? Дизайн контроллера и разработка прошивок?

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

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

                    О том, чем именно наши знания могут быть полезны, готов рассказать при личном общении. Отправил вам в личку контактную информацию.
                      +1
                      Мы делаем контроллеры, входящие в итоге в состав SSD. Мы их полностью разработали: архитектуру, схемотехнику (RTL), топологию кристалла, чертежи для корпусировки и так далее. ВПО (да, это прошивка) соответственно тоже полностью наше, включая алгоритмы.

                      В картах памяти microSD контроллер и firmware нашей разработки, сам накопитель тоже нашей разработки, но изготавливаем на стороннем производстве (российском).

                      В USB и SSD также всё нашей разработки, причём их мы можем и производить у себя (а можем помочь поставить на производство другим).
                        0
                        Неожиданно, и потрясно. Порадовали.
                        А с GS Nanotech знакомы? Не планируется использование ваших контроллеров в их продукции?
                        Что получается по цене? Есть ли шансы, например, при введениии государством каких-то протекционистских мер разумных, конкурировать по ценам с зарубежными производителями?
                          0
                          Надеемся получится радовать и дальше.
                          С GS Nanotech знакомы. Остальное, боюсь, уже заходит на территорию коммерческой тайны.
                  0
                  Не получится так, что потребитель контроллеров будет конкурировать с вашей продукций — дисками SSD вашего производства?
                    0
                    Что касается SSD нашего производства, то мы планируем сконцентрироваться на крупных корпоративных клиентах и задачах, требующих наличия исходных кодов ВПО (например, реализация дополнительных функций). Соответственно, остается достаточно обширное поле для партнерства с другими производителями.
                      0
                      достаточно обширное поле

                      Это поле уже занято международными вендорами, а вот крупные и не очень корпоративные клиенты, требующие наличия исходных кодов ВПО (например, реализация дополнительных функций) были бы, наверное, интересны местным разработчикам электроники. Не боитесь повторения судьбы МЦСТ, которые выстроили вертикально интегрированную компанию, но без экосистемы?
                        0
                        интересны местным разработчикам электроники
                        В этом плане мы также открыты к сотрудничеству: мы понимаем, что кто-то не захочет делиться идеей функционала, у кого-то могут быть готовые наработки и так далее — на монополизм на этом рынке мы не претендуем, хотя формат сотрудничества в данном случае и потребует более сложных договоренностей.
                        У МЦСТ всё-таки более требовательные к экосистеме продукты — замена SSD зарубежного вендора на отечественный не требует ничего кроме физического осуществления операции, думаю мало пользователей знают чей диск у них стоит.
                0
                1. Господа, правильно ли я понимаю, что утечка заряда напрямую зависит от технорм и типа NAND (SLC, MLC, 3D и пр.)? Т.е. можно ли говорить, что обесточенный диск SLC сохранит данные дольше, чем MLC и тем более TLC?
                2. Контроллер сообразит при включении, что данные, условно говоря, лежали месяц на полке и пора их освежить?
                  0
                  1. Да, все верно. А еще процесс разложения зависит от температуры. Твердотельные накопители лучше хранить в «сухом прохладном месте»)
                  2. Зависит от контроллера/накопителя и его программного обеспечения. В бытовых накопителях — вряд ли.
                  0
                  В NAND флеш-память могут быть записаны (запрограммированы) одновременно данные всей страницы, биты устанавливаются при программировании в значения «0» или «1».

                  вообще то биты могут быть установлены только в «0», именно для этого сначала делают стирание, которое ставит все в «1».
                  А если еще точнее, то никаких «0» и «1» там вообще нет, а есть уровни (различные значения) напряжения. Причем для SLC этих уровней только два, для MLC их уже 4, для TLC — 8, для QLC — 16.
                    0
                    Да, конечно, вы правы. На физическом уровне дело обстоит именно так. В статье упростили, чтобы не углубляться во внутреннее строение разных типов памяти.
                    Кстати, в том числе и поэтому надежность хранения данных на SLС выше — утечка заряда менее критична для распознавания уровня.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое