Уровни кэша
Кэш центрального процессора разделён на несколько уровней. В универсальном процессорев настоящее время число уровней может достигать 3. Кэш-память уровня N+1 как правило больше по размеру и медленнее по скорости доступа и передаче данных, чем кэш-память уровня N.
Самой быстрой памятью является кэш первого уровня — L1-cache. По сути, она является неотъемлемой частью процессора, поскольку расположена на одном с ним кристалле и входит в состав функциональных блоков. В современных процессорах обычно кэш L1 разделен на два кэша, кэш команд (инструкций) и кэш данных (Гарвардская архитектура). Большинство процессоров без L1 кэша не могут функционировать. L1 кэш работает на частоте процессора, и, в общем случае, обращение к нему может производиться каждыйтакт. Зачастую является возможным выполнять несколько операций чтения/записи одновременно.Латентностьдоступа обычно равна 2−4 тактам ядра. Объём обычно невелик — не более 128 Кбайт.
Вторым по быстродействию является L2-cache — кэш второго уровня, обычно он расположен на кристалле, как и L1. В старых процессорах — набор микросхем на системной плате. Объём L2 кэша от 128 Кбайт до 1−12 Мбайт. В современных многоядерных процессорах кэш второго уровня, находясь на том же кристалле, является памятью раздельного пользования — при общем объёме кэша в n*M Мбайт на каждое ядро приходится по n*M/nс Мбайта, где nс количество ядер процессора. Обычно латентность L2 кэша, расположенного на кристалле ядра, составляет от 8 до 20 тактов ядра.
Кэш третьего уровня наименее быстродействующий, но он может быть очень внушительного размера — более 24 Мбайт. L3 кэш медленнее предыдущих кэшей, но всё равно значительно быстрее, чем оперативная память. В многопроцессорных системах находится в общем пользовании и предназначен для синхронизации данных различных L2.
Иногда существует и 4 уровень кэша, обыкновенно он расположен в отдельной микросхеме. Применение кэша 4 уровня оправдано только для высоко производительных серверовимейнфреймов.
Есть три (в серверах иногда четыре) уровня cache: первый — L1, второй — L2, третий — L3. К L1 доступ будет быстрей, чем ко L2 и к L3, а ко второму быстрей чем к L3, но все же время доступа к третьему в несколько раз больше, чем к информации в ОЗУ.
Объем первого кэша L1до 128 Кб,
второго L2 от 128 Кб до 1-12 Мб,
третьего L3 свыше 24 Мб.
Проблема синхронизации между различными кэшами (как одного, так и множества процессоров) решается когерентностью кэша.
Существует три варианта обмена информацией между кэш-памятью различных уровней, или, как говорят, кэш-архитектуры: инклюзивная, эксклюзивная и неэксклюзивная:
инклюзивный — предполагает дублирование информации кэша верхнего уровня в нижнем (предпочитает фирма Intel);
эксклюзивный — предполагает уникальность информации, находящейся в различных уровнях кэша (предпочитает фирмаAMD);
неэксклюзивный — уровни кэша связываются между собой как угодно.
1.2. Размещение информации в основной памяти ibm pc
Адресуемой единицей информации основной памяти IBM PC является байт. Это означает, что каждый байт, записанный в ОП, имеет уникальный номер (адрес).
Рассмотрим структуру ОП при 20-битной ША:
При использовании 20-битной шины адреса абсолютный (физический) адрес каждого байта является пятиразрядным шестнадцатеричным числом, принимающим значения от 00000 до FFFFF.
В младших адресах располагаются блоки операционной системы (векторы прерываний, зарезервированная область памяти BIOS), в этой же части могут размещаться драйверы устройств, дополнительные обработчики прерываний DOS и BIOS, командный процессор операционной системы.
Затем располагается область памяти, отведенная пользователю. Область памяти пользователя заканчивается адресом 9FFFF. Этот адрес является физической границей оперативного ЗУ, последним адресом 640-Кбайтной основной памяти. Остальное адресное пространство (128 Кбайт с адреса А0000 по BFFFF) отведено под видеопамять, которая физически размещается не в ОП, а в адаптере дисплея.
После видеопамяти расположено адресное пространство (256Кбайт) ПЗУ, хранящего программы базовой системы ввода-вывода (BIOS — “Basic Input — Output System”). Эта часть ОП еще называется ROM-BIOS. Из отведенных 256 Кбайт непосредственно ПЗУ занимает 64 Кбайта, а остальные 192 Кбайт оставлены для расширения ПЗУ. Поскольку большая часть оставленной для расширения BIOS части адресного пространства не используется, в этих адресах часто располагается информация, необходимая для работы сетевых карт, графических расширителей и др.
Запись в ОП (и чтение из нее) может осуществляться не только байтами, но и машинными словами. При этом машинное слово при размещении в памяти занимает несколько смежных байтов. Каждый байт ОП имеет свой адрес. Но машинное слово характеризуется не всеми адресами занятых байтов, а только одним — адресом младшего байта слова. Обычно графически машинное слово изображается так, что младший байт находится справа (рис.3).

Рис.3.Стереотипное представление машинного слова
При записи слова младший байт размещается по адресу, который является адресом машинного слова, старший байт машинного слова размещается в следующем по порядку байте ОП, имеющем номер, увеличенный на 1 (здесь действует мнемоническое правило “младший байт — по младшему адресу”).

Рис. 4.“Вращение” байтов при чтении машинного слова из ОП
При чтении из ОП двух следующих подряд байтов машинного слова их принято размещать слева направо: сначала первый из прочитанных байтов (с меньшим адресом), а затем — следующий. В результате происходит “вращение” байтов (рис.4), которое психологически трудно воспринимается.
Необходимо помнить что:
при записи отдельных байтовкаждый байт располагается в ОП по своему адресу, при чтении никакого вращения не происходит;
при записи же в ОП единиц информации, имеющих в своем составе больше одного байта, адресом информационной единицы является адрес самого младшего байта, запись в ОП ведется побайтно, начиная с самого младшего байта, каждый последующий байт располагается в ячейке, адрес которой на 1 больше предыдущего.
Иными словами, запись машинного или двойного слова производится справа налево, тогда как при чтении считанные байты обычно располагаются слева направо — происходят “вращение” байтов, перестановка их местами, что необходимо учитывать при работе с ОП на физическом уровне.
Кэш-память процессора
Кэш-память играет важную роль. Без нее от высокой тактовой частоты процессора не было бы никакого проку. Кэш позволяет использовать в компьютере любую, даже самую «медленную» оперативную память, без ощутимого ущерба для его производительности.
О том, что такое кэш-память процессора, как она работает и какое влияние оказывает на быстродействие компьютера, читатель узнает из этой статьи.
Содержание статьи
Что такое кэш-память процессора
Решая любую задачу, процессор компьютера получает из оперативной памяти необходимые блоки информации. Обработав их, он записывает в память результаты вычислений и получает для обработки следующие блоки. Это продолжается, пока задача не будет выполнена.
Все упомянутые операции производятся на очень высокой скорости. Однако, даже самая быстрая оперативная память работает медленнее любого «неторопливого» процессора. Каждое считывание из нее информации и обратная ее запись отнимают много времени. В среднем, скорость работы оперативной памяти в 16 – 17 раз ниже скорости процессора.
Не смотря на такой дисбаланс, процессор не простаивает и не ожидает каждый раз, когда оперативная память «выдает» или «принимает» данные. Он почти всегда работает на максимальной скорости. И все благодаря наличию у него кэш-памяти.
Кэш-память процессора – это небольшая, но очень быстрая память. Она встроена в процессор и является своеобразным буфером, сглаживающим перебои в обмене данными с более медленной оперативной памятью. Кэш-память часто называют сверхоперативной памятью.
Кэш нужен не только для выравнивания дисбаланса скорости. Процессор обрабатывает данные более мелкими порциями, чем те, в которых они хранятся в оперативной памяти. Поэтому кэш-память играет еще и роль своеобразного места для «перепаковки» и временного хранения информации перед ее передачей процессору, а также возвращением результатов обработки в оперативную память.
Устройство кэш-памяти процессора
Система кэш-памяти процессора состоит из двух блоков — контроллера кэш-памяти и собственно самой кэш-памяти.
Контроллер кэш памяти
Контроллер кэш памяти – это устройство, управляющее содержанием кэша, получением необходимой информации из оперативной памяти, передачей ее процессору, а также возвращением в оперативную память результатов вычислений.
Когда ядро процессора обращается к контроллеру за какими-то данными, тот проверяет, есть ли эти данные в кэш-памяти. Если это так, ядру моментально отдается информация из кэша (происходит так называемое кэш-попадание).
В противном случае ядру приходится ожидать поступления данных из медленной оперативной памяти. Ситуация, когда в кэше не оказывается нужных данных, называется кэш-промахом.
Задача контроллера – сделать так, чтобы кэш-промахи происходили как можно реже, а в идеале – чтобы их не было вообще.
Размер кэша процессора по сравнению с размером оперативной памяти несоизмеримо мал. В нем может находиться лишь копия крошечной части данных, хранимых в оперативной памяти. Но, не смотря на это, контроллер допускает кэш-промахи не часто. Эффективность его работы определяется несколькими факторами:
• размером и структурой кэш-памяти (чем больше ресурсов имеет в своем распоряжении контроллер, тем ниже вероятность кэш-промаха);
• эффективностью алгоритмов, по которым контроллер определяет, какая именно информация понадобится процессору в следующий момент времени;
• сложностью и количеством задач, одновременно решаемых процессором. Чем сложнее задачи и чем их больше, тем чаще «ошибается» контроллер.
Кэш-память процессора
Кэш-память процессора изготавливают в виде микросхем статической памяти (англ. Static Random Access Memory, сокращенно — SRAM). По сравнению с другими типами памяти, статическая память обладает очень высокой скоростью работы.
Впервые кэш размером 8 KB был встроен в процессор Intel i486 в 1989 г.
Однако, эта скорость зависит также от объема конкретной микросхемы. Чем значительней объем микросхемы, тем сложнее обеспечить высокую скорость ее работы.
Учитывая указанную особенность, кэш-память процессора изготовляют в виде нескольких небольших блоков, называемых уровнями. В большинстве процессоров используется трехуровневая система кэша:
• Кэш-память первого уровня или L1 (от англ. Level — уровень) – очень маленькая, но самая быстрая и наиболее важная микросхема памяти. Ни в одном процессоре ее объем не превышает нескольких десятков килобайт. Работает она без каких-либо задержек. В ней содержатся данные, которые чаще всего используются процессором.
Количество микросхем памяти L1 в процессоре, как правило, равно количеству его ядер. Каждое ядро имеет доступ только к своей микросхеме L1.
• Кэш-память второго уровня (L2) немного медленнее кэш-памяти L1, но и объем ее более существенный (несколько сотен килобайт). Служит она для временного хранения важной информации, вероятность запроса которой ниже, чем у информации, находящейся в L1.
• Кэш-память третьего уровня (L3) – еще более объемная, но и более медленная схема памяти. Тем не менее, она значительно быстрее оперативной памяти. Ее размер может достигать нескольких десятков мегабайт. В отличие от L1 и L2, она является общей для всех ядер процессора.
Уровень L3 служит для временного хранения важных данных с относительно низкой вероятностью запроса, а также для обеспечения взаимодействия ядер процессора между собой.
Встречаются также процессоры с двухуровневой кэш-памятью. В них L2 совмещает в себе функции L2 и L3.
Влияние кэш-памяти процессора на быстродействие компьютера
При выполнении запроса на предоставление данных ядру, контроллер памяти ищет их сначала в кэше первого уровня, затем — в кэше второго и третьего уровней.
По статистике, кэш-память первого уровня любого современного процессора обеспечивает до 90 % кэш-попаданий. Второй и третий уровни — еще 90% от того, что осталось. И только около 1 % всех запросов процессора заканчиваются кэш-промахами.
Указанные показатели касаются простых задач. С повышением нагрузки на процессор число кэш-промахов увеличивается.
Эффективность кэш-памяти процессора сводит к минимуму влияние скорости оперативной памяти на быстродействие компьютера. Например, компьютер одинаково хорошо будет работать с оперативной памятью 1066 МГц и 2400 МГц. При прочих равных условиях разница производительности в большинстве приложений не превысит 5%.
Пытаясь оценить эффективность кэш-памяти, пользователи чаще всего ищут ответы на следующие вопросы:
Какая структура кэш-памяти лучше: двух- или трехуровневая?
Трехуровневая кэш-память более эффективна.
Чтобы определить, как сильно L3 влияет на работу процессора, сайтом Tom’s Hardware был проведен эксперимент. Заключался он в замере производительности процессоров Athlon II X4 и Phenom II X4. Оба процессора оснащены одинаковыми ядрами. Первый отличается от второго лишь отсутствием кэш-памяти L3 и более низкой тактовой частотой.
Приведя частоты обеих процессоров к одинаковому показателю, было установлено, что наличие кэш-памяти L3 повышает производительность процессора Phenom на 5,8 %. Но это средний показатель. В одних приложениях он был почти равен нулю (офисные программы), в других – достигал 8% и даже больше (компьютерные 3D игры, архиваторы и др.).
Как влияет размер кэша на производительность процессора?
Оценивая размер кэш-памяти, нужно учитывать характеристики процессора и круг решаемых им задач.
Кэш-память двуядерного процессора редко превышает 3 MB. Тем более, если его тактовая частота ниже 3 Ггц. Производители прекрасно понимают, что дальнейшее увеличение размера кэша такого процессора не принесет прироста производительности, зато существенно повысит его стоимость.
Другое дело высокочастотные 4-, 6- или даже 8-миядерные процессоры. Некоторые из них (например, Intel Core i7) поддерживают технологию Hyper Threading, обеспечивающую одновременное выполнение каждым ядром двух задач. Естественно, что потенциал таких процессоров не может быть раскрыт с маленьким кэшем. Поэтому его увеличение до 15 или даже 20 MB вполне оправдано.
В процессорах Intel алгоритм наполнения кэш-памяти построен по так называемой инклюзивной схеме, когда содержимое кэшей верхнего уровня (L1, L2) полностью или частично дублируется в кэше нижнего уровня (L3). Это в определенной степени уменьшает полезный объем его пространства. С другой стороны, инклюзивная схема позитивно сказывается на взаимодействии ядер процессора между собой.
Объем внутренней кэш-памяти некоторых моделей серверных процессоров Intel Xeon
составляет 37,5 MB
В целом же, эксперименты свидетельствуют, что в среднестатистическом «домашнем» процессоре влияние размера кэша на производительность находится в пределах 10 %, и его вполне можно компенсировать, например, высокой частотой.
Эффект от большого кэша наиболее ощутим при использовании архиваторов, в 3D играх, во время кодирования видео. В «не тяжелых» же приложениях разница стремится к нулю (офисные программы, интернет-серфинг, работа с фотографиями, прослушивание музыки и др.).
Многоядерные процессоры с большим кэшем необходимы на компьютерах, предназначенных для выполнения многопоточных приложений, одновременного решения нескольких сложных задач.
Особенно актуально это для серверов с высокой посещаемостью. В некоторых высоконагружаемых серверах и суперкомпьютерах предусмотрена даже установка кэш-памяти четвертого уровня (L4). Изготавливается она в виде отдельных микросхем, подключаемых к материнской плате.
Как узнать размер кэш-памяти процессора?

Существуют специальные программы, предоставляющие подробную информацию о процессоре компьютера, в том числе и о его кэш-памяти. Одной из них является программа CPU-Z.
Программа не требует установки. После ее запуска нужно перейти на вкладку «Caches» (см. изображение).
На примере видно, что проверяемый процессор оснащен трехуровневой кэш-памятью. Размер кэша L3 у него составляет 3 MB, L2 – 512 KB (256×2), L1 – 128 KB (32×2+32×2).
Можно ли как-то увеличить кэш-память процессора?
Как уже было сказано в одном из предыдущих пунктов, возможность увеличения кэш-памяти процессора предусмотрена в некоторых серверах и суперкомпьютерах, путем ее подключения к материнской плате.
В домашних же или офисных компьютерах такая возможность отсутствует. Кэш-память является внутренней неотъемлемой частью процессора, имеет очень маленькие физические размеры и не подлежит замене. А на обычных материнских платах нет разъемов для подключения дополнительной кэш-памяти.

НАПИСАТЬ АВТОРУ
Как работает кэш СPU и что такое кэш L1, L2 и L3? Коротко

За последние годы компьютерные процессоры продвинулись довольно далеко вперед. С каждым годом транзисторы становятся все меньше, и прогресс достиг той точки, когда закон Мура становится излишним.
Когда речь идет о процессорах, важны не только транзисторы и частоты, но и кэш-память.
Возможно, вы слышали о кэш-памяти, когда обсуждались центральные процессоры (ЦП). Однако мы не обращаем достаточного внимания на эти цифры кэш-памяти процессора, и они не являются основным акцентом в рекламе процессоров.
Итак, насколько важна кэш-память процессора и как она работает?
Что такое кэш-память процессора?
Проще говоря, кэш-память процессора – это просто очень быстрый тип памяти. На заре развития вычислительной техники скорость процессора и скорость памяти были низкими. Однако в 1980-х годах скорость процессоров начала стремительно расти. Системная память того времени (ОЗУ) не могла справиться с растущими скоростями процессора или соответствовать им, поэтому появился новый тип сверхбыстрой памяти: кэш-память процессора.
Сейчас в компьютере имеется несколько типов памяти.
![]()
Первичная память, например, жесткий диск или SSD, хранит основную часть данных – операционную систему и программы.
Далее идет память с произвольным доступом, известная как оперативная память. Она намного быстрее, чем первичное хранилище, но является лишь кратковременным носителем информации. Ваш компьютер и его программы используют оперативную память для хранения часто используемых данных, что помогает выполнять действия на компьютере быстро и приятно.

Наконец, процессор имеет внутри себя еще более быстрые блоки памяти, известные как кэш-память процессора.
Компьютерная память имеет иерархию, основанную на скорости работы. Кэш-память процессора находится на вершине этой иерархии, являясь самой быстрой. Она также находится ближе всего к месту централизованной обработки данных, являясь частью самого процессора. Согласно Tech Target, «кэш-память работает в 10-100 раз быстрее, чем оперативная память, и требует всего несколько наносекунд для ответа на запрос процессора».
Компьютерная память также бывает разных типов.
Кэш-память является разновидностью статической оперативной памяти (SRAM), в то время как обычная системная оперативная память известна как динамическая оперативная память (DRAM). Статическая оперативная память может хранить данные без необходимости постоянного обновления, в отличие от DRAM, что делает SRAM идеальной кэш-памятью.
Как работает кэш процессора?
Программы и приложения на вашем компьютере созданы в виде набора инструкций, которые процессор интерпретирует и выполняет. Когда вы запускаете программу, инструкции проходят путь от первичного хранилища (жесткого диска) до центрального процессора. Именно здесь вступает в игру иерархия памяти.
Сначала данные загружаются в оперативную память, а затем передаются в центральный процессор. Процессоры способны выполнять гигантское количество инструкций в секунду. Чтобы полностью использовать свою мощность, процессору необходим доступ к сверхбыстрой памяти, и здесь на помощь приходит кэш-память процессора.
Контроллер памяти получает данные из оперативной памяти и отправляет их в кэш процессора. В зависимости от вашего процессора, контроллер находится на процессоре или в чипсете Northbridge на материнской плате.
Затем кэш-память осуществляет обмен данными внутри процессора. Иерархия памяти существует и в кэше процессора.
Уровни кэш-памяти процессора: L1, L2 и L3
![]()
Кэш-память процессора делится на три «уровня»: L1, L2 и L3. Иерархия памяти зависит от скорости и, соответственно, от размера кэша.
Итак, имеет ли размер кэш-памяти процессора значение для производительности?
Кэш L1
Кэш-память L1 (Level 1) – это самая быстрая память, которая присутствует в компьютерной системе. С точки зрения приоритета доступа, кэш L1 содержит данные, которые с наибольшей вероятностью понадобятся процессору при выполнении определенной задачи.
Размер кэш-памяти L1 зависит от процессора. Некоторые потребительские процессоры высшего класса сейчас имеют кэш L1 объемом 1 МБ, как, например, Intel i9-9980XE, но они стоят огромных денег и все еще мало распространены. Некоторые серверные чипсеты, например, линейка Intel Xeon, также оснащены кэш-памятью L1 объемом 1-2 МБ.
Не существует «стандартного» размера кэш-памяти L1, поэтому перед покупкой необходимо проверить спецификацию процессора, чтобы определить точный размер кэш-памяти L1.
Кэш L1 обычно делится на две секции: кэш инструкций и кэш данных. В кэше инструкций хранится информация об операции, которую должен выполнить процессор, а в кэше данных – данные, над которыми должна быть выполнена операция.

Кэш-память L2
Кэш-память L2 (уровень 2) работает медленнее, чем кэш-память L1, но имеет больший размер. Если кэш L1 может измеряться в килобайтах, то современные кэши памяти L2 измеряются в мегабайтах. Например, высоко оцененный Ryzen 5 5600X от AMD имеет 384 КБ кэша L1 и 3 МБ кэша L2 (плюс 32 МБ кэша L3).
Размер кэша L2 варьируется в зависимости от процессора, но обычно его размер составляет от 256 КБ до 32 МБ. Большинство современных процессоров имеют кэш L2 более 256 КБ, и этот размер сейчас считается небольшим. Более того, некоторые из самых мощных современных процессоров имеют больший объем кэш-памяти L2, значительно превышающий 8 МБ. Например,

Что касается скорости, кэш-память L2 отстает от кэша L1, но все равно намного быстрее, чем ваша системная оперативная память. Кэш-память L1 обычно в 100 раз быстрее, чем оперативная память, в то время как кэш-память L2 примерно в 25 раз быстрее.
Кэш-память L3
Переходим к кэшу L3 (уровень 3). В ранние времена кэш-память L3 находилась на материнской плате. Это было очень давно, когда большинство CPU были одноядерными процессорами. Сейчас кэш-память L3 в вашем процессоре может быть огромной: в топовых потребительских процессорах кэш-память L3 достигает 32 МБ, а революционные процессоры AMD Ryzen 7 5800X3D оснащены кэшем L3 объемом 96 МБ. В некоторых серверных CPU кэш L3 может превышать этот показатель, достигая 128 МБ.
Кэш-память L3 является самым большим, но и самым медленным блоком кэш-памяти. В современных процессорах кэш-память L3 находится на самом процессоре. Но если кэш-память L1 и L2 существует для каждого ядра на самом чипе, то кэш-память L3 больше похожа на общий пул памяти, которым может пользоваться весь чип.
На следующих изображениях показаны уровни кэш-памяти процессора Intel Core i5-3570K, выпущенного в 2012 году, и процессора AMD Ryzen 5800X, выпущенного восемь лет спустя, в 2020 году. Данные кэш-памяти процессора находятся в правом нижнем углу второго изображения.


Обратите внимание, как кэш L1 разделен на две части, в то время как кэш L2 и L3 больше, соответственно, на обоих процессорах? Однако у AMD Ryzen 5800X кэш L3 более чем в пять раз больше, чем у Intel i5-3570K.
Сколько нужно кэш-памяти процессора?
Это хороший вопрос. Как и следовало ожидать, больше – значит лучше. Новейшие процессоры, естественно, имеют больше кэш-памяти процессора, чем более ранние поколения, а также потенциально более быструю кэш-память. Одно, что вы можете сделать, это научиться эффективно сравнивать процессоры. Существует много информации, и изучение того, как сравнивать и сопоставлять различные процессоры, поможет вам принять правильное решение о покупке.
Дизайн кэш-памяти постоянно развивается, особенно по мере того, как память становится все дешевле, быстрее и плотнее. Например, одними из последних инноваций AMD являются Smart Access Memory и Infinity Cache, обе из которых повышают производительность.
Как данные перемещаются между кэш-памятью процессора?
В самых основных терминах, данные поступают из оперативной памяти в кэш L3, затем в L2 и, наконец, в L1. Когда процессор ищет данные для выполнения операции, он сначала пытается найти их в кэш-памяти L1. Если процессор находит его, это состояние называется попаданием в кэш. Затем он переходит к поиску данных в L2, а затем в L3.
Если процессор не находит данные ни в одном из кэшей памяти, он пытается получить доступ к ним из системной памяти (RAM). Когда такое происходит, это называется пропуском кэша.
Как мы знаем, кэш предназначен для ускорения обмена информацией между оперативной памятью и центральным процессором. Время, необходимое для доступа к данным из памяти, называется «латентностью».
Кэш-память L1 имеет самую низкую латентность, так как является самой быстрой и находится ближе всего к ядру, а L3 – самую высокую. Латентность кэш-памяти увеличивается, когда происходит пропуск кэша, поскольку процессору приходится извлекать данные из системной памяти.
Латентность продолжает уменьшаться по мере того, как компьютеры становятся быстрее и эффективнее. Оперативная память DDR4 и DDR5 с низкой задержкой и сверхбыстрые твердотельные накопители снижают задержку, делая всю вашу систему быстрее, чем когда-либо. При этом скорость системной памяти также важна.

Всегда обращайте внимание на кэш-память процессора
Размер и скорость кэш-памяти процессора важны для общей работы компьютера. Как и в большинстве вопросов, связанных с компьютерным оборудованием, лучше больше, да быстрее – всегда разумный выбор.
Однако не стоит позволять кэшу процессора становиться решающим фактором при покупке нового процессора. Конечно, больше и быстрее – это лучше, но необходимо учитывать и другие важные факторы производительности процессора, такие как количество ядер, тактовая частота процессора и так далее.
Что такое кэш? L1 vs L2 vs L3
В любом процессоре любого компьютера – от дешевого ноутбука до сервера в миллион долларов – есть то, что называется кэшем. И чаще всего он ещё и многоуровневый.
Должно быть, это что-то важное, иначе зачем бы это было? Но что оно делает, и зачем там несколько уровней? И что, вообще, значат всякие там множественно-ассоциативные 12-канальности?
Что же такое кэш?
Это небольшая, но очень быстрая память, которая находится рядом с логическими блоками процессора.
Но, конечно, такого определения нам недостаточно.
Представим себе идеальную волшебную систему хранения данных: бесконечно быструю, с бесконечным числом одновременных операций, и при этом обеспечивая абсолютную сохранность данных. Ничего подобного в реальности не существует, но если бы существовало, то устройство процессора было бы существенно проще.
Процессору было бы достаточно иметь только логические блоки для выполнения арифметических операций и систему для контроля передачи данных. Потому, что наша воображаемая система хранения мгновенно отправляет и получает все необходимые значения; ни один из логических блоков не задерживается в ожидании выполнения транзакции данных.
Но мы такими магическими технологиями хранения не обладаем. У нас есть лишь жесткие или твердотельные накопители, и даже лучшие из них не способны справиться с обработкой всех транзакций, необходимых для типичного процессора.
«Слон Мироздания» в мире хранения данных. Источник: techspot.com
Причина в том, что современные процессоры невероятно быстры – им требуется всего один такт, чтобы сложить два 64-битных целых числа, а для процессора, работающего на частоте 4 ГГц, это занимает всего 0,00000000025 секунды (четверть наносекунды).
В то время как вращающимся жестким дискам требуются тысячи наносекунд только для того, чтобы найти данные на внутренних дисках, не говоря уже об их передаче. Твердотельные накопители работают быстрее, но и им требуются десятки или сотни наносекунд.
Понятно, что такие накопители нельзя встроить внутрь процессора, а это означает, что между ними будет физическое разделение и, следовательно, понадобится больше времени на перемещение данных, что еще больше усугубляет ситуацию.
К сожалению, мир хранения данных стоит скорее на «Великой Черепахе». Источник: techspot.com
Итак, нам нужна еще одна система хранения данных, которая находилась бы между процессором и основным хранилищем. Она должна быть быстрее, чем диск, уметь обрабатывать большое количество транзакций одновременно и быть в непосредственной близости к процессору.
Что ж, у нас уже есть такая штука, и она называется RAM. Во всех компьютерах она используется как раз для этой цели.
Почти всегда это – DRAM (динамическая память с произвольным доступом), и она способна совершать обмен данными намного быстрее любого диска.
Источник: techspot.com
Однако, значительно превосходя в скорости, DRAM столь же значительно уступает в объёме хранимых данных.
Самые большие на сегодня чипы DDR4 (производства Micron, одного из немногих производителей DRAM) уступают самым большим по объёму жестким дискам примерно в 4000 раз.
Поэтому, увеличив скорость обмена данными, встала другая задача: с помощью аппаратных и программных решений определить, какие данные следует поместить в ограниченный объём DRAM, для оперативного пользования процессором.
Но по крайней мере, DRAM можно встроить в корпус процессора (встраиваемая DRAM, eDRAM). Однако процессоры относительно небольшие, поэтому особо внутри них не развернёшься.
10 Мб DRAM чип слева от графического процессора Xbox 360. Источник: CPU Grave Yard
Подавляющее большинство модулей DRAM располагается на материнской плате рядом с процессором, и это всегда ближайший к процессору компонент в компьютерной системе. И всё равно это недостаточно быстро.
Опять же, для поиска данных DRAM требуется время около 100 наносекунд, но по крайней мере она может передавать миллиарды бит данных в секунду. Похоже, нам понадобится еще одна промежуточная память, между блоками процессора и DRAM.
Встречайте: SRAM (статическая память с произвольным доступом). В то время как DRAM использует микроскопические конденсаторы для хранения данных в виде электрического заряда, SRAM для той же цели использует транзисторы, работающие почти с той же скоростью, что и логические блоки в процессоре (примерно в 10 раз быстрее, чем DRAM).
Источник: techspot.com
Конечно, у SRAM есть недостаток, и опять же, речь об объёме.
Транзисторная память занимает намного больше физического места, чем DRAM: чип SRAM размером с чип DDR4 4 Гб будет иметь объём менее 100 Мб. Но поскольку технологически SRAM основана на том же процессе, что и процессор, то её можно встроить прямо внутрь него, в непосредственной близости к его логическим блокам.
Каждая такая дополнительная система памяти на пути к сверхбыстрым узлам процессора отличается повышенной скоростью в ущерб её объёму. Можно добавить больше таких систем, каждая из которых будет быстрее, но меньше.
И вот теперь мы можем дать более внятное определение, что такое кэш: это несколько модулей SRAM, расположенных внутри процессора. Они обеспечивают максимальную загрузку логических блоков, выполняя обмен данными на сверхвысоких скоростях. Этого достаточно? Отлично, потому что с этого момента все станет намного сложнее!
Кэш – это как многоуровневая парковка
Как мы выяснили, кэш необходим, потому что системы хранения данных неидеальны и не способны удовлетворить соответствующие требования логических блоков в процессоре. Современные CPU и GPU содержат массив блоков SRAM, которые внутренне организованы в иерархию – последовательность кэшей, упорядоченных следующим образом:
Источник: techspot.com
На этой схеме область процессора выделена черным пунктирным прямоугольником. Блоки ALU (арифметико-логическое устройство) находятся в крайнем левом углу; это те самые структуры, которые и делают процессор – процессором, выполняя математические вычисления. Ближайшим к ALU уровнем памяти являются регистры (они сгруппированы в файл регистров) – но технически они кэшем не являются.
Каждый из них содержит одно число, например 64-битное целое; само значение может быть фрагментом каких-то данных, кодом определенной инструкции, либо же ссылкой на адрес других данных.
Файл регистров в процессоре настольного компьютера довольно мал – например, в Intel Core i9-9900KF их на каждое ядро по два банка: один для целых чисел, содержащий 180 64-битных регистров, другой – для векторов (небольших массивов чисел), имеющий 168 256-битных регистров. Таким образом, общий файл регистров для каждого ядра чуть меньше 7 Кб. Для сравнения, размер файла регистров в потоковых мультипроцессорах (графических эквивалентах ядер CPU) в NVIDIA GeForce RTX 2080 Ti равен 256 Кб.
Регистры – это SRAM-память, как и кэш, но работающие на той же скорости, что и обслуживаемые ими ALU, вводя и выводя данные за один такт. Но они не предназначены для хранения большого количества данных (а только одного их фрагмента), поэтому поблизости всегда есть несколько блоков памяти побольше: это кэш уровня 1, L1 (Level 1).
Процессор Intel Skylake, увеличенное изображение одного из ядер. Источник: Wikichip
На фото крупным планом показано ядро процессора Intel Skylake для PC.
Зелёным прямоугольником слева выделены ALU и файлы регистров. В центре вверху белым прямоугольником показан кэш данных 1 уровня (L1 D cache). Его объём небольшой, всего 32 Кб, но, как и регистры, он находится очень близко к логическим блокам и работает с той же скоростью, что и они.
Второй белый прямоугольник – это кэш инструкций 1 уровня (L1 Ins cache), также размером 32 Кб. Как следует из названия, здесь хранятся различные команды, готовые к разделению на более мелкие – так называемые микрооперации (обычно обозначаемые как μops) для выполнения ALU. Для них также есть свой кэш – так сказать, кэш нулевого уровня (L0 cache), поскольку он меньше (всего на 1500 операций) и ближе, чем кэши L1.
Вы можете спросить: а почему эти блоки SRAM такие маленькие? Почему бы не увеличить их размер до мегабайта хотя бы? Во-первых, основные логические блоки процессора занимают в чипе такое же пространство, как и кэши данных и инструкций вместе взятые, поэтому увеличение размеров последних приведет и к существенному увеличению общего размера кристалла.
А во-вторых (и в-главных), причина, по которой они хранят всего несколько килобайт, заключается в том, что время, необходимое для поиска и извлечения данных, увеличивается по мере увеличения объёма памяти. Кэш L1 должен быть очень быстрым, поэтому необходим компромисс между размером и скоростью – в лучшем случае требуется около 5 тактовых циклов (чуть больше для значений с плавающей точкой), чтобы предоставить данные из этого кэша, готовые к использованию.
Кэш L2 в Skylake: 256 Кбайт удовольствия SRAM
Но если бы это был единственный кэш внутри процессора, то производительность последнего резко упала бы. Вот почему все процессоры имеют другой уровень памяти, встроенный в ядра: кэш 2 уровня, L2 (Level 2 cache). Это общее хранилище для инструкций и данных.
Его размер всегда несколько больше, чем L1: к примеру, в процессорах AMD Zen 2 устанавливается до 512 Кб памяти L2, поэтому кэши более низкого уровня обеспечиваются должным образом. Но за этот дополнительный размер приходится платить: на поиск и передачу данных из этого кэша уходит примерно вдвое больше времени по сравнению с L1.
Возвращаясь в прошлое, во времена оригинального Intel Pentium, кэш-память 2 уровня представляла собой отдельную микросхему – либо на небольшой съёмной плате расширения по подобию RAM DIMM, либо встроенную в материнскую плату. Затем кэш L2 переехал в сам корпус процессора, и в конечном итоге был интегрирован в кристалл, что стало причиной появления Pentium III и AMD K6-III.
За этим развитием вскоре последовал другой уровень кэш-памяти, предназначенный для поддержки более низких уровней, и это было связано с появлением многоядерных чипов.
Intel Kaby Lake. Источник: Wikichip
На этой макрофотографии чипа Intel Kaby Lake мы видим его 4 ядра слева от центра (интегрированный GPU почти полностью занимает половину кристалла справа от центра). Каждое
ядро имеет свой собственный «личный» набор кэшей L1 и L2 (белые и желтый прямоугольники), но кроме этого имеет ещё и третий банк блоков SRAM (выделены красным).
Несмотря на то, что кэш 3 уровня (Level 3 cache) непосредственно окружает каждое ядро, он является общим для всех ядер – любое из ядер может свободно получать доступ к содержимому L3 другого ядра. Этот кэш-уровень намного больше (от 2 до 32 Мб), но и намного медленнее – в среднем на 30 циклов, особенно если ядру необходимо использовать данные, которые находятся в дальнем блоке кэша.
Ниже мы видим строение ядра в архитектуре AMD Zen 2: кэши данных и инструкций L1 (белым) объемом 32 Кб, L2 (жёлтым) – 512 Кб, и огромный блок кэша L3 (красным) размером 4 Мб.
Увеличенное изображение ядра процессора AMD Zen 2. Источник: Fritzchens Fritz
Постойте! Как 32 Кб могут занимать больше физического пространства, чем 512 Кб? Если L1 хранит так мало данных, почему он пропорционально значительно больше, чем кэши L2 и L3?
Больше, чем просто число
Кэш повышает производительность за счет ускорения передачи данных в логические блоки и хранения наготове часто используемых инструкций и данных. Информация, хранящаяся в кэше, делится на две части: сами данные и информация о том, где они изначально находились (в системной памяти или на носителе) – этот адрес называется тегом кэша.
Когда процессор выполняет операцию, которая собирается прочитать/записать данные из/в память, он начинает с проверки тегов в кэше L1. Если затребованные данные там присутствуют (cache hit, «кэш-попадание»), к ним можно сразу получить доступ напрямую. «Кэш-промах» (cache miss) происходит, когда кэш самого низкого уровня не содержит запрашиваемый тег.
В последнем случае, в кэше L1 создается новый тег, и соответствующие узлы архитектуры процессора начинают перебирать другие уровни кэша (вплоть до основного накопителя, если нужно), чтобы найти данные для затребованного тега. Но чтобы освободить место в кэше L1 для этого нового тега, нужно что-то оттуда выгрузить в L2.
В результате данные почти постоянно перемещаются и перемешиваются за считанные такты. Единственный способ управлять этим всем – оснастить сложной структурой обслуживания SRAM. Иными словами: если бы в ядре процессора был бы только один ALU, то кэш L1 был бы намного проще, но поскольку их десятки (многие из которых жонглируют двумя потоками инструкций), кэшу требуется сразу несколько подключений для поддержания кэшированных данных в движении.
С помощью бесплатных утилит типа CPU-Z можно получить информацию о кэше в вашем процессоре. Что же мы там видим? Важным элементом является параметр ассоциативности (set associative) – он определяет, как именно блоки данных из системной памяти копируются в кэш.
В приведенном выше примере представлена информация о кэше процессора Intel Core i7-9700KF. Каждый из кэшей L1 разделен на 64 маленьких блока, называемых сэтами (set, “набор”), и каждый из них далее делится на кэш-линии (cache lines), размером 64 байта. «Set associative»
(множественно- или наборно-ассоциативный) означает, что блок данных из RAM отображается на кэш-линии одного конкретного сэта, а не где угодно.
«8-way» – означает 8-канальный, то есть каждый один блок может быть ассоциирован с восемью кэш-линиями в сэте. Чем выше уровень ассоциативности (т.е. чем больше каналов), тем выше количество кэш-попаданий при поиске процессором данных, и ниже негативный эффект от кэш-промахов. Недостатком является то, что это усложняет систему, увеличивает энергопотребление, а также может снизить производительность, поскольку обрабатывается больше кэш-линий на каждый блок данных.
Инклюзивный кэш L1+L2, жертвенный кэш L3, политика отложенной записи (write-back policies), ECC (корректор ошибок). Источник: Fritzchens Fritz
Ещё одним аспектом организации кэша является то, как именно данные распределяются по разным уровням. Соответствующие правила устанавливаются так называемой политикой инклюзивности (inclusion policy). Например, процессоры Intel Core имеют полностью инклюзивный кэш L1+L3. Это означает, что одни и те же данные, например, в L1, могут находиться и в L3. Может показаться, что это лишь трата столь ценного пространства кэша, но преимущество состоит в том, что если процессор получает кэш-промах при поиске тега в низком уровне, ему не нужно искать его в более высоком уровне.
В тех же процессорах кэш L2 является не-инклюзивным: любые хранящиеся в нем данные не копируются на какой-либо другой уровень. Это экономит место, но приводит к тому, что системе памяти чипа приходится выполнять поиск по L3 (который всегда намного больше), чтобы найти требуемый тег. Подобным образом устроены и жертвенные кэши (victim cache), но они используются для хранения информации, вытесняемой с более низкого уровня – например, процессоры AMD Zen 2 используют L3 в качестве кэша жертв, который просто хранит данные, вытесненные из L2.
Существуют и другие политики для организации кеширования, например, регламентирующие запись данных в кэш и RAM. Это так называемые политики записи (write policies), и большинство современных процессоров используют кэши с отложенной записью (write-back); это означает, что когда данные записываются на уровень кэша, происходит задержка перед тем, как копия этих данных отправляется в RAM. По большей части эта пауза длится до тех пор, пока данные в кэше не будут замещены новыми данными – и только тогда происходит запись вытесняемых данных в RAM.
Видеокарта Nvidia GA100, оснащенная 20 Мб кэш-памяти L1 и 40 Мб L2.
При выборе объема, типа и политик кэш-памяти, разработчики процессоров стараются найти оптимальный баланс между повышением производительности процессора и увеличением необходимой площади кристалла с неминуемым усложнением системы. Если бы было возможно просто взять и сделать 1000-канальные полностью ассоциативные 20-мегабайтные кэши L1, и при этом их размер не был бы размером с Манхэттэн (и не потребляли бы такую же мощность), то у нас всех уже были бы компьютеры с такими процессорами!
За последние десять лет кэш L1 претерпел мало изменений, в то время как L3 продолжает увеличиваться. Десять лет назад, покупая Intel i7-980X за 999 долларов, вы получали 12 Мб L3. Сегодня же кэшем L3 объёмом 64 Мб снабжены процессоры стоимостью вдвое дешевле.
Итак, кэш – это абсолютно необходимые и совершенно потрясающие технологии. В данной статье мы не рассматривали другие типы кэшей в CPU и GPU (например, буфер ассоциативной трансляции – TLB, или текстурные кэши), но поскольку все они следуют той же логике и структуре уровней, как мы описали здесь, то вам, скорее всего, уже будет не так сложно разобраться с ними.