Перейти к основному содержимому

1.10. Кэш

Разработчику Аналитику Архитектору

Кэш

Что такое кэш?

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

Кэш – промежуточный буфер с быстрым доступом к нему, как раз для кэша используется память с большей скоростью доступа.

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

Таким образом:

  • есть хранилище (диск), основная память (ОЗУ) и временная память (буфер, кэш);
  • основная память содержит индексы для каждой записи в наборе данных:
Индекс основной памятиДанные
0Кот
1Собака
2Гусь
  • временная память содержит тег, который равень индексу из основной памяти:
Индекс кэшаТег (индекс основной памяти)Данные
02Гусь
10Кот
  • кэш-память используется как дополнительный компонент процессоров, оперативной памяти, и многих других устройств. Таким образом, читая книгу по страницам, вам проще все страницы держать у себя на столе, чем бежать за каждой страницей в библиотеку. Так и работает буфер.

image.png


Кэш процессора

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

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

Современные процессоры имеют несколько уровней кэш-памяти — L1, L2 и L3.

  • L1-кэш — самый маленький и самый быстрый, встроен прямо в ядро процессора.
  • L2-кэш — побольше и чуть медленнее, обычно тоже привязан к ядру.
  • L3-кэш — общий для всех ядер, самый большой из кэшей процессора, но и самый медленный из них.

Данные сначала ищутся в L1. Если их там нет — в L2, затем в L3. Только при полном промахе процессор обращается в оперативную память.

УровеньРазмер (пример)Время доступаРасположение
L132–64 КБ~1 тактВ ядре процессора
L2256 КБ – 1 МБ~4–10 тактовРядом с ядром
L32–64 МБ~20–50 тактовОбщий для всех ядер

Политики замены

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

Политика замены — это набор правил, по которым выбирается, какие данные будут удалены из кэша при необходимости освободить место для новых записей.

Когда кэш заполнен, новая запись должна заменить старую. Как выбирается «жертва»? Это — политика замены.

Вытеснение — это операция удаления записи из кэша для освобождения места под новую запись, выполняемая в соответствии с выбранной политикой замены.

Кэш ограничен по размеру. Когда в него нужно поместить новые данные, а места нет, система выбирает, какую запись удалить. Существуют разные подходы:

  • Вытеснение самого старого — удаляется запись, которая дольше всех не использовалась.
  • Вытеснение самого редкого — удаляется запись, к которой обращались реже всего.
  • Вытеснение по инструкции — программа сама указывает, какие данные можно вытеснить (редко, но бывает в высокопроизводительных системах).

Кэширование в других технологиях

Кэширование применяется повсюду:

  • Браузер хранит изображения и стили сайтов, чтобы не скачивать их при каждом заходе.
  • Операционная система держит часто читаемые файлы в page cache (системном буфере).
  • Wi-Fi-роутер кэширует DNS-запросы, чтобы быстрее открывать сайты.
  • Видео-плеер загружает следующие секунды видео заранее — это тоже кэш в оперативной памяти.
  • SSD-диск имеет свой собственный кэш (часто на DRAM), чтобы быстрее отдавать блоки.

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

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

Буфер обмена — это область оперативной памяти, используемая операционной системой для временного хранения данных при операциях копирования и вставки между приложениями.

Page cache — это область оперативной памяти, используемая ядром ОС для кэширования содержимого файлов с диска, чтобы ускорить повторные чтения и отсрочить запись.

DNS-кэширование — это сохранение соответствия между доменными именами (например, google.com) и их IP-адресами на локальном устройстве, роутере или сервере провайдера, чтобы избежать повторных обращений к глобальным DNS-серверам при каждом запросе.

Кэш оперативной памяти — это не отдельный физический компонент, а логическое использование части оперативной памяти как промежуточного хранилища для ускорения доступа к данным, например, через page cache или прикладные буферы.

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


Проблема устаревших данных в кэше

Проблема устаревших данных в кэше возникает, когда копия информации в кэше не соответствует актуальной версии в основном хранилище. Это происходит, если оригинал изменяется вне контроля кэширующего механизма — например, файл на диске обновлён другой программой, а page cache продолжает отдавать старую версию; или сайт выпустил новую версию, но браузер показывает страницу из локального кэша.

Решения включают:

  • Срок жизни записи (TTL) — автоматическое удаление данных по истечении заданного времени;
  • Инвалидация — явная команда на удаление устаревшей записи;
  • Версионирование — добавление уникальных меток или хешей к именам ресурсов (например, style.a1b2c3.css), чтобы браузер воспринимал их как новые;
  • Проверка условий — отправка запроса с заголовками If-Modified-Since или ETag, чтобы сервер подтвердил актуальность кэша.

Кэш — это зеркало состояния на момент копирования. Его ценность зависит от своевременного обновления.