Linux и буфер памяти/кэш и дисковое хранилище

Linux и буфер памяти/кэш и дисковое хранилище

Я хочу задать вопрос о баффе/кэше памяти

Допустим, у нас есть машина Linux с диском и некоторое приложение, которое записывает данные на диск /var/data.

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

в течение некоторого времени, и по истечении X времени данные приложения будут удалены из кэш-памяти

можно ли принудительно сохранить определенные данные в кэш-памяти, а не на диске?

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

решение1

сохранено в кэш-памяти

На самом деле такого нет. Начинай с этогобафф/кэш:

]# free -g
              total        used        free      shared  buff/cache   available
Mem:              7           0           3           0           3           6
Swap:             0           0           0

Это дает объем оперативной памяти, которая в данный момент используется как буфер или кэш. Ядро делает это именно потому, что диски медленные, и часто (как показано) оперативной памяти достаточно.

Если вы хотите зарезервировать часть оперативной памяти для определенных файлов, вы можете поместить их на RAM-диск ( mount -t tmpfs ...). Но тогда вам придется не забыть скопировать их обратно на диск.

решение2

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

Регистр ЦП > Кэш-память > ОЗУ/основная память > Диск

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

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

Я не знаю никаких средств, позволяющих легко переопределить управление кэш-памятью и сохранять что-либо в кэше, но явно не в ОЗУ. Обычно существуют очень хорошие и эффективные системы, которые уже используются для управления кэшированием памяти.

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

Связанный контент