Что означает понятие "холодный кэш" и "теплый кеш"?
Я прочитал статью, в которой использовались термины "холодный кеш" и "теплый кеш". Я ищу, но не нашел ничего полезного. Что означает понятие "холодный кеш" и "теплый кеш"?
Я также посещаю эту ссылку, но мне нужно что-то еще.
3 ответа
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.
Cold Cache - это просто пустой кеш или тот, который содержит устаревшие данные.
Hot Cache, с другой стороны, хранит полезные данные, необходимые вашей системе. Это помогает вам достичь более быстрой обработки; в основном он используется для обработки запросов практически в реальном времени. Существуют системы / процессы, которым нужна определенная информация, прежде чем они начнут удовлетворять запросы пользователей; например, торговая платформа, которая потребует рыночные данные / информацию о риске / информацию о безопасности и т. д., прежде чем сможет обработать запрос пользователя. Это займет много времени, если для каждого запроса процесс должен запросить БД / сервис, чтобы получить эту критическую информацию. Так что было бы неплохо кэшировать его; и это было бы возможно через Hot Cache. Этот кеш должен поддерживаться регулярно (обновления / удаления и т. Д.); в противном случае за этот период ваш кэш может увеличиться в размере с ненужными данными, и вы можете заметить ухудшение производительности.
Чтобы создать Hot Cache, одним из методов будет ленивое заполнение кеша, что я имею в виду, когда вы получаете запросы и заполняете cahce; в этом случае начальные запросы будут медленными, а последующие - быстрее. Другой подход заключается в загрузке данных при запуске процесса (или до того, как пользовательские запросы начнут поступать) и поддержке кеша до тех пор, пока процесс не заработает.
Подобная концепция существует и во Frontend Web-разработке, почти все хорошие js-фреймворки в наши дни используют WarmCaching.
Холодный кэш: приложение Frontend впервые обращается к внутреннему серверу.
Горячий кеш: после того, как интерфейс впервые получает данные, он сохраняет их в своем локальном кеше. Поэтому в следующий раз, когда он попытается вызвать бэкэнд, он извлечет элемент из своего локального кеша.
В многопрограммной среде, если задачи сохраняют значительную часть своего рабочего набора от предыдущего выполнения, кеш называется теплым кешем.
Кеши, не имеющие истории предыдущих выполнений, называются холодным кешем.