Что такое кэш память и как. Новый подход к кэшированию процессора

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

Чтобы увидеть проблемы, мы рассмотрим результаты еще одной тестовой программы.


Рисунок 31: Полоса пропускания с двумя процессами. Процесс привязан к одному ядру, а второй процесс привязан к другому ядру. Этот второй процесс считывает и записывает область памяти переменного размера. На графике показано количество байтов за цикл, которые считываются или записываются. Показаны четыре разных графика: по одной для каждой комбинации процессов чтения и записи.

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

В чем же состоит причина, которая побудила разработчиков компьютеров использовать специальную память для процессора? Разве возможностей ОЗУ для компьютера недостаточно?

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

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

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

Вообще говоря, существуют две основные технологии микросхем памяти – статическая память и динамическая память. Не углубляясь в подробности их устройства, скажем лишь, что статическая память, в отличие от динамической, не требует регенерации; кроме того, в статической памяти для одного бита информации используется 4-8 транзисторов, в то время как в динамической – 1-2 транзистора. Соответственно динамическая память гораздо дешевле статической, но в то же время и намного медленнее. В настоящее время микросхемы ОЗУ изготавливаются на основе динамической памяти.

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


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

Примерная эволюция соотношения скорости работы процессоров и ОЗУ:


Таким образом, если бы процессор брал все время информацию из оперативной памяти, то ему пришлось бы ждать медлительную динамическую память, и он все время бы простаивал. В том же случае, если бы в качестве ОЗУ использовалась статическая память, то стоимость компьютера возросла бы в несколько раз.

Именно поэтому был разработан разумный компромисс. Основная часть ОЗУ так и осталась динамической, в то время как у процессора появилась своя быстрая кэш-память, основанная на микросхемах статической памяти. Ее объем сравнительно невелик – например, объем кэш-памяти второго уровня составляет всего несколько мегабайт. Впрочем, тут стоить вспомнить о том, что вся оперативная память первых компьютеров IBM PC составляла меньше 1 МБ.

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

История кэш-памяти

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

Впервые кэш-память объемом всего в 16 КБ появилась в ПК на базе процессора i80386. На сегодняшний день современные процессоры используют различные уровни кэша, от первого (самый быстрый кэш самого маленького объема – как правило, 128 КБ) до третьего (самый медленный кэш самого большого объема – до десятков МБ).

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

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

Архитектуры и принципы работы кэша

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

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

Порядок поиска процессором информации в памяти:

Именно таким образом Процессор осуществляет поиск инфоромации

Для управления работой кэш-памяти и ее взаимодействия с вычислительными блоками процессора, а также ОЗУ существует специальный контроллер.

Схема организации взаимодействия ядра процессора, кэша и ОЗУ:


Кэш-контроллер является ключевым элементом связи процессора, ОЗУ и Кэш-памяти

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

Методы записи кэша

Существует два основных метода записи информации в кэш-память:

  1. Метод write-back (обратная запись) – запись данных производится сначала в кэш, а затем, при наступлении определенных условий, и в ОЗУ.
  2. Метод write-through (сквозная запись) – запись данных производится одновременно в ОЗУ и в кэш.

Архитектура ассоциативности кэш-памяти

Архитектура ассоциативности кэша определяет способ, при помощи которого данные из ОЗУ отображаются в кэше. Существуют следующие основные варианты архитектуры ассоциативности кэширования:

  1. Кэш с прямым отображением – определенный участок кэша отвечает за определенный участок ОЗУ
  2. Полностью ассоциативный кэш – любой участок кэша может ассоциироваться с любым участком ОЗУ
  3. Смешанный кэш (наборно-ассоциативный)

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

Заключение

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

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

Структура и для чего служит кэш

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

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

Первые обладатели такого вида кэш-памяти были процессоры Intel 80386 (386-е) и располагалась она на материнской плате. В будущем, на более новых процессорах Intel 80486 (486-е) добавили память такого типа на сам кристалл процессора, при этом сохранив ее и на материнской плате. По этой особенности их разделили на два уровня, то что находится на самом кристалле стала называться кэшем первого уровня (L1), а та что на материнской плате – кэшем второго уровня (L2). Но в наше время, кэш второго уровня также перенесли на кристалл процессора. Между собой эти типы памяти работают по двум возможным схемам: инклюзивная (дублирование находящегося в памяти в обоих уровнях) и эксклюзивная (данные на каждом уровне эксклюзивны).

Как было сказано ранее, кэш-память служит буфером, в который загружаются часто исполняемые команды и используемые данные из ОЗУ (Оперативная память) . Хотя ее объем крайне мал по нынешним меркам (до 32 Мбайт), она дает значительный прирост производительности. Связь кэш-памяти и ОЗУ происходит по одной из возможных схем: прямое отображение, наборно-ассоциативная, ассоциативная. Объяснять эти схемы нет смысла, сомневаюсь, что при покупке, вам кто-то сможет ответить, какая схема используется в том или ином процессоре.

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

Большинство современных процессоров оснащены кэш-памятью двух или трех уровней (теперь третий может располагаться на материнской плате):

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

Кэш-память второго уровня(L2) – имеет больший объем памяти, чем первый, но из этого вытекает такой негативный момент как снижение скорости. Может быть как общим для всего процессора, так и индивидуальным для каждого ядра. Одно из предназначений – буфер между первым и третьим уровнем.

Кэш-память третьего уровня(L3) – самый медленный из кэшей (но все же значительно быстрее ОЗУ) но и имеет самый большой объем памяти. Если первый уровень индивидуален для каждого ядра, то этот общий для всего процессора.

Подводим итог

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