Кэш

Кэшиликеш(англ.cache, отфр.cacher— «прятать»; произносится [kæʃ] — «кэш») — промежуточныйбуферс быстрым доступом к нему, содержащий информацию, которая может быть запрошена с наибольшей вероятностью. Доступ к данным в кэше осуществляется быстрее, чем выборка исходных данных из более медленной памяти или удалённого источника, однако её объём существенно ограничен по сравнению с хранилищем исходных данных.
Впервые слово «cache» в компьютерном контексте было использовано в1967 годуво время подготовки статьи для публикации в журнале «IBM Systems Journal». Статья касалась усовершенствования памяти в разрабатываемой модели 85 из серииIBM System/360. Редактор журнала Лайл Джонсон попросил придумать более описательный термин, нежели «высокоскоростной буфер», но из-за отсутствия идей сам предложил слово «cache». Статья была опубликована в начале 1968 года, авторы были премированыIBM, их работа получила распространение и впоследствии была улучшена, а слово «кэш» вскоре стало использоваться в компьютерной литературе как общепринятый термин.
Кэш — это память с большей скоростью доступа, предназначенная для ускорения обращения к данным, содержащимся постоянно в памяти с меньшей скоростью доступа (далее «основная память»). Кэширование применяетсяЦПУ,жёсткими дисками,браузерами,веб-серверами, службамиDNSиWINS.
Кэш состоит из набора записей. Каждая запись ассоциирована с элементом данных или блоком данных (небольшой части данных), которая является копией элемента данных в основной памяти. Каждая запись имеетидентификатор, часто называемыйтегом, определяющий соответствие между элементами данных в кэше и их копиями в основной памяти.
Когда клиент кэша (ЦПУ, веб-браузер, операционная система) обращается к данным, прежде всего исследуется кэш. Если в кэше найдена запись с идентификатором, совпадающим с идентификатором затребованного элемента данных, то используются элементы данных в кэше. Такой случай называетсяпопаданием кэша. Если в кэше не найдена запись, содержащая затребованный элемент данных, то он читается из основной памяти в кэш, и становится доступным для последующих обращений. Такой случай называетсяпромахом кэша. Процент обращений к кэшу, когда в нём найден результат, называетсяуровнем попаданий, иликоэффициентом попаданийв кэш.
Например, веб-браузер проверяет локальный кэш на диске на наличие локальной копии веб-страницы, соответствующей запрошенному URL. В этом примере URL — это идентификатор, а содержимое веб-страницы — это элементы данных.
Если кэш ограничен в объёме, то при промахе может быть принято решение отбросить некоторую запись для освобождения пространства. Для выбора отбрасываемой записи используются разныеалгоритмы вытеснения.
При модификации элементов данных в кэше выполняется их обновление в основной памяти. Задержка во времени между модификацией данных в кэше и обновлением основной памяти управляется так называемойполитикой записи.
В кэше снемедленной записьюкаждое изменение вызывает синхронное обновление данных в основной памяти.
В кэше сотложенной записью(илиобратной записью) обновление происходит в случае вытеснения элемента данных, периодически или по запросу клиента. Для отслеживания модифицированных элементов данных записи кэша хранят признак модификации (изменённыйили«грязный»). Промах в кэше с отложенной записью может потребовать два обращения к основной памяти: первое для записи заменяемых данных из кэша, второе для чтения необходимого элемента данных.
В случае, если данные в основной памяти могут быть изменены независимо от кэша, то запись кэша может статьнеактуальной. Протоколы взаимодействия между кэшами, которые сохраняют согласованность данных, называютпротоколами когерентности кэша.
В связи с ростомчастоты, на которой функционируютпроцессоры, и повышением производительности подсистемыоперативной памяти(ОЗУ) узким местом вычислительной системы стал интерфейс передачи данных.
Кэш-память может давать значительный выигрыш в производительности в случае, когда тактовая частота ОЗУ значительно ниже тактовой частоты процессора. Ряд моделей процессоров обладает собственным кэшем для минимизации времени доступа к оперативной памяти (ОЗУ), которая медленнее, чемрегистры(эти регистры и буфера ввода-вывода могут считаться кэшем нулевого уровня). Тактовая частота для кэш-памяти обычно ненамного ниже частоты ЦП.
В процессорах с поддержкойвиртуальной адресациичасто вводят небольшой быстродействующийбуфер трансляций адресов(TLB). Его скорость важна, так как он опрашивается на каждом обращении в память.
Проблема синхронизации между различными кэшами (как одного, так и множества процессоров) решаетсякогерентностью кэша.
Существует три варианта обмена информацией между кэш-памятью различных уровней, или, как говорят, кэш-архитектуры: инклюзивная, эксклюзивная и неэксклюзивная.
Эксклюзивная кэш-память предполагает уникальность информации, находящейся на различных уровнях кэша (предпочитает фирмаAMD).
В неэксклюзивной кэши могут вести себя как угодно.
Кэш центрального процессора разделён на несколько уровней. Максимальное количество кэшей — четыре. В универсальномпроцессорев настоящее время число уровней может достигать трёх. Кэш-память уровня N+1, как правило, больше по размеру и имеет более низкие скорости доступа и передачи данных, чем кэш-память уровня N.
Одна из фундаментальных характеристик кэш-памяти — уровень ассоциативности — отображает её логическую сегментацию, которая вызвана тем, что последовательный перебор всех строк кэша в поисках необходимых данных потребовал бы десятков тактов и свёл бы на нет весь выигрыш от использования встроенной в ЦП памяти. Поэтому ячейки ОЗУ жёстко привязываются к строкам кэш-памяти (в каждой строке могут быть данные из фиксированного набора адресов), что значительно сокращает время поиска.
При одинаковом объёме кэша схема с большей ассоциативностью будет наименее быстрой, но наиболее эффективной (после четырёхпотоковой реализации прирост «удельной эффективности» на один поток растёт мало).
Многие периферийные устройства хранения данных используют внутренний кэш для ускорения работы, в частности, жёсткие диски используют кэш-память от 1 до 256 Мбайт (модели с поддержкойNCQ/TCQиспользуют её для хранения и обработки запросов), устройства чтения CD/DVD/BD-дисков также кэшируют прочитанную информацию для ускорения повторного обращения.
Операционная система также использует часть оперативной памяти в качестве кэша дисковых операций (например, для внешних устройств, не обладающих собственной кэш-памятью, в том числе жёстких дисков, flash-памяти и гибких дисков). Часто для кэширования жёстких дисков предоставляется вся свободная (не выделенная процессам) оперативная память.
Применение кэширования внешних накопителей обусловлено следующими факторами:
При чтении кэш позволяет прочитать блок один раз, затем хранить одну копию блока в оперативной памяти для всех процессов и выдавать содержимое блока «мгновенно» (по сравнению с запросом к диску). Существует техника «предзапроса» — в фоновом режиме операционной системой считываются в кэш также несколько следующих блоков (после нужного).
При записи кэш позволяет сгруппировать короткие записи в более крупные, которые эффективнее обрабатываются накопителями, либо избежать записи промежуточных модификаций. При этом все промежуточные состояния блока видны процессам из оперативной памяти.
Кэширование внешних устройств хранения значительно увеличивает производительность системы за счёт оптимизации использования ввода-вывода. Преимуществом технологии является прозрачная (незаметная для программ) автоматическая оптимизация использования памяти-дисков при неизменности логики приложений, работающих с файлами.
Недостатком кэширования записи является промежуток времени между запросом на запись от программы и фактической записью блока на диск, а также изменение порядка выполнения записей, что может приводить к потерям информации или несогласованности структур при сбое питания или зависании системы. Данная проблема сглаживается принудительной периодической синхронизацией (записью изменённых строк кэша) и журналированием файловых систем.
При чтении данных кэш-память даёт однозначный выигрыш в производительности. При записи данных выигрыш можно получить только ценой снижения надёжности. Поэтому в различных приложениях может быть выбрана та или иная политика записи кэш-памяти.
Существуют две основные политики записи кэш-памяти — сквозная запись (write-through) и отложенная запись (write-back):
Изначально все заголовки буферов помещаются в список свободных буферов. Если процесс намеревается прочитать или модифицировать блок, то он выполняет следующий алгоритм:
Процесс читает данные в полученный буфер и освобождает его. В случае модификации процесс перед освобождением помечает буфер как «грязный». При освобождении буфер помещается в голову списка свободных буферов.
Таким образом:
Если список свободных буферов пуст, то выполняется алгоритм вытеснения буфера. Алгоритм вытеснения существенно влияет на производительность кэша. Существуют следующие алгоритмы:
Применение того или иного алгоритма зависит от стратегии кэширования данных. LRU наиболее эффективен, если данные гарантированно будут повторно использованы в ближайшее время. MRU наиболее эффективен, если данные гарантированно не будут повторно использованы в ближайшее время. В случае, если приложение явно указывает стратегию кэширования для некоторого набора данных, то кэш будет функционировать наиболее эффективно.
Кэш оперативной памяти состоит из следующих элементов:
В процессе передачи информации по сети может использоваться кэширование интернет-страниц — процесс сохранения часто запрашиваемых документов на (промежуточных)прокси-серверахили машине пользователя для предотвращения их постоянной загрузки с сервера-источника и уменьшениятрафика. Таким образом, информация перемещается ближе к пользователю. Управление кэшированием осуществляется при помощиHTTP-заголовков.
Как вариант, кэширование веб-страниц может осуществляться с помощью так называемого «обратного прокси» либоCMSконкретного сайта для снижения нагрузки на сервер при большой посещаемости. Кэширование может производиться как в память, так и в файловый кэш. Недостаток кэширования заключается в том, что изменения, внесённые на одном браузере, могут не сразу отражаться в другом браузере, в котором данные берутся из кэш-памяти.
Многие программы записывают куда-либо промежуточные или вспомогательные результаты работы, чтобы не вычислять их каждый раз, когда они понадобятся. Это ускоряет работу, но требует дополнительной памяти (оперативной или дисковой). Примером такого кэширования являетсяиндексирование баз данных.