Кеш

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

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

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

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

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

Использовать

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

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

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

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

Иерархия кеша

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

Если кешей несколько, они образуют иерархию кешей, которая является частью иерархии памяти . Отдельные кэши пронумерованы в соответствии с их иерархическим уровнем , т. Е. От уровня 1 до уровня n или L1, L2 для краткости и т. Д. Чем меньше номер, тем ближе кэш к быстрому «пользователю»; Таким образом, наименьшее число обозначает кэш с самым быстрым временем доступа, который будет произведен в первую очередь. Если кэш L1 не содержит требуемых данных, выполняется поиск в кэше L2 (обычно несколько медленнее, но большего размера) и т. Д. Это происходит до тех пор, пока данные не будут найдены на уровне кеша («попадание в кеш», см. Ниже) или поиск всех кешей завершился безуспешно («промах кеша», см. ниже). В последнем случае необходимо получить доступ к медленной фоновой памяти.

Если происходит попадание в кеш, например B. в кэше L3 запрошенные данные доставляются получателю доступа и в то же время передаются в кэш L1; для этого должна уступить место строка кэша, которая «погружается» в кэш L2.

  • В случае инклюзивного кэша каждый уровень кэша прозрачен сам по себе, т.е. ЧАС. строка кэша, которая находится в кэше L1, также присутствует в кешах L2 и L3. Если строка кэша «вытесняется» из кеша L1 (перезаписывается данными с другого адреса), больше ничего делать не нужно - она ​​по-прежнему доступна в кэше L2 (если не требуется обратная запись или подобное).
  • В случае монопольного кэша строка адреса кэша доступна только один раз на всех уровнях кэша. Кэш линии адреса А в кэше L1 является не также доступна в кэше L2 или L3. Если он вытесняется из кеша L1, он может быть либо полностью отброшен, либо должен быть явно скопирован в кэш L2. Там также смещается (другая) строка кэша, чтобы освободить место для тонущей. Этот другой теперь погружается в кэш L3, где должна уступить место третья строка кэша.

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

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

Стратегии

Размер кэша

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

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

Эксплуатация местоположения

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

Временная местность
Поскольку доступ к данным осуществляется повторно (например, при обработке цикла программы), более вероятно, что данные, к которым уже был осуществлен доступ, также будут доступны снова. Поэтому предпочтительно хранить эти данные в кэше. Это также приводит к необходимости удалять из кеша старые данные, которые не использовались долгое время, чтобы освободить место для новых данных. Этот процесс называется «репрессией».
Пространственная местность
Поскольку программный код и данные не разбросаны случайным образом в адресном пространстве, а расположены «один за другим», а иногда только в определенных адресных областях (код, данные, сегмент стека , куча и т. Д.), Это происходит после доступа к конкретный адрес - вероятно, что осуществляется доступ к «ближайшему» адресу (читай: разница между двумя адресами очень мала). При обработке программы z. Например, одна команда обрабатывается одна за другой, причем они находятся «одна за другой» в памяти (если нет команды перехода). Многие структуры данных, такие как массивы, также расположены в памяти «одна за другой».

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

организация

Кэш состоит из (в основном) фиксированного количества записей, каждая запись состоит из:

Строка кеширования
Фактические кэшированные данные (например, 64 байта для текущих процессоров ПК)
Адресная метка
Адрес на фоновом носителе, с которого начинаются кэшированные данные.
Информация о доступе / управлении
v. а. Информация для «стратегии вытеснения» (см. Ниже)

См. Также # записей в кэше ниже .

Cache-Line / Cache-Line

Строка кэша - это наименьшая административная единица в кэше процессоров. Это копия хранилища. Таким образом, доступ из кэш-памяти к ЦП или к основной памяти осуществляется за одну поблочную передачу. Размер строки кэша составляет 16 байтов ( Intel 80486 ), 32 байта (от Pentium P5 до Pentium III) и 64 байта (от Pentium 4 до текущих процессоров Core-i / AMD ZEN в 2018 году). Минимальная длина получается из ширины шины памяти, умноженной на глубину предварительной выборки памяти.

Блокировать числовые теги вместо адресных тегов

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

пример

Строка кэша составляет 64 байта. Следует указать, что данные могут быть прочитаны и записаны только с начальными адресами, например. B. 0, 64, 128, 192, 256, ... Фоновый носитель разделен на блоки, размер которых равен размеру строки кэша.

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

Разделение тегов на блоки / предложения

Полностью ассоциативный кеш

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

организация Количество комплектов Ассоциативность
DM 1
FA 1 ( )
SA

В зависимости от того, насколько это деление сделано, говорят об одном из трех типов организации кеша:

Mapped direct (англ. Direct mapped , сокращенно DM )
, г. То есть каждый блок представляет свое собственное предложение, поэтому предложений столько, сколько блоков. Таким образом, за данный адрес отвечает ровно один блок кеша. Таким образом , существует прямая отображение между адресом фона памяти и блоков кэш - памяти, отсюда и название. При запросе к такому кешу вам нужно прочитать только один блок кеша (точнее, проверить связанный тег , см. Ниже), что минимизирует требования к оборудованию для компаратора тегов. В свою очередь, эффективность кеша ограничена, так как могут быть свободные блоки кеша, которые не используются, см. Conflict Miss ниже.
Полностью ассоциативный (сокращенно FA )
, г. то есть есть только одно предложение, которое содержит все блоки. Это означает, что можно кэшировать каждый адрес в каждом блоке кеша. Поэтому при запросе кэш-памяти необходимо проверять все теги кеша. Поскольку кэширование должно быть максимально быстрым, это делается параллельно, что увеличивает количество оборудования, необходимого для компараторов тегов. Преимущество, однако, в том, что кэш всегда может хранить данные, пока любой блок кеша все еще свободен.
Установить ассоциативный или количественно-ассоциативный (англ. Set associative, сокращенно SA )
выбирается между 2 и , d. то есть блоки кэша организованы в наборы блоков каждый. Здесь кэши с прямым отображением выбираются полностью ассоциативно (т.е. свободно). Этот кэш затем называется ассоциативным n-кратным предложением или для краткости n-кратным ассоциативным. Этот тип кеша представляет собой компромисс между сложностью оборудования и эффективностью кеша: по сравнению с кешем DM вы получаете эффективность, по сравнению с кешем FA вы экономите оборудование.

Первые два являются частным случаем ассоциативного кэша предложений. Таким образом, напрямую отображаемый и полностью ассоциативный кэш может быть получен из ассоциативного кеша: n = 1 ведет к напрямую сопоставленному кешу, n = m - к полностью ассоциативному кешу.

Пояснение на примере

Основные размеры кеша:

  • Размер хранимых данных (т.е. размер кеша): здесь в примере 64  КиБ
  • Размер охватываемого адресного пространства: здесь в примере 4  ГиБ
  • Длина строки кэша: здесь в примере 64 байта
  • Гранулярность данных: здесь в примере 1 байт
  • Наличие грязных и действительных тегов.

Независимо от структуры кеш состоит из 64 КиБ / 64 байта = 1024 строк кеша.

Полностью ассоциативный кеш
31 год 30-е 29 28 год 27 26 25-е 24 23 22-е 21 год 20-е 19-е 18-е 17-е 16 15-е 14-е 13-е 12-е 11 10 9 8-е 7-е 6-е 5 4-й 3 2 1 0
Длина адресной метки Позиция байта

Есть одна группа кэша, которая включает все 1024 строки кэша. Каждое слово данных основной памяти может храниться в любой из 1024 строк кэша одной группы кэша. Требуется 1024 компаратора, которые должны сравнивать log2 (4 ГиБ / 64 байта) = log2 (4 ГиБ) -log2 (64 байта) бит = 32-6 = 26 бит. Эти 26 бит прикреплены к каждой строке кэша как тег адреса. Аппаратные усилия:

  • 1024 компаратора
  • Фактический кеш 1024 × 64 × 8 бит
  • Адресная метка 1024 × 26 бит
  • Допустимые теги 1024 × 64 бит
  • 1024 × 64-битные грязные теги
  • 1024 ×? бит для тегов LRU
Кэш с прямым отображением / простой или неассоциативный кеш
31 год 30-е 29 28 год 27 26 25-е 24 23 22-е 21 год 20-е 19-е 18-е 17-е 16 15-е 14-е 13-е 12-е 11 10 9 8-е 7-е 6-е 5 4-й 3 2 1 0
Длина адресной метки группа кеша используется Позиция байта

Есть 1024 группы кэша, каждая с одной строкой кэша. Каждое слово данных основной памяти может храниться только в этой строке кэша, принадлежащей его адресу. Группа кэша складывается из битов с 15 по 6 адреса. Требуется только один компаратор, который должен сравнивать биты log2 (4 ГиБ) -log2 (64 КиБ) = 16 бит. Эти 16 бит прикреплены к каждой строке кэша как тег адреса. Аппаратные усилия:

  • Компаратор
  • Фактический кеш 1024 × 64 × 8 бит
  • Адресная метка 1024 × 16 бит
  • Допустимые теги 1024 × 64 бит
  • 1024 × 64-битные грязные теги
  • Нет тегов LRU
Двойной ассоциативный кеш
31 год 30-е 29 28 год 27 26 25-е 24 23 22-е 21 год 20-е 19-е 18-е 17-е 16 15-е 14-е 13-е 12-е 11 10 9 8-е 7-е 6-е 5 4-й 3 2 1 0
Длина адресной метки группа кеша используется Позиция байта

Имеется 512 групп кэша с двумя строками кэша в каждой. Каждое слово данных основной памяти может храниться в одной из двух строк кэша, принадлежащих его адресу. Группа кэша складывается из битов с 14 по 6 адреса. Требуются два компаратора, которые должны сравнивать log2 (4 ГиБ) -log2 (64 КиБ) +1 бит = 17 бит. Эти 17 бит прикреплены к каждой строке кэша в качестве адресной метки. Аппаратные усилия:

  • Два компаратора
  • Фактический кеш 1024 × 64 × 8 бит
  • Адресная метка 1024 × 17 бит
  • Допустимые теги 1024 × 64 бит
  • 1024 × 64-битные грязные теги
  • Теги LRU 1024 × 1 бит
2 ^ n-кратный ассоциативный кеш
31 год 30-е 29 28 год 27 26 25-е 24 23 22-е 21 год 20-е 19-е 18-е 17-е 16 15-е 14-е 13-е 12-е 11 10 9 8-е 7-е 6-е 5 4-й 3 2 1 0
Длина адресной метки группа кеша используется Позиция байта

Есть 1024/2 ^ n групп кеша по 2 ^ n строк в каждой. Каждое слово данных основной памяти может храниться в одной из 2 ^ n строк кэша, принадлежащих его адресу. Группа кэша складывается из битов с 15- (n-1) по 6 адреса. Требуется 2 ^ n компараторов, которые должны сравнивать log2 (4 ГиБ) -log2 (64 КиБ) + n бит = 16+ (n-1) бит. Эти 16+ (n-1) битов прикрепляются к каждой строке кэша как тег адреса. Аппаратные усилия:

  • 2 ^ n компараторов
  • Фактический кеш 1024 × 64 × 8 бит
  • Адресная метка 1024 × (16 + n-1) бит
  • Допустимые теги 1024 × 64 бит
  • 1024 × 64-битные грязные теги
  • 1024 × многобитовые теги LRU

Попадания в кеш и промахи

Процесс, в котором данные запроса к кэшу доступны в том же самом, называется «попаданием в кэш», обратное называется «промахом кэша».

Чтобы получить количественные показатели для оценки эффективности кеша, определены два параметра:

Скорость попадания
Количество запросов с попаданием в кеш, деленное на общее количество запросов, сделанных к этому кешу. Как легко видеть из определения, эта величина находится между нулем и единицей. Частота попаданий, например, B. 0,7 (= 70%) означает, что в 70% всех запросов к кешу кэш мог немедленно доставить данные и должен был соответствовать в 30% всех запросов.
Рейтинг промахов
Аналогично проценту попаданий, это определяется как количество запросов, для которых данные не были доступны в кэше, деленное на общее количество запросов. Применяется следующее: Коэффициент промахов = 1 - процент попаданий.

Есть три типа промахов кеша:

Вместимость
Кеш слишком мал. Данные были доступны в кеше, но были удалены из него. Если к этому адресу затем обращаются снова, этот промах называется "промахом емкости". Единственное лекарство - это больший кеш.
Конфликт
Из-за ассоциативной организации наборов (также применимо к кэшам DM), возможно, что в одном наборе больше не хватает места, в то время как в других наборах все еще есть свободные блоки кеша. Затем необходимо удалить блок из переполненной записи, хотя на самом деле в кэше еще есть место. Если к этому удаленному блоку обращаются снова, этот промах в кэше называется «конфликтным промахом». Это можно исправить, увеличив количество блоков кеша на запись, то есть увеличив ассоциативность. В случае полностью ассоциативных кешей (которые имеют только одну запись) конфликтные пропуски отсутствуют из-за задействованного принципа.
Принудительный
«Обязательный промах» или «промах при холодном запуске» - это имя, присвоенное первому доступу к адресу, данные которого еще не находятся в кэше, и в то же время в кэше все еще есть свободное место. Отличие от двух других промахов в том, что здесь нет репрессии, но блок описывается впервые / заново. Предотвратить трудно или невозможно. Современные процессоры имеют блоки предварительной выборки, которые автоматически загружают данные в кеши, если еще есть место. Это сделано для уменьшения количества обязательных промахов.

Эти три типа также известны как «Три С» для краткости. В многопроцессорных системах, когда используется протокол согласования кэша типа Write-Invalidate , может быть добавлен четвертый «C», а именно «Coherency Miss»: когда процессор записывает в блок кеша, тот же блок в кэше второй процессор не работает. Если второй процессор должен получить доступ к адресу, который был покрыт этим удаленным блоком кэша, это приводит к нарушению когерентности.

Способ работы

При управлении кешем имеет смысл хранить в кеше только те блоки, к которым часто обращаются. Для этого существуют различные стратегии замены. Часто используемым вариантом является стратегия LRU ( л восток г ecently у СЭД ), в которой блок всегда обмен , что не обращались в течение самого длительного времени. Современные процессоры (например, AMD Athlon ) в основном реализуют стратегию замены псевдо-LRU, которая работает почти как настоящий LRU, но ее легче реализовать на аппаратном уровне.

Стратегии вытеснения

FIFO (первым пришел - первым ушел)
Самая старая запись подавляется.
LRU (наименее недавно использованный)
Запись, к которой не было доступа в течение длительного времени, перемещается.
LFU (наименее часто используемый)
Редко читаемая запись подавляется. Однако он не хранит полные отметки времени , для чего потребовалось бы относительно длинное целое число. Скорее всего, используется всего несколько битов (обычно два, но возможен только один), чтобы пометить запись кэша как используемую более или менее часто. Биты обновляются параллельно смещению.
Случайный
Случайный ввод подавляется.
ЧАСЫ
Данные хранятся в кеше в том порядке, в котором к ним обращаются. При доступе к элементу данных для этого блока кэша устанавливается бит. В случае промаха первая дата без установленного бита просматривается спереди назад и заменяется. Бит сбрасывается для всех прошедших данных. Также отмечается дата последней загрузки в кэш. Отсюда начинается поиск даты, которую можно заменить.
Оптимально
Оптимальным является метод Ласло Белади , при котором смещается область памяти, к которой не обращались дольше всего. Однако это применимо только в том случае, если полный поток программы известен заранее (т.е. это так называемый автономный метод, в отличие от FIFO и LRU, которые являются онлайн-методами). Программная последовательность почти никогда не известна заранее; следовательно, лучшие практики не могут быть использованы на практике. Однако оптимальный алгоритм может служить сравнением с другими методами.

Стратегия письма

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

Копировать обратно (обратная запись)
При записи блок для записи не сразу сохраняется на следующем более высоком уровне памяти, а сначала в кэше. Это создает несоответствие между кешем и кэшируемой памятью. Поэтому последний содержит устаревшую информацию. Только когда слово вытесняется из кеша, оно также записывается на следующий более высокий уровень памяти. Кроме того, каждому блоку кеша присваивается так называемый грязный бит, который указывает, нужно ли копировать блок обратно при его замене. Это приводит к проблемам с доступом к памяти других процессоров или устройств прямого доступа к памяти, поскольку они считывают устаревшую информацию. Лекарство здесь протоколы согласованности кеша такие. B. MESI для систем UMA .
Непрерывная запись (сквозная запись)
Записываемый блок немедленно сохраняется на следующем более высоком уровне памяти. Это обеспечивает согласованность. Чтобы процессору не приходилось каждый раз ждать, пока блок будет сохранен на следующем более высоком уровне памяти (который медленнее, чем кеш), используется буфер записи. Однако, когда он заполняется, процессор должен остановиться и подождать.

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

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

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

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

Очистка кеша

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

разнообразный

Записи в кеше

Для каждого блока кеша в кеше хранится следующее:

  • Фактические данные
  • День (часть адреса)
  • Несколько битов состояния, например:
модифицированный или грязный
Указывает, был ли изменен этот блок кэша (только для кэша с обратной записью).
различные биты состояния в зависимости от протокола согласованности кеша , например Б. по одному биту для:
владелец
Эквивалентно «изменено и передано». Указывает, что блок был изменен и находится в других кэшах. Владелец несет ответственность за обновление основной памяти при удалении блока из кеша. Новым владельцем становится процессор, который последним записывает в блок кэша.
эксклюзивный
Указывает, что блок не был изменен и его нет ни в каком другом кэше.
общий
Иногда имеет разные значения: в MESI это означает, что блок не был изменен, но также доступен в кэшах других процессоров (также там не изменился). В случае MOESI это просто означает, что блок находится в кэше других процессоров. Здесь также допускается, что блок был изменен, т.е. несовместим с основной памятью. Однако в этом случае есть «владелец» (см. Выше), который отвечает за обновление основной памяти.
инвалид
Указывает, свободен ли блок (т.е. заполнен недопустимыми данными) или занят (т.е. заполнен действительными данными).

Горячие и холодные тайники

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

Примеры

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

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

Текущие процессоры (например, AMD Ryzen , Intel Core i series , IBM Power 9 ) в основном имеют три уровня кэш-памяти: L1, L2 и L3. Общие размеры кэшей L1 составляют от 4 до 256  КБ на ядро ​​процессора, кэш L2 - от 64 до 1024 КБ (в основном также на ядро), кэш L3 от 2 до 32 МБ (общий для всех ядер). В более дешевых версиях кэш L3 иногда не используется или отключается, но кеш L2 иногда немного больше. Кэш-память процессора как дополнительный чип на материнской плате больше не строится как дополнительный кристалл в том же корпусе чипа (см. Multi Chip Package ).

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

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

В случае многопроцессорных систем, помимо прочего , проводится различие. между структурами SIMD и MIMD (одиночная / множественная инструкция - множественные данные). В случае систем MIMD велика вероятность того, что разные процессоры будут обращаться к разным областям памяти, тогда как в случае SIMD она меньше. Затем можно настроить конфигурацию кеша.

Современные процессоры имеют отдельные кеши L1 для программ и данных (кеш чтения и записи); иногда это все еще имеет место в L2 ( Montecito ). Здесь говорят об архитектуре кеш-памяти Гарварда . Это имеет то преимущество, что вы можете использовать разные конструкции кэша для разных шаблонов доступа для загрузки программного кода и данных. Кроме того, с помощью отдельных кешей они могут быть пространственно лучше размещены по отношению к соответствующим блокам на кристалле процессора, таким образом сокращая критические пути в компоновке процессора. Кроме того, инструкции и данные могут быть прочитаны / записаны одновременно, что еще больше уменьшает узкое место фон Неймана . Одним из недостатков является то, что самомодифицирующийся код нужно обрабатывать отдельно, что значительно замедляет его выполнение. Однако из соображений безопасности и из-за того, что его часто трудно понять, трудно тестировать и, следовательно, сложно поддерживать, сегодня он все равно используется очень редко.

Кеш диска

В случае жестких дисков кэш расположен на плате управления (см. Кэш жесткого диска ) или на отдельной плате, контроллере жесткого диска .

Размер текущих жестких дисков - в зависимости от предполагаемого использования жесткого диска производителем - составляет от 8 до 64 МБ (по состоянию на 2012 год).

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

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

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

Примеры:

Кэш жесткого диска (управляется операционной системой)
Жесткий диск → основная память
Данные приложения ( мемоизация )
Расчет → основная память
Кеш браузера
Сеть → (жесткий диск / RAM)
веб сервер
База данных → HTML- файл ( HTTP-кеширование )

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

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

Кеш поисковой системы

Поисковик кэш кэш чтения поисковой системы. Поисковая система состоит из трех основных компонентов:

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

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

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

Самая распространенная поисковая система в Германии - Google ; поэтому их стратегии кэширования, индексации и поиска представляют особый интерес. Периодичность проверки веб-сайтов поисковым роботом составляет от одной до четырех недель для большинства веб-сайтов («[...] контент обычно обновляется каждые 7 дней »). Так называемый робот Googlebot исследует веб-сайты, о которых сообщают .

веб ссылки

Викисловарь: Кэш  - объяснение значений, происхождение слов, синонимы, переводы

Индивидуальные доказательства

  1. Кэш на duden.de
  2. ^ Французский словарь. Перевод: кеш. (Больше не доступны в Интернете.) Ларусс , архивируются с оригинала на 28 января 2013 года ; Доступ к 20 ноября 2018 года .
  3. Определение кеша. Оксфордский университет , доступ к 18 февраля 2012 года .
  4. ^ Джон Хеннесси, Дэвид Паттерсон: Компьютерная архитектура. Количественный подход. 4-е издание. Издательство Morgan Kaufmann, ISBN 978-0-12-370490-0 (английский), стр. C-11-C-12
  5. « Краткий обзор функциональности кеша Google ( Memento от 28 июля 2017 г. в Интернет-архиве )» (с функцией поиска)