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

Изобретение относится к компьютерной технике и может быть использовано в архитектуре твердотельных накопителях информации (ТНИ) для получения быстрого доступа к часто используемым данным.
Из уровня техники известен способ управления памятью в вычислительном устройстве, описанный в патенте RU 2395115, опубл. 20.07.2010. Известный способ содержит этапы, в ходе которых обнаруживается, когда внешнее устройство памяти является доступным для использования вычислительным устройством, внешнее устройство памяти содержит множество внешних устройств памяти; назначает приоритеты секторам, которые будут размещены во множестве внешних устройств памяти, посредством заполнения выбранного внешнего устройства памяти из множества внешних устройств памяти копией сектора из запоминающего устройства с вращательным движением, сектора, имеющего возможность осуществления доступа, соответствующего предыстории использования сектора, и выбранное внешнее устройство памяти, имеет большую пропускную способность и меньшее время ожидания в сравнении с другими внешними устройствами памяти из множества внешних устройств памяти; и перенаправляет I/O запроса чтения от вычислительного устройства или приложения на данные, которые хранятся в упомянутом секторе, так, чтобы они считывались из выбранного внешнего устройства памяти прозрачно для вычислительного устройства или приложения.
Данный патент был принят за прототип. Его недостатком является отсутствие возможности записи часто используемых данных в память контроллера ТНИ для более быстрого доступа к ним.
Техническим результатом является увеличения производительности работы компьютера  путем оперативного доступа к часто используемым данным.
Заявленный результат обеспечивается тем, что предлагается способ записи страничных данных в кэш память твердотельного накопителя информации (ТНИ), содержащий этапы, на которых обеспечивают контроллер ТНИ кэш-памятью для хранения P страниц по S секторов, для каждого сектора, направленного на хранении в ТНИ, создают логический адрес сектора (LSA) и адрес блока внутренней памяти (BSA), где хранятся данные сектора, если кэш-память не заполнена, то при добавлении новой страницы берут BSA сектора (P – 1)-й страницы кэш и данные этой добавляемой страницы записывают в кэш-память по адресам BSA, индекс (P – 1)-й страницы кэш обнуляют, а индексы элементов кэш с предыдущими индексами от 0 до P – 2 увеличивают на единицу,  если кэш-память заполнена, то при добавлении новой страницы, прекращают хранение LSA секторов (P – 1)-го страницы и на это место записывают новые данные, при этом при поступлении обновленных данных секторов, содержащихся в кэш-памяти контроллера, они перезаписываются только в кэш-памяти контроллера.
Благодаря предложенному способу, записи страничных данных происходит не только быстрый доступ к страничным данным кэша, поскольку они хранятся не в самой памяти ТНИ, а в кэш-памяти контроллера ТНИ, но также осуществляется обновление этих данных без записи в память ТНИ до тех пор, пока эти данные активно используются хостом (их температура (показатель частоты использования данных) является горячей).
Далее будет подробно описано заявленное изобретение.
В тексте настоящей заявки используются следующие термины:
Страница — это единица информации флеш-памяти, то есть считывать и записывать информацию  на флеш-память можно только страницами. Страница состоит из секторов.
Сектор — это единица информации хоста.
Сектора, поступающие от хоста, в зависимости от частоты перезаписывания делятся на группы, называемые температурами.
PPA – физический адрес странице во флеш-памяти.
LSA – логический адрес сектора.
BSA – адрес блока внутренней памяти.
Кэш (cashe) – область памяти, которая служит для буфера обмена, как правило имеет большую скорость, чем основная память.
Хост – центральный процессор, сервер или любое другое устройство, использующее ТНИ.
Твердотельный накопитель информации содержит микросхемы памяти (flash памяти) и контроллер, управляющий процессом записи и чтения информации с данных микросхем.
Контроллер ТНИ состоит из 2 частей: аппаратной и программной.
Аппаратная часть предназначена для шифрования, кодирования данных с помощью входящих в него кодеров и декодеров, управления процессами общения с flash памятью и хостом.
Программная часть определяет температуры секторов, поступающих от хоста, формирует из секторов страницы, формирует и поддерживает таблицу соответствия логических адресов секторов (LSA) и физических адресов страницы (PPA).
Часть секторов, предназначенных для записи сохраняется в зашифрованном виде внутри аппаратной части (процессоре ТНИ) в так называемом модуле управления страничным кэш, организованном в виде очереди. Это делается для того, чтобы горячие по температуре данные, которые очень часто перезаписываются, перезаписывались прямо в процессоре ТНИ без переноса информации на ТНИ. При этом если сектор, который хочет записать хост, обнаруживается в страничном кэш, то страница с этим сектором переносится в конец очереди, что позволяет прожить сектору внутри процессора ТНИ дольше, поскольку сектор оказался горячим.
Процесс записи сектора от хоста. Когда у хоста появляется запрос на запись сектора, то в FTL (таблица соответствия) проверяется, находится ли сектор внутри процессора ТНИ.
Если сектор внутри процессора ТНИ, то подается запрос поиска на запись LSA сектора в модуль управления страничным кэш. Если LSA в модуле управления страничным кэш найден, то им возвращается BSA, соответствующий этому LSA, и в BRAM по этому адресу пишутся данные сектора.
Если сектор не находится внутри модуля управления страничным кэш, то в тот момент, когда будет сформирована страница из секторов одной температуры и свободен Шифратор, то данные секторов страницы после прохождения узла Шифратор записываются в BRAM по адресам, взятым из головы страничного кэш, и в страничный кэш добавляется элемент, соответствующий записанной странице, LSA страницы передаются хостом, BSA берутся из головы страничного кэш.
В тот момент, когда освобождается один из декодеров, и в модуле управления страничным кэш имеются видимые страницы, то из страничного кэш извлекается информация о странице для записи, формируется задание в модуле управления заданиями к ТНИ на запись страницы во flash память.
Процесс чтения сектора хостом выполняется следующим образом: когда у хоста появляется запрос на чтение сектора, то в FTL проверяется, находится ли сектор внутри процессора ТНИ.
Если сектор внутри процессора ТНИ, то подается запрос поиска на чтение LSA сектора в модуль управления страничным кэш. Если LSA в модуле управления страничном кэш найден, то кэш возвращает BSA, соответствующий этому LSA, и из BRAM по этому адресу в момент, когда освобождается Шифратор, считываются данные для расшифровывания.
Если сектора внутри модуля управления страничным кэш нет, то формируется задание на чтение в модуле управления заданиями к ТНИ.
Общее описание модуля управления страничным кэш.
В модуле управления страничным кэш не хранятся данные секторов записываемой страницы. Эти данные хранятся в блочной внутренней памяти (BRAM) процессора ТНИ. В модуле управления страничным кэш для каждой страницы хранится  температура и информация по её секторам в виде пар [LSA, BSA], где LSA – логический адрес сектора, BSA – адрес блока внутренней памяти, где хранятся данные этого сектора.
Если модуль управления страничным кэш предназначен для хранения P страниц по S секторов (пронумерованы страницы от 0 до P–1), то в любой момент во всех P ∙ S секторах страничного кэш лежат уникальные BSA, задаваемые в момент инициализации модуля управления страничного кэш.
Если страничный кэш не полон, то при добавлении новой страницы в кэш берутся BSA секторов (P–1)-й страницы кэш, и данные этой добавляемой страницы пишутся в блоки внутренней памяти по адресам BSA. Элемент кэш [LSA секторов добавляемой страницы, BSA (P–1)й страницы] становится 0-м элементом кэш, а элементы кэш с предыдущими индексами 0,.., P–2 сдвигаются вправо, на 1.
Если же кэш полон, то при добавлении новой страницы, происходит то же самое, с тем лишь исключением, что забываются LSA секторов (P–1)-го элемента кэш. Таким образом, кэш осуществляет перераспределение внутренней блочной памяти при записи страниц с целью хранения их данных, пока страницы находятся в кэш.
К секторам с какими-то логическими адресами обращение идет чаще, чем к другим, поэтому такие сектора необходимо дольше удерживать внутри процессора ТНИ и не пускать на запись во flash память, чтобы быстрее обрабатывать часто приходящие запросы для таких секторов. С целью удержания таких востребованных («горячих») секторов в кэш реализована обработка запроса поиска на запись сектора в кэш. При запросе поиска на запись в кэш передается LSA сектора, который ищется, и по результатам поиска выполняются следующие шаги:
I. Если такой сектор в кэш есть, тогда:
1. страница, содержащая этот сектор, становится 0-м элементом кэш, а все остальные элементы кэш с индексами меньшими, чем тот, что содержал сектор из запроса, сдвигаются вправо на 1;
2. возвращается BSA, соответствующий сектору из запроса. Тогда по этому адресу пишутся новые данные сектора с LSA из запроса.
II. Если сектора с таким LSA нет в кэш, тогда содержимое кэш не меняется, а возвращается результат, что сектор не найден.
Если поступает запрос на чтение сектора, то это может оказаться горячий сектор, который ещё хранится в кэш и ещё не попал во флеш-память. Поэтому в кэш реализована обработка запроса поиска на чтение. При запросе поиска на чтение в кэш подается LSA сектора, который ищется, и по результатам поиска выполняются следующие шаги:
I. Если такой сектор в кэш есть, тогда BSA, соответствующий этому LSA, возвращается, и уже далее данные читаются по возвращенному BSA.
II. Если сектор не найден, то возвращается ответ, что сектор не найден.
Если набирается страница из секторов, которых нет в кэш, то она целиком добавляется в кэш способом, описанным выше при объяснении первой функции кэш.
С целью поддержки возможности сброса содержимого кэш реализована поддержка запроса на удаление самого правого по индексу элемента кэш, содержащего информацию какой-то страницы. В результате, порядок элементов и положение элементов не меняется, просто логическим адресам этого самого правого элемента присваиваются заранее определенные константные значения логического адреса, и число элементов, содержащихся в кэш, уменьшается.
Важным требованием является то, что все хранимые в кэш логические адреса секторов должны быть уникальны. Поэтому считается, что все запросы на добавление страницы не должны нарушать это свойство.
Одним из параметров кэш является число видимых страниц — V. Если страница находится в элементе кэш с индексом L, то, если L ≥ [Объем кэш в страницах] – V, тогда страница считается видимой.
При запросе поиска на запись, если найденная страница оказывается видимой, и она – самая правая из существующих, то считается, что сектор не найден. Поскольку команда на удаление элемента из кэш подается лишь в случае, если есть видимый элемент, то нет смысла находить эту страницу и дольше удерживать в кэш, так как она скоро удалится.
В кэш допускается хранить неполные страницы, то есть часть секторов страниц не содержат данные. LSA таких секторов помечаются в старшем бите единицей. Причем, если в кэш добавляется неполная страница, то должно гарантироваться, что сначала идут сектора непустые, а лишь затем пустые.
Если при поиске для записи в искомом LSA старший бит равен 1, и он найден в кэш, то помимо действий, описанных выше (нахождение сектора при запросе поиска на запись), добавляется еще одно: этот LSA перемещаемого на место 0-го элемента в кэш заменяется на подстановочный SUBSTITUTIONAL_LSA, который также подается на вход. Значение этого действия следующее: если выполняется поиск LSA для записи, то по соответствующему BSA необходимо разместить некоторый сектор, поэтому найденный LSA надо заменить на SUBSTITUTIONAL_LSA.
Если при поиске для чтения в искомом LSA  старшем бите равен 1, то возвращается сразу результат, что сектор не найден, так как для чтения этот сектор бесполезен, данных для него нет.
На последовательность запросов обращения к узлу управления страничным кэш накладываются следующие требования.
Допускаются одновременный приход команд на добавление и удаление.
Должно гарантироваться, что между моментом отправки запроса поиска на запись или на чтение и получением ответа на эту команду будет подано не более одной команды удаления. При запросе поиска для записи в случае — если до прихода ответа на запрос приходит команда удаления искомого сектора, то он не будет найден.
Запрещается одновременный приход команд на добавление и поиск для записи/чтения.