Я прочитал статью, в которой использовались термины " холодный кеш" и " теплый кеш" Я гуглил об этих терминах, но не нашел ничего полезного (только здесь).
Что означают эти термины?
Я прочитал статью, в которой использовались термины " холодный кеш" и " теплый кеш" Я гуглил об этих терминах, но не нашел ничего полезного (только здесь).
Что означают эти термины?
TL; DR Существует аналогия с холодным двигателем и прогретым двигателем автомобиля. Холодный кеш - не имеет никаких значений и не может дать вам никакого ускорения, потому что, ну, он пустой. Теплый кеш имеет некоторые значения и может дать вам это ускорение.
Кэш - это структура, которая содержит некоторые значения (inode, страницы памяти, дисковые блоки и т.д.) Для более быстрого поиска.
Кэш работает путем хранения каких-либо кратких ссылок в структуре данных быстрого поиска (хэш-таблица, дерево B+) или носителя с более быстрым доступом (оперативная память против жесткого диска, SSD против жесткого диска).
Для быстрого поиска вам необходим ваш кеш для хранения значений. Давайте посмотрим на пример.
Скажем, у вас есть система Linux с некоторой файловой системой. Чтобы получить доступ к файлам в файловой системе, вам нужно знать, где ваш файл начинается на диске. Эта информация хранится в inode. Для простоты мы говорим, что таблица inode хранится где-то на диске (так называемая часть "суперблока").
Теперь представьте, что вам нужно прочитать файл /etc/fstab. Для этого вам нужно прочитать таблицу inode с диска (10 мс), затем проанализировать ее и получить начальный блок файла, а затем прочитать сам файл (10 мс). Всего ~ 20 мс
Это слишком много операций. Итак, вы добавляете кеш в виде хеш-таблицы в оперативной памяти. Доступ к оперативной памяти составляет 10 нс - это в 1000 (!) Раз быстрее. Каждая строка в этой хэш-таблице содержит 2 значения.
(inode number or filename) : (starting disk block)
Но проблема в том, что на старте ваш кеш пуст - такой кеш называется холодным. Чтобы использовать преимущества вашего кэша, вам нужно заполнить его некоторыми значениями. Как это случилось? Когда вы ищете какой-то файл, вы заглядываете в свой кэш-память. Если вы не нашли inode в кеше (промах кеша), вы говорите "Хорошо" и делаете полный цикл чтения с чтением таблицы inode, анализом его и чтением самого файла. Но после разбора части вы сохраняете номер инода и анализируете начальный блок диска в своем кеше. И это происходит снова и снова - вы пытаетесь прочитать другой файл, вы смотрите в кеш, вы получаете пропущенный кеш (ваш кеш холодный), вы читаете с диска, вы добавляете строку в кеш.
Таким образом, холодный кеш не дает вам никакого ускорения, потому что вы все еще читаете с диска. В некоторых случаях холодный кэш замедляет работу вашей системы, потому что вы выполняете дополнительную работу (дополнительный шаг поиска в таблице) для разогрева кеша.
Через некоторое время у вас появятся некоторые значения в вашем кеше, и через некоторое время вы попытаетесь прочитать файл, вы посмотрите в кеш и BAM! Вы нашли индекс (попадание в кэш)! Теперь у вас есть начальный блок диска, поэтому вы пропускаете чтение суперблока и начинаете читать сам файл! Вы только что сэкономили 10 мс!
Этот кеш называется теплым кешем - кеш с некоторыми значениями, которые дают вам попадания в кеш.
Фон:
Cache
- это маленький и быстрый memory
, который помогает избежать CPU
доступа main memory
(большего и медленного) для экономии времени (Cache
чтение ~100 x
быстрее, чем чтение из main memory
). Но это помогает только в том случае, если данные, которые необходимы вашей программе, были cached
(считанные из main memory
в Cache
) и действительны. Кроме того, Cache
заполняется данными со временем. Итак, Cache
может быть:
1. Пустой, или
2. могут содержать нерелевантные данные, или
3. могут содержать соответствующие данные.
Теперь, на ваш вопрос:
Холодный кеш: Когда Cache
пуст или имеет нерелевантные данные, так что CPU
необходимо выполнить более медленное чтение из main memory
для вашего требования к данным программы.
Горячий кеш:. Когда Cache
содержит релевантные данные, и все показания для вашей программы выполнены из самого Cache
.
Итак, горячие кеши желательны, холодных кешей нет.
Очень приятный ответ @avd.
Холодный кэш - это просто пустой кеш или один с устаревшими данными.
Горячий кеш, с другой стороны, поддерживает полезные данные, требуемые вашей системой. Это помогает вам ускорить обработку; в основном он используется для обработки запросов в режиме реального времени. Существуют системы/процессы, которым необходима определенная информация, прежде чем они начнут обслуживать запросы пользователей; такой как торговая платформа, для которой требуется информация о рыночных данных/информация о рисках/информация о безопасности и т.д., прежде чем она сможет обрабатывать пользовательский запрос. Это займет много времени, если для каждого запроса процесс должен запросить БД/службу, чтобы получить эту критическую информацию. Поэтому было бы неплохо кэшировать его; и это было бы возможно через Hot Cache. Этот кеш следует регулярно поддерживать (обновления/удаление и т.д.); в противном случае за период, когда ваш кеш может увеличиваться в размерах с ненужными данными, и вы можете заметить ухудшение производительности.
Чтобы создать "Горячий кеш", одним из методов было бы ленивое население кеша, и я имею в виду, что когда и когда вы получаете запросы, вы заполняете cahce; в этом случае первоначальные запросы будут медленными, но последующие будут быстрее. Другим подходом было бы загрузить данные при запуске процесса (или до того, как пользовательские запросы начнут поступать) и сохранить кеш до тех пор, пока процесс не завершится.
В веб-разработке Frontend есть похожая концепция: почти все хорошие фреймворки js frontend делают WarmCaching в наши дни.
Cold Cache: приложение внешнего интерфейса впервые вызывает внутренний сервер.
Теплый кэш: после того, как веб-интерфейс впервые получает данные, он сохраняет их в локальном кэше. Поэтому в следующий раз, когда он пытается вызвать бэкэнд, он выбирает элемент из своего локального кэша.
ссылка: Кэширование данных в интерфейсе