Устройство кэш-памяти и стратегии кэширования

Оглавление

Понятие кэш-памяти———————————————————————————–3
Уровни кэша—————————————————————————————3
Кэш-память микропроцессоров PentiumIII——————————————————4
Устройство кэш-памяти и стратегии кэширования——————————————–5
Заключение—————————————————————————————11
Список литературы———————————————————————————12
Понятие кэш-памяти

Кэш (англ. cache, от фр. cacher — прятать; произносится [kæʃ] — кэш) — промежуточный буфер с быстрым доступом, содержащий информацию, которая может быть запрошена с наибольшей вероятностью. Доступ к данным в кэше идёт быстрее, чем выборка исходных данных из оперативной (ОЗУ) или более медленной внешней (жёсткий диск или твердотельный накопитель) памяти, за счёт чего уменьшается среднее время доступа и увеличивается общая производительность компьютерной системы.
Кэш микропроцессора — Кэш, используемый микропроцессором для уменьшения среднего времени доступа к компьютерной памяти. Является одним из верхних уровней иерархии памяти. Кэш использует небольшую, но очень быструю память SRAM, которая хранит копию часто используемых данных из основной памяти. Если большая часть запросов в память будет обрабатываться кэшем, средняя задержка обращения к памяти будет приближаться к задержкам работы кэша.
Когда процессору нужно обратиться в память для чтения или записи ячейки, он сначала проверяет, доступна ли копия требуемых данных в кэше. В случае успеха проверки процессор сразу может произвести операцию работы с памятью, используя кэш. В противном случае процессору пришлось бы ожидать прохождения запроса в основную память, которая является в несколько раз более медленной.
Большинство современных микропроцессоров для бытовых компьютеров и серверов имеют как минимум три независимых кэша: кэш инструкций для ускорения загрузки машинного кода микропроцессора, кэш данных для ускорения чтения и записи данных, и буфер ассоциативной трансляции (TLB) для ускорения трансляции виртуальных (математических) адресов в физические, как для инструкций, так и для данных.
Уровни кэша
Кэш центрального процессора разделён на несколько уровней. В универсальном процессоре в настоящее время число уровней может достигать 3. Кэш-память PentiumIII имеет два уровня.
Самой быстрой памятью является кэш первого уровня — L1-cache. Небольшая (несколько десятков килобайт) сверхбыстрая память, предназначнная для хранения промежуточных результатов вычислений.
По сути, она является неотъемлемой частью процессора, поскольку расположена на одном с ним кристалле и входит в состав функциональных блоков. Большинство процессоров без L1 кэша не могут функционировать. L1 кэш работает на частоте процессора, и, в общем случае, обращение к нему может производиться каждый такт. Зачастую является возможным выполнять несколько операций чтения/записи одновременно. Латентность доступа обычно равна 2−4 тактам ядра. Объём обычно невелик — не более 128 Кбайт.
Вторым по быстродействию является L2-cache — кэш второго уровня. Хотя эта память чуть помедленнее, зато больше. Обычно он расположен на кристалле, как и L1. Объём L2 кэша от 128 Кбайт до 1−12 Мбайт. В современных многоядерных процессорах кэш второго уровня, находясь на том же кристалле, является памятью раздельного пользования — при общем объёме кэша в nM Мбайт на каждое ядро приходится по nM/nC Мбайта, где nC количество ядер процессора. Обычно латентность L2 кэша, расположенного на кристалле ядра, составляет от 8 до 20 тактов ядра.
Проблему синхронизации между различными кэшами (как одного, так и множества процессоров) решается Когерентностью кэша. Существует три варианта обмена информацией между кэш-памятью различных уровней, или, как говорят, кэш-архитектуры: инклюзивная, эксклюзивная и неэксклюзивная.
Инклюзивная архитектура предполагает дублирование информации кэша верхнего уровня в нижнем (предпочитает фирма Intel).
Эксклюзивная кэш-память предполагает уникальность информации, находящейся в различных уровнях кэша.
В неэксклюзивной кэши могут вести себя как угодно.
Одна из фундаментальных характеристик кэш-памяти — уровень ассоциативности — отображает её логическую сегментацию. Дело в том, что последовательный перебор всех строк кэша в поисках необходимых данных потребовал бы десятков тактов и свёл бы на нет весь выигрыш от использования встроенной в ЦП памяти. Поэтому ячейки ОЗУ жёстко привязываются к строкам кэш-памяти (в каждой строке могут быть данные из фиксированного набора адресов), что значительно сокращает время поиска. С каждой ячейкой ОЗУ может быть связано более одной строки кэш-памяти: например, n-канальная ассоциативность обозначает, что информация по некоторому адресу оперативной памяти может храниться в n местах кэш-памяти.
При одинаковом объеме кэша схема с большей ассоциативностью будет наименее быстрой, но наиболее эффективной
Кэш-память микропроцессоров
Pentium
III

Процессор Intel Pentium III – процессор архитектуры P6, включает в себя: динамическое исполнение команд, системную шину с множественными транзакциями и технологию Intel MMX™ для обработки данных мультимедиа. Технология изготовления с разрешающей способностью 0.25 микрон позволяет разместить на кристалле более 9.5 миллионов транзисторов. Процессор содержит 32 Kб неблокируемой кэш-памяти первого уровня (16Кб/16Кб) и унифицированную неблокируемую кэш-память второго уровня емкостью 512 Кб, функционирующую на вдвое меньшей частоте, чем ядро. Процессор Intel® Pentium®III поддерживает кэширование памяти с объемом адресного пространства 4 Гб, и позволяет создавать масштабируемые системы с двумя процессорами и физической памятью объемом до 64 Гб.
Katmai
Кэш второго уровня объёмом 512 Кб работает на половине частоты ядра и выполнен в виде двух микросхем BSRAM (производства Toshiba и NEC), расположенных друг над другом справа от кристалла процессора. В качестве tag-RAM используется микросхема Intel 82459AD, расположенная на обратной стороне процессорной платы под микросхемами кэш-памяти.
Coppermine
Процессоры на ядре Coppermine выпускались по 180 нм технологии, имели интегрированную кэш-память второго уровня, работающую на частоте ядра. Кроме того, кэш-память имеет 256-битную шину (в отличие от процессоров на ядре Katmai, имевших 64-битную шину кэш-памяти), что значительно повышает её быстродействие. За счёт интегрированной кэш-памяти число транзисторов возросло до 28,1 млн
Процессоры Pentium III 733 МГц на ядре Coppermine c уменьшенной до 128 Кб кэш-памятью второго уровня использовались компанией Microsoft в приставке Xbox. В отличие от процессоров Celeron на ядре Coppermine-128, также имеющих 128 Кб кэша, данные процессоры имеют 8-канальный ассоциативный кэш второго уровня (Celeron имеет 4-канальный ассоциативный кэш)
Tualatin
Процессоры Pentium III-S на ядре Tualatin имели 512 Кб кэш-памяти второго уровня и предназначались для высокопроизводительных рабочих станций и серверов. В процессорах Pentium III на ядре Tualatin 256 Кб кэш-памяти были аппаратно отключены. Частота системной шины составляла 133 МГц для обеих модификаций.
Устройство кэш-памяти и стратегии кэширования

Кэш-память является результатом попыток соединить достоинства быстрых SRAM и дешевых DRAM для создания максимально эффективной системы памяти. Принцип кэширования поясняется на рисунке 1.

Между процессором и основной памятью DRAM предусматривается быстрый кэш SRAM. В нем хранятся часто требуемые данные, которые он способен передавать очень быстро. Процесс управляется кэш-контроллером, который может обеспечивать различные режимы записи – такие, как
сквозная или отложенная запись.
Рисунок 1. Принцип кэширования.
Кэш-блок располагается между CPU и основной памятью; он состоит из кэш-контроллера и кэш-памяти SRAM. Они могут быть встроены в кристалл процессора (кэш-память, встроенная в кристалл), а могут существовать и в виде отдельного элемента.
Поскольку последовательные операции доступа к памяти в основном обращаются к ограниченному пространству адресов, то имеет смысл разместить наиболее часто требуемые данные в небольшой быстродействующей памяти – кэш-памяти. Преимуществом такого подхода является существенное уменьшение времени доступа, которое при большом количестве операций доступа к памяти обеспечивает значительное повышение быстродействия. Данные и команды, которые в данный момент не требуются, могут храниться в более медленной основной памяти, что не приводит к заметному замедлению выполнения программы. Принцип кэширования, заключающийся в использовании небольшой SRAM и большой, но более медленной DRAM, сочетает в себе преимущества быстрых SRAM и более дешевых DRAM.

На рисунке 2 изображены основная и кэш память. Каждая строка — группа ячеек памяти содержит данные, организованные в кэш-линии. Размер каждой кэш-линии может различаться в разных процессорах, но для большинства x86-процессоров он составляет 64 байта. Размер кэш-линии обычно больше размера данных, к которому возможен доступ из одной машинной команды (типичные размеры от 1 до 16 байт). Каждая группа данных в памяти размером в 1 кэш-линию имеет порядковый номер. Для основной памяти этот номер является адресом памяти с отброшенными младшими битами. В кэше каждой кэш-линии дополнительно ставится в соответствие тег, который является адресом продублированных в этой кэш-линии данных в основной памяти.Рисунок 2. Диаграмма кэша памяти ЦПУ
Когда процессор читает информацию, он обычно направляет соответствующий адрес в память. Когда процессору нужно выполнить команду, он сначала анализирует состояние своих регистров данных. Если необходимых данных в регистрах нет, он обращается к кэш-памяти первого уровня, а затем — к кэш-памяти второго уровня. Если данных нет ни в одной кэш-памяти, процессор обращается к оперативной памяти. И только в том случае, если нужных данных нет и там, он считывает данные с жесткого диска.
Однако в нашем случае между процессором и адресом основной памяти находится кэш-контроллер. Он определяет, находятся ли нужные данные в кэш-памяти SRAM. Если да, то ситуация называется "кэш-попаданием". Случай, когда нужные данные находятся в основной памяти, называется "кэш-промахом". В первом случае кэш-контроллер читает данные из быстрой кэш-памяти и направляет их процессору. Это обычно происходит без ожидания, т.е. с максимальной скоростью шины. Запрос на чтение перехватывается кэш-памятью, и основная память о нем не знает.
В случае кэш-промаха кэш-контроллер должен вначале прочитать данные из основной памяти; таким образом, запрос на чтение переадресуется в основную память. Поскольку это обычно занимает больше времени, то требуется определенное число циклов ожидания; кэш-контроллер сбрасывает сигнал готовности (или другой соответствующий сигнал), и процессор поэтому вставляет циклы ожидания. Одновременно с этим обращается к памяти и кэш-контроллер. Внутренняя организация большинства моделей кэш-памяти такова, что в том случае, когда происходит запрос на чтение информации, которой нет в кэш-памяти, из основной памяти в SRAM читаются не только непосредственно запрашиваемые байты данных, но и вся кэш-строка. Эта операция известна как заполнение кэш-строки. Перед тем, как записать в кэш-память новые данные, нужно, чтобы содержащиеся в ней результаты предыдущих операций были сохранены в основной памяти. Кэш-контроллер достаточно разумен для того, чтобы выполнить циклы чтения и записи данных в основную память независимо друг от друга. Байты данных, запрашиваемые процессором, немедленно, т.е. до завершения полной обработки всей кэш-строки, передаются ему кэш-контроллером.
Кэш-строки обычно составляют 16 или 32 байта, поскольку, как уже говорилось ранее, данные и команды формируются в виде блоков; поэтому очень вероятно, что следующий запрос обратится к информации, содержащейся в той же кэш-строке. Это увеличивает скорость доступа. Кроме того, большинство кэш-контроллеров реализует так называемый пакетный режим, посредством которого считывается целиком блок данных, в котором содержится больше байт, чем позволяет ширина шины (поэтому для чтения блока данных требуется несколько циклов шины). Пакетный режим почти удваивает скорость передачи данных шиной, поэтому целая кэш-строка читается значительно быстрее, чем отдельное значение. Таким образом, организация кэш-памяти в виде кэш-строк увеличивает быстродействие системы.
В случае, когда процессор записывает данные, кэш-контроллер определяет, находятся ли данные в кэш-памяти SRAM. Если да, то данные из процессора записываются в кэш. Существует три различных стратегии, определяющие дальнейшие действия кэш-контроллера: сквозная запись, отложенная запись (известная также как обратное копирование) и запись с размещением. Первые две стратегии относятся к случаю кэш-попадания, последняя – к ситуации кэш-промаха.
Наиболее простым методом является сквозная запись, которая реализована в большинстве моделей кэш-памяти. Операция записи, инициированная процессором, всегда приводит к передаче данных в основную память, даже в случае кэш-попадания; все операции записи проходят через основную память. Это, естественно, касается также записи и обновления соответствующих ячеек кэш-памяти. Сквозная запись имеет тот недостаток, что все операции записи должны производиться также и с основной, более медленной памятью. Если не принять дополнительных мер, то это в принципе может привести к отключению кэш-памяти в режиме записи, результатом чего явится неоправданно большое время доступа при записи. По этой причине модели кэш-памяти со сквозной записью используют быстрые буферы записи, позволяющие буферизовать операции доступа на запись. Однако это возможно только до тех пор, пока буфер не заполнится. Следовательно, многократные запросы на запись неизбежно приводят к состоянию ожидания. С другой стороны, в мультипроцессорных системах стратегия сквозной записи автоматически обеспечивает согласованность содержимого основной памяти, поскольку все данные обновляются через основную память. Согласованность содержимого кэш-памяти, однако, в мультипроцессорных системах не гарантируется. Например, один из процессоров может переписать содержимое основной памяти, а кэш-память другого процессора может ничего об этом не знать. Только цикл просмотра может восстановить согласованность данных.
Кэш с отложенной записью концентрирует все операции записи и обновляет только содержимое элемента кэш-памяти, не затрагивая содержимого основной памяти. Только по определенной команде измененное содержимое кэш-строки записывается в основную память, обновляя содержащуюся в ней информацию. В компьютерах Pentium это может быть выполнено программным путем, например, посредством команды WBIND (записать и аннулировать данные кэш-памяти), путем выдачи аппаратного сигнала FLUSH, при безусловной замене одной кэш-строки другой в случае отсутствия запрашиваемых данных в кэш-памяти, а также при выполнении внутреннего или внешнего цикла просмотра. Недостатком кэш-памяти с отложенной записью является то, что смена строк кэш-памяти занимает больше времени, поскольку до того, как новые данные могут быть записаны в кэш, прежнее содержимое кэш-памяти должно быть записано в основную память. Этот недостаток, однако, более чем компенсируется тем, что предшествующие запросы на запись не проходят через медленную общую память.
Две стратегии кэш-памяти, описываемые здесь, не определяют ее поведения в случае кэш-промаха, т.е. если адрес, к которому происходит обращение, в кэш-памяти отсутствует. Если кэш реализует стратегию записи с размещением, кэш-контроллер заполняет пространство кэш-памяти кэш-строкой, в которую входят данные по запрашиваемому адресу. Обычно данные вначале записываются в основную память; затем кэш-контроллер считывает в кэш ту кэш-строку, элемент которой подлежит обновлению. Поскольку сначала происходит запись информации, процессор может немедленно возобновить выполнение программы. Кэш-контроллер независимо от этого выполняет запись с размещением параллельно с работой процессора. В наихудшем случае он вначале записывает обновленную кэш-строку в основную память, чтобы затем заполнить ее новыми данными. По этой причине и из-за сложности алгоритма работы кэш-памяти большинство моделей кэш-памяти не использует стратегию записи с размещением. Запросы на запись в случае кэш-промаха просто игнорируются кэш-памятью и передаются в основную память.
Если к основной памяти имеют доступ другие процессоры или компоненты системы, как происходит, например, при работе DMA-контроллера, и содержимое памяти изменяется, кэш-контроллер должен информировать соответствующую SRAM о том, что данные в основной памяти были изменены и являются недействительными. Эта операция известна как аннулирование кэш-памяти. Если в кэш-контроллере реализована стратегия отложенной записи и если нужные данные находятся в кэш-памяти, то ее содержимое передается в основную память при особых условиях. Это происходит, например, в том случае, если схема DMA должна передать информацию из основной памяти периферийному устройству, но текущие значения находятся только в кэш-памяти SRAM. Такая операция называется очисткой кэш-памяти.
Программные варианты кэш-памяти, реализованные на компьютере, обладают похожими свойствами. DOS, например, для доступа к гибким и жестким дискам использует внутренние буферы. Можно задать число таких буферов посредством команды BUFFERS в CONFIG.SYS. Эти буферы служат в качестве кэш-памяти, расположенной между процессором, основной памятью и контроллером гибких или жестких дисков. В такой программной кэш-памяти не реализована стратегия сквозной записи, поэтому в случае сбоя системы часть данных, еще не записанных на диск, может находиться в буфере. Только при закрытии обрабатываемого файла или в том случае, если буфер требуется для другого файла или записи, DOS физически записывает содержимое буфера на диск. Выполняя функции 0dh, 5d01h, 68h или выдав прерывание INT 21h, можно заставить DOS выполнить очистку кэш-памяти. С другой стороны, большинство моделей, реализующих программную кэш-памяти для жестких дисков (например, последние версии SMARTDRV, эмулирующие кэш для операций доступа к жесткому диску) в основной памяти, использует стратегию сквозной записи. Все операции записи обращаются при этом к диску, и только чтение производится с копии, размещенной в основной памяти. Новейшие версии SMARTDRV.SYS используют стратегию отложенной записи. В этом случае доступ к диску на запись производится позднее, когда операция отложенной записи может быть выполнена без вмешательства в работу других программ.
ЗАКЛЮЧЕНИЕ

Анализ изложенного выше материала позволяет сделать заключение, что благодаря кэш-памяти уменьшили среднее время доступа к компьютерной памяти. Применение кэш-памяти смешанного типа позволяет добиться превосходных результатов в производительности процессоров и снижает частоту необходимых обращений к основной памяти. Процессор Pentium III компании Intel имеет кэш-память первого уровня емкостью 32 Кбайт на микросхеме процессора и либо кэш-память второго уровня емкостью 256 Кбайт на микросхеме, либо кэш-память второго уровня емкостью 512 Кбайт, не интегрированную с процессором.
Процессоры Intel Pentium III к концу 1999 года выпускались по 180 нм технологии и имели интегрированный кэш второго уровня, работающий на частоте ядра. Но на частотах, близких к 1 ГГц, интегрированный кэш работал нестабильно.
СПИСОК ЛИТЕРАТУРЫ

· Фигурнов, В.Э. IBMPCдля пользователя. Изд. 6-е, перераб. И доп. – М.:ИНФРА-М, 1995. – 432 с.: ил.
· Леонтьев, В.П. Новейшая энциклопедия персонального компьютера 2005. – М.: ОЛМА-ПРЕСС Образование, 2005. – 800 с.: ил.
· Леонтьев, В.П. Персональный компьютер 2003. – М.: ОЛМА-ПРЕСС, 2003. – 920 с.: ил.
· Готовые экзаменационные ответы, информатика, 11 класс, Издательство «Тригон»
· Симонович С.В. Справочник школьника.