Автор работы: Пользователь скрыл имя, 16 Декабря 2010 в 17:44, реферат
Кэш-память — это высокоскоростная память произвольного доступа, используемая процессором компьютера для временного хранения информации. Она увеличивает производительность, поскольку хранит наиболее часто используемые данные и команды «ближе» к процессору, откуда их можно быстрее получить
Иерархическая
модель кэш-памяти
Как правило, кэш-память имеет многоуровневую архитектуру. Например, в компьютере с 32 Кбайт внутренней (в ядре ЦП) и 1 Мбайт внешней (в корпусе ЦП или на системной плате) кэш-памяти первая будет считаться кэш-памятью 1-го уровня (L1), а вторая - кэш-памятью 2-го уровня (L2). В современных серверных системах количество уровней кэш-памяти может доходить до четырех, хотя наиболее часто используется двух- или трехуровневая схема.
Так как I-cache и D-cache должны обеспечивать очень низкие задержки при доступе (это справедливо для любого кэша L1), приходится жертвовать их объемом - обычно он составляет от 16 до 32 Кбайт. Ведь чем меньше размер кэша, тем легче добиться низких задержек при доступе.
Кэш-память 2-го уровня, как правило, унифицирована, т. е. может содержать как команды, так и данные. Если она встроена в ядро ЦП, то говорят о S-cache (Secondary Cache, вторичный кэш), в противном случае - о B-cache (Backup Cache, резервный кэш). В современных серверных ЦП объем S-cache составляет от одного до нескольких мегабайт, a B-cache - до 64 Мбайт. Если дизайн ЦП предусматривает наличие встроенной кэш-памяти 3-го уровня, то ее именуют T-cache (Ternary Cache, третичный кэш). Как правило, каждый последующий уровень кэш-памяти медленнее, но больше предыдущего по объему. Если в системе присутствует B-cache (как последний уровень модели кэш-памяти), то он может контролироваться как ЦП, так и набором системной логики.
Если
в момент выполнения некоторой команды
в регистрах не окажется данных для
нее, то они будут затребованы
из ближайшего уровня кэш-памяти, т. е.
из D-cache. В случае их отсутствия в D-Cache запрос
направляется в S-cache и т. д. В худшем случае
данные будут доставлены непосредственно
из памяти. Впрочем, возможен и еще более
печальный вариант, когда подсистема управления
виртуальной памятью операционной системы
(ОС) успевает вытеснить их в файл подкачки
на жесткий диск. В случае доставки из
оперативной памяти потери времени на
получение нужных данных могут составлять
от десятков до сотен тактов ЦП, а в случае
нахождения данных на жестком диске речь
уже может идти о миллионах тактов.
Размер
строки и тега кэш-памяти
Немаловажная характеристика кэш-памяти - размер строки. Как правило, на одну строку полагается одна запись адреса (так называемый тег), которая указывает, какому адресу в оперативной памяти соответствует данная линия. Очевидно, что нумерация отдельных байтов нецелесообразна, поскольку в этом случае объем служебной информации в кэше в несколько раз превысит объем самих данных. Поэтому один тег обычно полагается на одну строку, размер которой обычно 32 или 64 байта (реально существующий максимум 1024 байта), и эквивалентен четырем (иногда восьми) разрядностям системной шины данных. Кроме того, каждая строка кэш-памяти сопровождается некоторой информацией для обеспечения отказоустойчивости: одним или несколькими битами контроля четности (parity) или восемью и более байтами обнаружения и коррекции ошибок (ЕСС, Error Checking and Correcting), хотя в массовых решениях часто не используют ни того, ни другого.
Размер
тега кэш-памяти зависит от трех основных
факторов: объема кэш-памяти, максимального
кэшируемого объема оперативной
памяти, а также ассоциативности
кэш-памяти. Математически этот размер
рассчитывается по формуле:
Stag=log2(Smem*A/Scache),
где Stag - размер
одного тега кэш-памяти, в битах; Smem - максимальный
кэшируемый объем оперативной памяти,
в байтах; Scache - объем кэш-памяти, в байтах;
А - ассоциативность кэш-памяти, в каналах.
Отсюда
следует, что для системы с 1-Гбайт
оперативной памятью и 1-Мбайт
кэш-памятью с двухканальной
Типы
подключения кэш-памяти
Количество портов чтения-записи кэш-памяти - показатель того, сколько одновременных операций чтения-записи может быть обработано. Хотя жестких требований и нет, определенное соответствие набору функциональных устройств ЦП должно прослеживаться, так как отсутствие свободного порта во время исполнения команды приведет к вынужденному простою.
Существует два основных способа подключения кэшпамяти к ЦП для чтения: сквозной и побочный (Look-Through и Look-Aside). Суть первого в том, что при необходимости данные сначала запрашиваются у контроллера кэш-памяти самого высокого уровня, который проверяет состояние подключенных тегов и возвращает либо нужную информацию, либо отрицательный ответ, и в этом случае запрос перенаправляется в более низкий уровень иерархии кэш-памяти или в оперативную память. При реализации второго способа чтения запрос одновременно направляется как кэш-контроллеру самого высокого уровня, так и остальным кэш-контроллерам и контроллеру оперативной памяти. Недостаток первого способа очевиден: при отсутствии информации в кэше высокого уровня приходится повторять запрос, и время простоя ЦП увеличивается. Недостаток второго подхода - высокая избыточность операций и, как следствие, "засорение" внутренних шин ЦП и системной шины ненужной информацией. Логично предположить, что если для кэшей L1 оптимальна сквозная схема, то для T-cache или B-cache побочная схема может оказаться более выгодной. Для S-cache выбор неоднозначен.
Различают также локальный и удаленный кэш. Локальным называют кэш, находящийся либо в ядре ЦП, либо на той же кремниевой подложке или в корпусе ЦП, удаленным - размещенный на системной плате. Соответственно локальным кэшем управляет контроллер в ядре ЦП, а удаленным - НМС системной платы. Локальный кэш с точки зрения быстродействия предпочтительнее, так как интерфейс к удаленному кэшу обычно мультиплексируется с системной шиной. С одной стороны, когда другой ЦП захватывает общую системную шину или какой-либо периферийный контроллер обращается к памяти напрямую, удаленный кэш может оказаться временно недоступным. С другой - такой кэш легче использовать в многопроцессорных системах.
Существуют два распространенных способа записи в кэш: сквозной (Write-Through) и обратной (Write-Back) записи. В первом случае информация одновременно сохраняется как в текущий, так и в более низкий уровень иерархии кэш-памяти (или прямо в оперативную память при отсутствии такового). Во втором - данные сохраняются только в текущем уровне кэш-памяти, при этом возникает ситуация, когда информация в кэше и оперативной памяти различается, причем последняя становится устаревшей. Для того чтобы при сбросе кэша информация не была необратимо потеряна, к каждой строке кэша добавляется "грязный" бит (dirty bit, иначе известный как modified). Он нужен для обозначения того, соответствует ли информация в кэше информации в оперативной памяти, и следует ли ее записать в память при сбросе кэша.
Также
следует упомянуть способ резервирования
записи (write allocation). При записи данных в
оперативную память часто возникает ситуация,
когда записываемые данные могут скоро
понадобиться, и тогда их придется довольно
долго подгружать. Резервирование записи
позволяет частично решить эту проблему:
данные записываются не в оперативную
память, а в кэш. Строка кэша, вместо которой
записываются данные, полностью выгружается
в оперативную память. Так как вновь записанных
данных обычно недостаточно для формирования
полной строки кэша, из оперативной памяти
запрашивается недостающая информация.
Когда она получена, новая строка записывается,
и тег обновляется. Определенных преимуществ
или недостатков такой подход не имеет
- иногда это может дать незначительный
прирост производительности, но также
и привести к засорению кэша ненужной
информацией.
Увеличение
производительности кэш-памяти
Формула
для среднего времени доступа
к памяти в системах с кэш-памятью
выглядит следующим образом:
Среднее время
доступа = Время обращения при
попадании + Доля промахов x Потери при
промахе
Эта формула
наглядно показывает пути оптимизации
работы кэш-памяти: сокращение доли промахов,
сокращение потерь при промахе, а
также сокращение времени обращения
к кэш-памяти при попадании. На рисунке
5.38 кратко представлены различные методы,
которые используются в настоящее
время для увеличения производительности
кэш-памяти. Использование тех или
иных методов определяется прежде всего
целью разработки, при этом конструкторы
современных компьютеров