Способ записи секторных данных в кэш-память
METHOD FOR WRITING SECTOR DATA TO CACHE MEMORY

Изобретение относится к компьютерной технике и может быть использовано в архитектуре твердотельных накопителей информации (ТНИ).
Из уровня техники известен способ управления памятью в вычислительном устройстве, описанный в патенте RU 2395115, опубл. 20.07.2010. Известный способ содержит этапы, в ходе которых обнаруживается, когда внешнее устройство памяти является доступным для использования вычислительным устройством, внешнее устройство памяти содержит множество внешних устройств памяти; назначает приоритеты секторам, которые будут размещены во множестве внешних устройств памяти, посредством заполнения выбранного внешнего устройства памяти из множества внешних устройств памяти копией сектора из запоминающего устройства с вращательным движением, сектора, имеющего возможность осуществления доступа, соответствующего предыстории использования сектора, и выбранное внешнее устройство памяти, имеет большую пропускную способность и меньшее время ожидания в сравнении с другими внешними устройствами памяти из множества внешних устройств памяти; и перенаправляет I/O запроса чтения от вычислительного устройства или приложения на данные, которые хранятся в упомянутом секторе, так, чтобы они считывались из выбранного внешнего устройства памяти прозрачно для вычислительного устройства или приложения.
Данный патент был принят за прототип. Его недостатком является отсутствие возможности предварительного хранения секторов перед их записью в основную память для уменьшения занимаемой памяти.
Техническим результатом является повышение эффективности использования ТНИ путем оперативного считывания секторных данных, хранящихся в контроллере ТНИ.
Заявленный результат обеспечивается тем, что предлагается способ записи секторных данных в кэш память твердотельного накопителя информации (ТНИ), в котором ТНИ содержит контроллер, в состав которого входят модуль управления секторным кэш и блочная память для хранения N секторов, при этом осуществляют сохранение секторных данных, предназначенных для хранения или перезаписи их в память ТНИ или для считывания их из памяти ТНИ, модулем управления секторным кэш в блочную память, а информация о секторе сохраняется в модуле управления секторным кэш.
Благодаря предложенному способу записи, контроллер обеспечивает быстрое считывает секторных данных, хранящихся в блочной памяти, не извлекая их из памяти ТНИ.
Далее будет подробно изложено заявленное изобретение.
В тексте настоящего изобретения используются следующие термины:
Страница — это единица информации флеш-памяти, то есть считывать и записывать информацию  на флеш-память можно только страницами. Страница состоит из секторов.
Сектор — это единица информации хоста.
Сектора, поступающие от хоста, в зависимости от частоты перезаписывания делятся на группы, называемые температурами.
BSA – адрес блока внутренней памяти.
Кэш (cashe) — область памяти, которая служит для буфера обмена, как правило имеет большую скорость, чем основная память.
Хост — центральный процессор, сервер или любое другое устройство, использующее ТНИ.
В качестве идентификатора сектора в файловой системе используется логический адрес сектора, это натуральное число, которое будем обозначать как LSA.
Единицей информации при обмене данными между контроллером устройства хранения данных и твердотельным накопителем информации (ТНИ) является блок информации фиксированного размера, называемый страницей.
Физический адрес страницы в ТНИ – это целое неотрицательное число, будем обозначать как PPA.
Каждая страница состоит из одинакового количества секторов, но какие-то секторы могут быть пустые, то есть не содержать данные.
Под сборкой мусора понимается процесс удаления данных страниц с ТНИ, сектора которой были перезаписаны.
Модуль, занимающийся сборкой мусора, называется сборщиком мусора.
Твердотельный накопитель информации содержит микросхемы памяти (flash памяти) и контроллер, управляющий процессом записи и чтения информации с данных микросхем.
В состав контроллера ТНИ входят две основные части: аппаратная и программная.
Программная часть состоит из детектора температур, определяющего температуры секторов, поступающих при записи от хоста, формирует страницы из секторов одной температуры, поддерживает таблицу соответствия (узел “FTL”) логических адресов секторов (LSA) и физических адресов страниц (PPA), на которых находятся соответствующие секторы.
Узлами аппаратной части (“Контроллер ТНИ”) являются:
• узел “Шифратор”, предназначенный для шифрования данных, идущих при записи сектора с хоста в процессор ТНИ, и дешифрования, идущих от процессора ТНИ к хосту при чтении сектора;
• узлы “Encoder” и “Decoder”, используемые для шифрования и дешифрования помехоустойчивым кодеком данных секторов;
• узел “Модуль управления заданиями к ТНИ”, управляющий процессом общения хоста и флеш- памяти;
• узлы “BRAM 1” и “BRAM 2” – блочная память, в которой хранятся данные записываемых, считанных секторов;
• узел “Модуль управления страничным кэш”, используемый для хранения информации о секторах, к которым идет частое обращение;
• узлы Conductor_to_memory и Conductor_from_memory, используемые для разъединения данных ширины 64 бит на 8 8-битных порций данных и наоборот.
Указанный модуль управления секторным кэш обеспечивает
- кэш-память для хранения N элементов, состоящих из логического адреса считанного сектора и информации о том, кому нужен считанный сектор – хосту и/или сборщику мусора;
- промежуточный буфер памяти для хранения информации о секторах, считанных с накопителя информации, перед отдачей ее хосту или отправкой на перезапись и используется как менеджер блочной памяти, используемой для хранения данных считанных секторов.
В контроллере ТНИ данные считываются с флеш-памяти (носитель данных) в 2 случаях:
1. хост отправил запрос чтения сектора;
2. сектор нужен сборщику мусора.
В первом случае после скачивания с флеш-памяти в процессор ТНИ данные сектора сначала закачиваются в блочную память (узел “BRAM 2”) и информация о секторе в модуль управления секторным кэш, а затем выдается хосту.
Во втором случае после скачивания с флеш-памяти в процессор ТНИ данные сектора сначала закачиваются в блочную память (узел “BRAM 2”) и информация о секторе в модуль управления секторным кэш, после этого из скачанных секторов формируется новая страница, которая обратно записывается во флеш-память.
При запросе чтения от хоста может оказаться, что считанный сектор уже отсутствует в флеш-памяти, так как находится внутри процессора ТНИ в модуле управления секторным кэш. Поэтому при запросе чтения от хоста сначала проверяется наличие логического адреса искомого сектора внутри процессора ТНИ: в модуле управления страничным кэш и модуле управления секторным кэш, и если такой сектор найден, то данные сектора считываются с BRAM 1 или соответственно из BRAM 2, и отправляются на расшифрование в Шифратор, а затем к хосту.
Общее описание модуля управления секторным кэш.
Секторный кэш содержит информацию обо всех секторах, считанных декодерами и содержащихся в текущий момент внутри ядра. В числе таких секторы, предназначенные для хоста, но пока им несчитанные. Также в их числе считанные секторы, предназначенные для перезаписи на твердотельный накопитель, но пока не успевшие образовать полные страницы.
Пусть под секторный кэш выделено N блоков, каждый из которых предназначен для сохранения одного сектора, т.е. в блочной памяти может быть сохранено N секторов. Тогда модуль управления секторным кэш содержит массив из N структур, которые будем называть элементами. Каждый элемент будет содержать информацию об одном блоке-секторе памяти. Элемент состоит из 3 полей: need_for_host – однобитное поле говорящее, что сектор хранит данные, предназначенные для передачи хосту; need_for_gc – однобитное поле, говорящее, что сектор считан сборщиком мусора и предназначен для перезаписи на ТНИ; lsa – логический адрес сектора, хранящегося в данном блоке. Если у элемента оба поля и need_for_host, и need_for_gc равны 1, то это значит, что данный блок нужен и хосту, исборщику мусора. Если у элемента оба поля и need_for_host, и need_for_gc равны 0, то это значит, что данный блок является свободным.
Когда декодеру поступает для декодирования новый сектор, он просит у модуля управления секторным кэш новый блок для сохранения данных и сообщает ему, кому нужен этот сектор. В ответ на это модуль управления секторным кэш, ориентируясь на поля need_for_host и need_for_gc, находит первый свободный блок и проставляет в соответствии с полученной информацией поля need_for_host и need_for_gc. Декодер начинает декодировать сектор; в первых четырех байтах декодированного слова находит логический адрес данного сектора и сообщает его модулю управления секторным кэш. Модуль управления секторным кэш записывает этот логический адрес в поле lsa элемента данного блока. В результате элемент, соответствующий данному блоку, оказывается полностью заполненным. В момент, когда сектор полностью передан хосту поле need_for_host элемента, соответствующего блока, устанавливается в 0. В момент, когда сектор, предназначенный для перезаписи на ТНИ, полностью передан ТНИ поле need_for_gc элемента, соответствующего блока, устанавливается в 0.
Сектора, предназначенные для перезаписи во флеш-память (ТНИ), но пока не успевшие образовать полные страницы, могут надолго задержаться внутри контроллера ТНИ, при этом их уже нет на самом ТНИ. Поэтому если придет запрос на чтение такого сектора, модуль управления секторным кэш по логическому адресу этого сектора находит блок с таким полем lsa и передает его контроллеру для пересылки хосту. При этом поле need_for_host этого элемента устанавливается в 1.
При инициализации модуля управления секторным кэш задаются следующие параметры:
1. lsa_width – ширина двоичного представления  максимального значения LSA;
2. capacity – максимальное количество секторов, которое одновременно может содержать кэш.
У модуля управления секторным кэш имеется ряд входных и выходных линий. Управление модуля управления секторным кэш осуществляется под воздействием сигналов на входных линиях, а результаты работы модуля отображаются в виде сигналов на выходных линиях узла.