2013-09-25 5 views
0

все. Я застрял в следующем вопросе.Напишите кэшированную страницу, прежде чем она будет исправлена ​​

Я работаю над гибридной системой хранения, которая использует SSD в качестве уровня кэша для жесткого диска. С этой целью данные, считываемые с жесткого диска, должны быть записаны в ssd для ускорения последующих чтений этих данных. Поскольку Linux кэширует данные, считываемые с диска в кеше страницы, запись данных в ssd может быть отложена; однако страницы, кэширующие данные, могут быть освобождены, а доступ к освобожденным страницам не рекомендуется. Вот вопрос: у меня есть указатели «struct page», указывающие на страницы, которые будут записаны в ssd. Есть ли способ определить, является ли страница, представленная указателем, действительной или нет (допустимо я имею в виду, что кэшированная страница может быть безопасно записана в ssd? Что произойдет, если доступ к свободной странице осуществляется с помощью указателя? освобожденная страница тот же, что перед освобождением?

ответ

0

вы используете модуль CleanCache? вы должны получить только действительные страницы из нее, и она должна оставаться в силе до тех пор, ваша функция не закончена.

0

Разве это не CleanCache/frontswap reimplementation? (https://www.kernel.org/doc/Documentation/vm/cleancache.txt).

Преимущество существующего кода cleancache заключается в том, что он вызывает ваш код только перед тем, как он освобождает страницу, поэтому перед тем, как страница будет находиться в ОЗУ, Когда в памяти нет свободного места, ядро ​​вызывает ваш код для резервного копирования в tmem (переходная память).

Searching Я также нашел существующий проект, который, кажется, чтобы сделать именно это: http://bcache.evilpiepirate.org/:

Bcache является кэш уровня блока ядра Linux. Он позволяет одному или нескольким быстрым дискам , таким как твердотельные накопители на основе флэш-памяти (SSD), действовать как кеш для одного или нескольких более медленных жестких дисков.

Патчи Bcache для ядра Linux позволяют использовать SSD для кэширования других блочных устройств. Это аналогично L2Arc для ZFS, но Bcache также делает кэширование обратной записи (помимо просто записи через кеширование), и это файловой системы агностик. Он предназначен для включения с минимальным усилием и для работы без каких-либо настроек при любой настройке. По умолчанию по умолчанию он не будет кэшировать последовательный ввод-вывод, только случайное считывает и записывает , что SSDs превосходят. Он предназначен для настольных компьютеров, серверов, высокопроизводительных массивов хранения и, возможно, даже встроенных.

+0

Большое спасибо за ваш ответ. В действительности моя реализация основана на flashcache, который служит аналогичной цели для Bcache. Ниже приводится более конкретное выражение моего вопроса: – user2813839

+0

Для написания каждой чистой страницы есть соответствующая структура BIO. Тем не менее, я хочу отложить представление BIO, ожидая его в очереди. Мои вопросы: 1) Может ли страница быть изменена и, таким образом, загрязниться, когда BIO находится в очереди? 2) Записывает ли запись только измененную часть страницы на диск или всю страницу? 3) Если страница чиста во время ее нахождения в очереди, можно ли освободить страницу? @lsk – user2813839

0

То, что вы пытаетесь достичь, выглядит следующим образом:

  • Перед страница выселила из кэша страниц, вы хотите кэшировать его. Это, по сути, называется кешем жертвы. Вы можете искать бумаги вокруг этого.
  • Что вам нужно, это «привязать» страницы, предназначенные для выселения на время ввода-вывода. Post IO, вы можете освободить страницу pagecache.
  • Но это задерживает выселение, которое, возможно, необходимо во время давления памяти для создания более не кэшированных страниц.
  • Итак, одним из возможных решений является запуск вашего алгоритма кэширования до того, как начнется выселение pagecache.
  • Второе возможное решение состоит в том, чтобы отложить кучу бесплатных страниц и обменивать страницу, высеченную из кеша страницы, со страницей из бесплатного пула и кэшировать выведенную страницу в фоновом режиме.Но теперь вам нужно синхронизировать с удалением блоков файлов и т. Д.
Смежные вопросы