Размер строки и тега кэш-памяти

Немаловажная характеристика кэш-памяти - размер строки. Как правило, на одну строку полагается одна запись адреса (так называемый тег), которая указывает, какому адресу в оперативной памяти соответствует данная линия. Очевидно, что нумерация отдельных байтов нецелесообразна, поскольку в этом случае объем служебной информации в кэше в несколько раз превысит объем самих данных. Поэтому один тег обычно полагается на одну строку, размер которой обычно 32 или 64 байта (реально существующий максимум 1024 байта), и эквивалентен четырем (иногда восьми) разрядностям системной шины данных. Кроме того, каждая строка кэш-памяти сопровождается некоторой информацией для обеспечения отказоустойчивости: одним или несколькими битами контроля четности (parity) или восемью и более байтами обнаружения и коррекции ошибок (ЕСС, Error Checking and Correcting), хотя в массовых решениях часто не используют ни того, ни другого.

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

Stag=log2(Smem*A/Scache),

где Stag - размер одного тега кэш-памяти, в битах; Smem - максимальный кэшируемый объем оперативной памяти, в байтах; Scache - объем кэш-памяти, в байтах; А - ассоциативность кэш-памяти, в каналах.

Отсюда следует, что для системы с 1-Гбайт оперативной памятью и 1-Мбайт кэш-памятью с двухканальной ассоциативностью потребуется 11 бит для каждого тега. Примечательно, что собственно размер строки кэш-памяти никак не влияет на размер тега, но обратно пропорционально влияет на количество тегов. Следует понимать, что размер строки кэш-памяти не имеет смысла делать меньше разрядности системной шины данных, но многократное увеличение размера приведет к чрезмерному засорению кэш-памяти ненужной информацией и излишней нагрузке на системную шину и шину памяти. Кроме того, максимально кэшируемый объем кэш-памяти не обязан соответствовать максимально возможному устанавливаемому объему оперативной памяти в системе. Если возникнет ситуация, когда оперативной памяти окажется больше, чем может быть кэшировано, то в кэш-памяти будет присутствовать информация только из нижнего сегмента оперативной памяти. Именно такой была ситуация с платформой Socket7/Super7. Наборы микросхем для этой платформы позволяли использовать большие объемы оперативной памяти (от 256 Мбайт до 1 Гбайт), в то время как кэшируемый объем часто был ограничен первыми 64 Мбайт (речь идет о B-cache, находящемся на системной плате) по причине использования дешевых 8-бит микросхем теговой SRAM (2 бита из которых резервировалось под указатели действительности и измененности строки). Это приводило к ощутимому падению производительности.

Какая информация содержится в тегах кэш-памяти? Это информация об адресах, но как можно точно отобразить расположение строки кэш-памяти на всем пространстве кэшируемого объема оперативной памяти, используя столь незначительное количество адресных битов? Это понятие является фундаментальным в понимании принципов функционирования кэш-памяти. Рассмотрим предыдущий пример, с 11-бит тегами. Учитывая логическое сегментирование благодаря двухканальной ассоциативности, можно рассматривать данную кэш-память как состоящую из двух независимых сегментов по 512 Кбайт каждый. Представим оперативную память как состоящую из "страниц" по 512 Кбайт каждая - их будет соответственно 2048 штук. Далее, Iog2 (2048) = 11 (основание логарифма равно 2, так как возможны только два логических состояния каждого бита). Это означает, что фактически тег - не номер отдельной строки кэш-памяти, а номер "страницы" памяти, на которую отображается та или иная строка. Другими словами, в пределах "страницы" сохраняется прямое соответствие ее "строк" с соответствующими строками кэш-памяти, т. е. п-я строка кэш-памяти соответствует n-й "строке" данной "страницы" оперативной памяти.

Рассмотрим механизм работы кэш-памяти разных видов ассоциативности. Допустим, имеется абстрактная модель с восемью строками кэш-памяти и 64 эквивалентными строками оперативной памяти. Требуется поместить в кэш строку 9 оперативной памяти (заметим, что все строки нумеруются от нуля и по возрастающей). В модели с прямым отображением эта строка может занять только одно место: 9 mod 8=1 (вычисление остатка от деления нацело), т. е. место строки 1. Если взять модель с двухканальной ассоциативностью, то эта строка может занять одно из двух мест: 9 mod 4=1, т. е. строку 1 любого канала (сегмента). Полноассоциативная модель предоставляет свободу для размещения, и данная строка может занять место любой из восьми имеющихся. Другими словами, фактически имеется 8 каналов, каждый из которых состоит из 1 строки.

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

 
< Пред   СОДЕРЖАНИЕ   Скачать   След >