Кэш

Кэширование - термин, используемый в информатике. Идея кэширования (произносится как "cash" /ˈkæʃ/ KASH ) очень проста: Очень часто получение результата для вычисления занимает очень много времени, поэтому хранение результата, как правило, является хорошей идеей. Используются два вида носителей информации: Один, как правило, довольно большой, но доступ к нему "медленный"; к другому можно получить доступ намного быстрее, но обычно он маленький. Самая основная идея кэширования заключается в использовании носителя, к которому можно получить быстрый доступ, чтобы иметь копии данных. Нет никакой разницы между копией и оригиналом. Доступ к исходным данным может занять много времени, или это может быть дорогостоящим (например: результаты сложной задачи, которая требует много времени на решение). По этой причине гораздо "дешевле" просто использовать копию данных из кэша. Иначе говоря, кэш - это временное хранилище, в котором находятся часто используемые копии данных. Когда копия данных находится в этом кэше, быстрее использовать эту копию, чем заново получать или пересчитывать исходные данные. Это сократит среднее время, необходимое для доступа к данным. Помещение нового значения в кэш часто означает, что старое значение необходимо заменить. Существуют различные идеи (обычно называемые "стратегиями") о том, как выбрать заменяемое значение.

Буфер очень похож на кэш. Он отличается тем, что клиент, обращающийся к данным в буфере, знает, что буфер есть; буфером управляет приложение. При использовании кэша клиент, обращающийся к данным, не должен знать, что кэш есть.

Типичные компьютерные приложения получают доступ к данным очень похожими способами. Предположим, данные структурированы в "блоки", к которым можно получить индивидуальный доступ. Когда приложение получает доступ к блоку, оно также с большой вероятностью получает доступ (или ссылку) к блоку, который "близок" к исходному блоку. Это известно как место ссылки. Существуют различные виды такого "местонахождения". Местоположение является одной из причин, по которой кэш хорошо работает во многих областях вычислений.

Для того, чтобы работать хорошо, кэш маленький, по сравнению с целым объемом данных. Чем больше кэш, тем дольше занимает поиск записи. Большие кэши также стоят дороже.

Как работают кэши

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

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

Кэш для чтения

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

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

Кэш имеет только ограниченный размер. Чтобы освободить место для ранее не кэшированной записи, возможно, потребуется удалить из кэша еще одну кэшированную запись. Для поиска записи, которую лучше всего удалить, используются специальные правила. Эти правила обычно называются эвристикой. Эвристика, используемая для поиска записи, называется политикой замены. Очень простое правило, которое используется, называется Наименее недавнее использование (или LRU). Оно просто берет запись, которая использовалась дольше всего. Другие эвристики перечислены в алгоритме кэширования...

Кэш для письма

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

Тем не менее, запись должна быть в какой-то момент времени записана в подложку магазина. Время, когда это происходит, контролируется политикой записи.

В кэш-памяти через запись каждая запись сразу же записывается в бэк-магазин, а также хранится в кэше.

Другой вариант - записывать только в кэш, а записывать в бэк-магазин позже. Это называется обратной записью (или записью в кэш). В кэше отмечаются записи, которые еще не были записаны в бэк-магазин; используемую метку часто называют "грязным флагом". Перед тем, как удалить записи из кэша, они записываются в бэк-магазин. Это называется ленивая запись. Пропущенная запись в кэше с обратной записью (которая требует замены блока на другой) часто требует двух обращений к памяти: одно для получения нужного набора данных, другое для записи замененных данных из кэша в хранилище.

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

Распределение без записи - это политика кэширования, в которой кэшируются только чтения. Это позволяет избежать необходимости обратной записи или кэширования через запись. Запись постоянно выполняется в хранилище резервной копии.

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

Схема кэш-памяти процессораZoom
Схема кэш-памяти процессора

Выбор записи для замены

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

  • Первый на первом месте: Просто замените запись, которая была добавлена в кэш давным-давно.
  • Последний раз использовался: Эта идея похожа на описанную выше FIFO, но при использовании записи ее временная метка/возраст обновляется.
  • Наименее часто используемый: Опять же, как и в случае с FIFO, вместо использования метки времени используйте счетчик, который увеличивается каждый раз, когда используется запись
  • Выберите запись случайным образом

История

Впервые слово "кэш" было использовано в вычислительной технике в 1967 году, когда была подготовлена научная статья для публикации в журнале IBM Systems Journal. Статья была посвящена новому улучшению памяти в модели 85. Модель 85 была компьютером линейки IBM System/360. Редактор журнала искал лучшее слово для "высокоскоростной буфер", использованное в статье. Он не получил никакой информации, и предложил кэшировать, от французского cacher, что означает "скрывать". Статья была опубликована в начале 1968 года, и авторы были удостоены чести IBM. Их работа была широко принята и усовершенствована. Кэш вскоре стал стандартным использованием в компьютерной литературе.

Где используются кэши

кэши ЦП

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

Дисковые кэши

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

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

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

веб-кэши

Веб-браузеры и прокси-серверы используют кэш для хранения предыдущих ответов с веб-серверов, таких как веб-страницы. Веб-кэш снижает объем информации, который необходимо передавать по сети. Информация, ранее сохраненная в кэше, часто может быть использована повторно. Это снижает пропускную способность и требования к обработке веб-сервера, а также помогает улучшить отзывчивость для пользователей сети.

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

Поисковые системы также часто делают веб-страницы, которые они проиндексировали, доступными из своего кэша. Например, Google предоставляет "кэшированную" ссылку рядом с каждым результатом поиска. Это полезно, когда веб-страницы временно недоступны с веб-сервера.

Кэширование с ненадежными сетями

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

Например, кэш веб-страниц и кэш сетевой файловой системы на стороне клиента (например, в NFS или SMB) обычно доступен только для чтения или записи, чтобы сетевой протокол был простым и надежным.

Разница между буфером и кэшем

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

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

Кэш также повышает производительность передачи данных. Частично это увеличение также связано с возможностью того, что несколько небольших передач будут объединены в один большой блок. Но основной прирост производительности происходит потому, что есть большая вероятность того, что одно и то же данное будет читаться из кэша несколько раз, или что записанные данные вскоре будут прочитаны. Единственное предназначение кэша - уменьшение доступа к более медленным хранилищам. Кэш также обычно представляет собой абстрактный слой, предназначенный для того, чтобы быть невидимым с точки зрения соседних слоев. В этом случае приложения или клиенты могут не знать о наличии кэша.

Вопросы и ответы

В: Что такое кэширование?


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

В: Как работает кэширование?


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

В: Что такое буфер?


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

В: Что означает локальность ссылок?


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

В: Почему большие кэши требуют больше времени для поиска записей?


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

В: Как локальность может помочь сделать работу кэша более эффективной?


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

AlegsaOnline.com - 2020 / 2023 - License CC3