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

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

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

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

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

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

-2
yael 12 Мар 2020 в 11:36
1
Вы имеете в виду, что у вас все в порядке с данными, которые вообще не попадают на диск? Другими словами, вас устраивает потеря данных при перезагрузке?
 – 
TooTea
12 Мар 2020 в 11:54
Если ваши диски слишком медленные, подумайте о переходе на твердотельные накопители.
 – 
Panki
12 Мар 2020 в 12:00
Уточните, пожалуйста, о каком кэше идет речь? Для меня «кэш памяти» обычно означает кэши на процессоре.
 – 
Time4Tea
12 Мар 2020 в 14:57

2 ответа

Лучший ответ

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

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

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

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

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

1
user373503user373503 12 Мар 2020 в 12:25

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

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

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

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

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

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

0
Time4Tea 12 Мар 2020 в 12:11
1
OP относится к дисковому кешу (в ОЗУ), а не к кешу на процессоре.
 – 
Stephen Kitt
12 Мар 2020 в 12:29
Ну тогда я бы сказал, что вопрос не ясен. Когда кто-то говорит мне «кэш памяти», это означает кэши на процессоре…
 – 
Time4Tea
12 Мар 2020 в 14:56