Кэш (вычисления)

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

Схема памяти ЦП операция кеширования

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

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

Содержание
  • 1 Мотивация
    • 1.1 Задержка
    • 1.2 Пропускная способность
  • 2 Операция
    • 2.1 Написание политик
  • 3 Примеры аппаратных кешей
    • 3.1 Кэш ЦП
    • 3.2 Кэш графического процессора
    • 3.3 DSP
    • 3.4 Резервный буфер трансляции
  • 4 Внутрисетевой кэш
    • 4.1 Информационно-ориентированные сети
      • 4.1.1 Политики
        • 4.1.1.1 Время с учетом времени, которое использовалось меньше всего (TLRU)
        • 4.1.1.2 Наименее часто используемые в последнее время (LFRU)
  • 5 Программные кеши
    • 5.1 Дисковый кеш
    • 5.2 Веб-кеш
    • 5.3 Мемоизация
    • 5.4 Другие кеши
  • 6 Буфер и кеш
  • 7 См. Также
  • 8 Ссылки
  • 9 Дополнительная литература
Мотивация

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

Буферизация , обеспечиваемая кеш-памятью, обеспечивает как задержку, так и пропускную способность (пропускная способность ):

Задержка

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

Пропускная способность

Использование кеша также обеспечивает более высокую пропускную способность от базового ресурса за счет объединения нескольких мелкозернистых передач в более крупные и более эффективные запросы. В случае схем DRAM это может быть обеспечено за счет более широкой шины данных. Например, рассмотрим программу, обращающуюся к байтам в 32-битном адресном пространстве, но обслуживаемую 128-битной внешней шиной данных; доступ к отдельным некэшированным байтам позволит использовать только 1/16 от общей полосы пропускания, а 80% перемещения данных будут связаны с адресами памяти, а не с самими данными. Чтение более крупных фрагментов уменьшает долю полосы пропускания, необходимую для передачи адресной информации.

Операция

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

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

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

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

Во время промаха кэша удаляется какая-то другая ранее существующая запись кэша, чтобы освободить место для вновь извлеченных данных. Эвристика , используемая для выбора записи для замены, известна как политика замены. Одна популярная политика замещения, «наименее недавно использовавшаяся» (LRU), заменяет самую старую запись, запись, к которой обращались менее недавно, чем к любой другой записи (см. алгоритм кэширования ). Более эффективные алгоритмы кэширования вычисляют частоту совпадений использования в зависимости от размера сохраненного содержимого, а также задержки и пропускную способность как для кеша, так и для резервного хранилища. Это хорошо работает для больших объемов данных, более длительных задержек и более низкой пропускной способности, например, с жесткими дисками и сетями, но неэффективно для использования в кэше ЦП.

Написание политик

Запись - сквозной кэш с выделением без записи Кэш с обратной записью с распределением записи

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

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

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

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

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

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

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

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

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

Примеры аппаратных кешей

Кэш ЦП

Небольшой объем памяти на или рядом с ним ЦП может работать быстрее, чем основная память гораздо большего размера. Большинство процессоров с 1980-х годов использовали один или несколько кешей, иногда на каскадных уровнях ; современные высокопроизводительные встроенные, настольные и серверные микропроцессоры могут иметь до шести типов кэша (между уровнями и функциями). Примерами кешей с определенной функцией являются D-cache и I-cache и резервный буфер трансляции для MMU.

кеша GPU.

Ранее графические процессоры (графические процессоры) часто имели ограниченные текстурные кэши, доступные только для чтения, и вводили порядок Мортона сдвинутые текстуры для улучшения согласованности 2D кэша. Промахи в кэше могут сильно повлиять на производительность, например если mipmapping не использовалось. Кэширование было важно для использования 32-битной (и более широкой) передачи данных текстуры, которая часто составляла всего 4 бита на пиксель, индексированных в сложных шаблонах произвольными UV-координатами и перспективными преобразованиями в обратном наложении текстур.

По мере развития графических процессоров (особенно с GPGPU вычислительными шейдерами ) они разрабатывали все более крупные и все более общие кеши, включая кеши инструкций для шейдеров, демонстрируя все более общие функции с кешами ЦП. Например, графические процессоры с архитектурой GT200 не имели кеш-памяти второго уровня, тогда как графический процессор Fermi имеет 768 КБ кеша последнего уровня, а графический процессор Kepler - 1536 КБ. кеша последнего уровня, а графический процессор Maxwell имеет 2048 КБ кеша последнего уровня. Эти кэши выросли для обработки примитивов синхронизации между потоками и атомарными операциями, а также взаимодействия с CPU-style MMU.

DSP

процессорами цифровых сигналов аналогичным образом обобщили на протяжении многих лет. В более ранних проектах использовалась оперативная память, питаемая DMA, но современные DSP, такие как Qualcomm Hexagon, часто включают очень похожий набор кешей на ЦП (например, Модифицированная гарвардская архитектура с общим L2, разделенным I-кешем L1 и D-кешем).

резервный буфер трансляции

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

Сетевой кеш

Информационно-ориентированные сети

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

Политики

Время с учетом наименее недавно использованного (TLRU)

Время с учетом времени наименее недавно использованного (TLRU) - это вариант LRU, разработанный для ситуации, когда сохраненное содержимое в кеш имеют допустимое время жизни. Алгоритм подходит для приложений сетевого кэширования, таких как информационные сети (ICN), сети доставки контента (CDN) и распределенные сети в целом. TLRU вводит новый термин: TTU (время использования). TTU - это отметка времени контента / страницы, которая определяет время удобства использования для контента на основе местоположения контента и объявления издателя контента. Благодаря этой метке времени, основанной на местоположении, TTU предоставляет больше возможностей локальному администратору для управления сетевым хранилищем. В алгоритме TLRU, когда приходит часть контента, узел кэша вычисляет локальное значение TTU на основе значения TTU, назначенного издателем контента. Локальное значение TTU рассчитывается с использованием локально определенной функции. После вычисления локального значения TTU замена содержимого выполняется на подмножестве общего содержимого, хранящегося в узле кэша. TLRU гарантирует, что менее популярный и небольшой жизненный контент должен быть заменен входящим контентом.

Наименее часто используемый недавно (LFRU)

Схема замещения кэша наименее часто используемого недавно (LFRU) сочетает в себе преимущества схем LFU и LRU. LFRU подходит для приложений кэширования «в сети», таких как информационные сети (ICN), сети доставки контента (CDN) и распределенные сети в целом. В LFRU кэш разделен на два раздела, которые называются привилегированными и непривилегированными. Привилегированный раздел можно определить как защищенный. Если контент очень популярен, он помещается в привилегированный раздел. Замена привилегированного раздела выполняется следующим образом: LFRU вытесняет контент из непривилегированного раздела, перемещает контент из привилегированного раздела в непривилегированный раздел и, наконец, вставляет новый контент в привилегированный раздел. В описанной выше процедуре LRU используется для привилегированного раздела, а приближенная схема LFU (ALFU) используется для непривилегированного раздела, отсюда и сокращение LFRU. Основная идея состоит в том, чтобы отфильтровать популярное локально содержимое с помощью схемы ALFU и переместить популярное содержимое в один из привилегированных разделов.

Программные кеши

Дисковый кеш

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

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

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

Веб-кеш

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

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

Другой формой кеширования является P2P-кэширование, при котором файлы, наиболее востребованные одноранговыми приложениями, хранятся в ISP кеш для ускорения передачи P2P. Точно так же существуют децентрализованные эквиваленты, которые позволяют сообществам выполнять ту же задачу для P2P-трафика, например, Corelli.

Memoization

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

Другие кеши

Демон BIND DNS кэширует отображение доменных имен на IP-адреса, как и библиотека преобразователя.

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

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

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

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

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

Буфер и кеш

Семантика «буфера» и «кеша» полностью не отличается; даже в этом случае существуют фундаментальные различия в намерениях между процессом кэширования и процессом буферизации.

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

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

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

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

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

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

См. Также
Ссылки
Дополнительная литература
Последняя правка сделана 2021-05-13 13:06:22
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте