Что означает понятие "холодный кэш" и "теплый кэш"?
Я читал статью, и в ней использовались термины "холодный кэш" и "теплый кэш". Я искал, но не нашел ничего полезного. Что означает понятие" холодный кэш "и" теплый кэш "?
Я также посещаю эту ссылку, но мне нужно что-то еще.
3 ответов:
TL; DR есть аналогия с холодным двигателем и теплым двигателем автомобиля. Холодный кэш - не имеет никаких значений и не может дать вам никакого ускорения, потому что, ну, он пуст. Теплый кэш имеет некоторые значения и может дать вам это ускорение.
Кэш-это структура, которая содержит некоторые значения (индексы, страницы памяти, дисковые блоки и т. д.).) для более быстрого поиска.Кэш работает путем хранения некоторых коротких ссылок в структуре данных быстрого поиска (хэш-таблица, дерево B+) или носителях быстрого доступа. (RAM memory vs HDD, SSD vs HDD).
Чтобы сделать этот быстрый поиск, вам нужно, чтобы ваш кэш содержал значения. Давайте рассмотрим пример.
Скажем, у вас есть Linux-система с некоторой файловой системой. Чтобы получить доступ к файлам в файловой системе, вы должны знать, где начинается ваш файл на диске. Эта информация хранится в inode. Для простоты скажем, что таблица inode хранится где-то на диске (так называемая "суперблочная" часть).
Теперь представьте, что вам нужно прочитать файл /etc/fstab. Для этого Вам необходимо: прочитать таблицу индексов с диска (10 мс), затем разобрать ее и получить начальный блок файла, а затем прочитать сам файл(10 мс). Итого ~20 мс
Это слишком много операций. Таким образом, вы добавляете кэш в виде хэш-таблицы в оперативной памяти. Доступ к оперативной памяти составляет 10нс-это 1000(!) в разы быстрее. Каждая строка в этой хэш-таблице содержит 2 значения.
Но проблема в том, что на старте ваш кэш пуст - такой кэш называется холодный кэш. Чтобы воспользоваться преимуществами вашего кэша, вам нужно заполнить его некоторые величины. Как это происходит? Когда вы ищете какой-то файл, вы смотрите в своем кэше индексов. Если вы не нашли inode в кэше (cache miss), вы говорите "хорошо" и выполняете полный цикл чтения с чтением таблицы inode, разбором ее и чтением самого файла. Но после разбора части вы сохраняете номер индекса и разбираете стартовый дисковый блок в вашем кэше. И это продолжается и продолжается - вы пытаетесь прочитать другой файл, вы смотрите в кэше, вы получаете промах кэша (ваш кэш холодный), Вы читаете с диска, вы добавляете строку в кэш.(inode number or filename) : (starting disk block)Таким образом, холодный кэш не дает вам никакого ускорения, потому что вы все еще читаете с диска. В некоторых случаях холодный кэш делает вашу систему медленнее, потому что вы делаете дополнительную работу (дополнительный шаг поиска в таблице), чтобы разогреть ваш кэш.
Через некоторое время у вас будут некоторые значения в вашем кэше, и через некоторое время вы попытаетесь прочитать файл, вы ищете в кэше и бац! вы нашли inode (Cache hit )! Теперь у вас есть стартовый дисковый блок, поэтому вы пропускаете чтение суперблок и начать читать сам файл! Вы только что сэкономили 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.
Холодный кэш -это просто пустой кэш или кэш с устаревшими данными.
Горячий кэш , с другой стороны, поддерживает полезные данные, которые требуются вашей системе. Это помогает вам достичь более быстрой обработки; в основном он используется для обработки запросов почти в реальном времени. Существуют системы / процессы, которым нужна определенная информация, прежде чем они начнут удовлетворять запросы пользователей; например, торговая платформа, которая потребует market-data / risk-info/security-info и т. д., Прежде чем он сможет обработать запрос пользователя. Это займет много времени, если для каждого запроса процесс должен запросить БД / сервис, чтобы получить эту критическую информацию. Поэтому было бы хорошей идеей спрятать его; и это было бы осуществимо через горячий кэш. Этот кэш должен регулярно поддерживаться (обновления / удаления и т. д.); В противном случае за этот период ваш кэш может увеличиться в размере с ненужными данными, и вы можете заметить ухудшение производительности.
Чтобы создать горячий кэш, один метод был бы ленивым заполнением кэша, я имею в виду, что, как и когда вы получаете запросы, вы заполняете cahce; в этом случае начальные запросы будут медленными, но последующие будут быстрее. Другой подход заключается в загрузке данных при запуске процесса (или до того, как начнут поступать запросы пользователей) и сохранении кэша до тех пор, пока процесс живет.

Comments