Кэш-память и ее уровни

Кэш-память и ее уровни

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

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

Разделение на инструкции и данные традиционно используется только в кэш-памяти L1-уровня, которая с мо­мен­та по­явления обычно размещается на процессорном кристалле. Кроме того, в семействе Pentium 4 существует по­ня­тие L1 Trace Cache для хранения уже декодированных инструкций. В этом случае при кэш-попадании имеет мес­то выигрыш не только за счет упреждающего чтения команд в кэш-память, но и за счет времени де­ко­ди­ро­ва­ния. В со­вре­мен­ных про­цес­со­рах Intel очередь де­ко­ди­ро­ван­ных инструкций реализована в статусе L0 (то есть, ближе к ядру, чем L1), а уровень L1 по-прежнему представлен раздельной кэш-памятью инструкций и данных.

На платформах для 386 процессоров L2-уровень реализован внешними по отношению к сокету микросхемами статической памяти

 

Для L2 разделение на инструкции и данные традиционно отсутствует еще со времен 386/486, когда L2-уровень был реализован на системной плате внешними по отношению к процессору микросхемами статической памяти. Отказ от сегрегации инструкций и данных привел к тому, что этот вид кэш-памяти называется Unified L2 Cache. Со­от­вет­ствен­но, для принятия решения о кэшировании ячейки, аргументом логических функций кэш-контроллера L2 является только адрес ячейки и не является тип доступа: код или данные.

Кэш-память L2 на плате для процессоров Pentium

 

Исключения из этих правил есть толь­ко в виртуальных машинах, в частности — в Oracle VirtualBox. Эти ис­клю­че­ния касаются декларирования кэш-памяти для CPUID, но не применимы к ее работе. Их целью является оп­ти­ми­за­ция разделения физических ресурсов между виртуальными машинами, в то время как физическая топология про­цес­со­ра и аппаратно реализованные алгоритмы функционирования кэш-контроллера не изменяются вслед­ствие вир­ту­а­ли­за­ции. Вместе с тем, с появлением технологии Quality of Service Enforcement, гипервизор получает в свое распоряжение аппаратный механизм управления разделением ресурсов между виртуальными машинами, а по­то­му метод поддержки CPUID для виртуальных процессоров может быть усложнен в будущем.

Рассмотрим состав и уровни кэш-памяти процессоров Intel и AMD с помощью утилиты Java CPUID (выделены но­ме­ра функций Deterministic Cache Parameters, а также информация об уровнях L2-кэш):


Рис 1. Кэш-память процессора AMD Ryzen


Рис 2. Кэш-память процессора Intel Haswell

Наряду с классификацией Code/Data не следует забывать о топологии запоминающих устройств относительно ядер. Например, для Intel Haswell, кэш L1 и L2 индивидуальны для каждого ядра, а L3-кэш общий для ядер одного сокета. Поэтому размеры L1 и L2 традиционно указываются для одного ядра, размер L3 указывается для всего про­цес­со­ра. Подытожим сказанное следующим наблюдением:

  • Кэш-память уровня L2 Unified общая с точки зрения разделения на данные и инструкции и по этому критерию отличается от L1 и похожа на L3.
  • Кэш L2 индивидуален с точки зрения принадлежности к ядру — у каждого ядра (или топологической группы ядер) свой кэш L2 — и по этому критерию отличается от L3 и сходен с L1.

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