Почему кэш память быстрее оперативной памяти

Обновлено: 04.07.2024

Запоминающее устройство КЭШ (cache) таит в себе много загадок. Увеличенное количество КЭШ-памяти характерно для топовых моделей CPU. Чем его больше, тем дороже процессор. Однако что же это дает? Давай попробуем разобраться!

Иерархия памяти

Прежде чем добраться до АЛУ (Арифметико-Логического Устройства), данные и команды проходят долгий путь. А до АЛУ им нужно добежать поскорее, поскольку там-то и происходят все полезные вычисления. АЛУ – сердце любого процессора.

Устройства ввода/вывода

Вначале данные хранятся на бумаге или в голове. Их вводят посредством клавиатуры, мыши, сканера. Устройства ввода/вывода – самые медлительные. Довольно медленно работают сети. Но тут уже проблема не технологическая, а финансовая. Быстрые каналы связи стоят очень дорого, поэтому многие используют модемы и домашние сети, которые никак не могут сравниться по скорости работы с оперативной памятью. Чуть лучше дело обстоит с высокоскоростными интерфейсами типа USB 2.0 и FireWire, однако они передают данные на небольшие расстояния, ограниченные несколькими метрами.

Жесткие диски

Скорость передачи данных с жесткого диска ограничена скоростью его вращения, плотностью записи и количеством головок. Появление новых HDD с интерфейсом SATA и с частотой вращения 10000 оборотов в минуту не сильно изменило ситуацию. Параметры передачи данных улучшились не более чем на 50%.

Оперативная память

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

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

И, наконец, КЭШ. Его производительность должна расти вместе с процессором, поскольку теперь он располагается на кристалле и работает, как утверждают разработчики, на частоте CPU. Однако рекламные проспекты почему-то говорят нам об увеличении его объема!

Объем и скорость

Чем больше памяти, тем она медленнее. Окружающий мир хранит бесконечное количество информации, и тебе не хватит жизни, чтобы это все сфотографировать, нарисовать или описать. Весь Интернет за день не скачаешь. Чем ближе к АЛУ, тем меньше памяти: окружающий мир – сеть – HDD – оперативная память – КЭШ.

За последнее десятилетие частоты процессоров возросли от считанных мегагерц до нескольких гигагерц. Частоты оперативной памяти с трудом достигают 200 МГц, если не учитывать всевозможные дуальные режимы (типа DDR и Dual Channel DDR), что является в некотором роде рекламным трюком.

А вот объемы памяти возросли. Винчестеры от нескольких десятков мегабайт увеличились в объеме до сотен гигабайт. От нескольких мегабайт до нескольких о8габайт прибавила в весе оперативка. КЭШ увеличился от нескольких килобайт до нескольких мегабайт. То есть в индустрии памяти производители делают ставку совсем не на скорость работы памяти, а на ее объем. И вот почему.

Как работает КЭШ

Намного быстрее загрузить текст из Интернета, чем вбивать на клавиатуре. Если программа находится в оперативной памяти, то она быстрее развернется и будет доступней, чем если грузить ее с HDD. Если нужной программулины нет в памяти, то операционная система довольно долго будет ее вылавливать, скрипя винчестером. КЭШ хранит часто используемые данные из оперативки, и если нужной инфы в КЭШ не оказалось, приходится обращаться в оперативку, а если ее нет и там, то к HDD. При этом скорость все меньше и меньше.

Вот и стремятся разработчики к тому, чтобы на каждом уровне иерархии памяти ее было побольше. Чтобы загрузил один раз, и не пришлось больше обращаться на нижний уровень по тормозным каналам. То есть вместо того чтобы стремиться увеличить скорости между ступенями, они стараются воткнуть побольше памяти, которая и так уже быстрая. Больше винчестер, больше оперативки, больше КЭШ. А как же эффективность?

Эффективность КЭШ

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

Потому-то бюджетные процессоры (например, Intel Celeron) с урезанным КЭШем так популярны, что на производительность в мультимедийных задачах (связанных с обработкой больших массивов данных) объем КЭШа сильно не влияет, даже несмотря на урезанную частоту работы шины Intel Celeron.

Показательны тут и результаты нашего тестирования в DOOM III. Выяснилось, что при увеличении объема оперативной памяти от 256 Мб до 1 Гб производительность выросла с 34 до 54 FPS (Frame Per Second). То есть всего в полтора раза, хотя объем памяти вырос в 4 раза! Использование DDR в двуканальном режиме дало жалкие 2 FPS против одноканального режима.

Тяжело КЭШ-памяти приходится, если обращения идут не к последовательным адресам, а к случайным. Тут вероятность того, что нужных данных не окажется, повышается. И снова CPU приходится простаивать в ожидании загрузки нужной ячейки из оперативки.

Итак, становится понятно, что увеличить быстродействие КЭШ и его объем недостаточно - нужно реформировать всю иерархию памяти ПК. А 1 Мб L2 КЭШ, или 1 Гб DDR погоды не сделают. Для большинства пользовательских приложений, включая самые современные игры, хватит и меньшего объема памяти!

SRAM и DDR SDRAM

Возникает вопрос: чем же отличаются оперативная память и КЭШ? Одно из таких различий – тип памяти. SRAM (Static Random Access Memory) – статическая память со случайным доступом. DDR SDRAM (Double Data Rate Synchronous Dynamic RAM) – синхронная динамическая память с удвоенной скоростью передачи данных. SDRAM сделана по принципу больше и дешевле. Поэтому на одну ячейку памяти приходится только один транзистор с конденсатором. Однако данные, хранящиеся в виде заряда на обкладках конденсатора, требуют частой регенерации, что замедляет доступ к ним. Чтение ячейки SDRAM происходит обычно в несколько тактов. Хоть рекламные проспекты и заявляют о том, что данные передаются с двойной частотой (DDR) 400 МГц, после адресации данные появляются только через несколько тактов работы системной шины. А процессор тем временем успевает отработать где-то в 10 раз тактов больше.

Ячейка SRAM состоит из нескольких транзисторов, образующих триггер, который не требует цикла регенерации. Благодаря чему адресация проходит намного быстрее - за один такт.

Расположение

КЭШ быстрее оперативной памяти, отчасти благодаря своему положению. Ведь линии связи, идущие по материнской плате, и разъем пагубно влияют на скорость. КЭШ современного персонального компьютера расположен прямо на процессоре, благодаря чему удалось сократить линии связи и улучшить их параметры. Однако на первых PC КЭШ тоже устанавливался на материнской плате и выигрывал только за счет преимуществ SRAM и работы с процессорной шиной. Кстати такой тип памяти более дорогой и энергоемкий, именно поэтому он до сих пор не вытеснил DDR SDRAM, даже в видеоадаптерах.

Начиная с Intel Pentium II, микросхемы КЭШ-памяти перекочевали поближе к процессору, на отдельную плату, которая вставлялась в Slot 1. А в Intel Pentium Pro они в виде отдельного кристалла монтировались вместе с процессором в одном корпусе. И вот совсем недавно КЭШ стали делать полностью на одном кристалле с процессором.

Стало заметно, что теперь оперативная память тоже подбирается поближе к CPU: например, в процессорах AMD Athlon 64 контроллер оперативной памяти находится на кристалле, что, конечно, улучшает работу всей иерархии памяти. Ведь до этого контроллер располагался в чипсете материнской платы. Налицо и архитектурные изменения: некоторые модели AMD Athlon 64 имеют два независимых порта для DDR, что позволяет ощутимо увеличить скорость обмена с оперативкой.

Типы КЭШ

Выше мы уже разобрались, что процессор сначала обращается к КЭШ, а если нужных данных там нет, то задействуется медленная оперативная память. Давай рассмотрим происходящее подробнее.

Ассоциативный КЭШ

Fully Associative cache называется так благодаря своей организации. Допустим, что у тебя 512 Мб оперативки (ОП), а КЭШ всего 512 Кб. Как определить, какие именно адреса из ОП хранятся в КЭШ? Очень просто: их надо сохранять. Когда какие-то данные подкачиваются в КЭШ, сохраняется не только содержимое ячейки оперативной памяти но и ее адрес. Ячейка, где хранится адрес, называется тегом. То есть содержимое полностью ассоциативного КЭШ представляет собой набор избранных адресов из оперативки и данные, которые по ним хранятся.

Процессор такой КЭШ практически не замечает - он отсылает запросы по адресам в оперативной памяти, и если их копия имеется в КЭШ, то тег совпадает с адресом ОП, и очень быстро нужная инфа предоставляется для обработки. Если нужного тега с адресом ОП нет, значит нужно лезть в оперативку, теряя драгоценные кванты процессорного времени.

Однако у такого великолепного КЭШ есть и недостатки: теги занимают много полезного места, довольно сложно проводить в них поиск нужного адреса. Необходимо запрашиваемый адрес сравнить с каждым тегом, в котором есть данные. Хотя в плане эффективности использования процессорного времени полностью ассоциативный КЭШ – одно из лучших решений.

КЭШ прямого отображения

Direct Mapped cache – частный случай ассоциативного КЭШ. Только, чтобы избежать сложного поиска, разработчики разбили оперативную память на жесткие участки, по начальным битам адреса. То есть теперь оперативная память прямо отображается в КЭШ. А по начальным битам адреса можно точно узнать, где именно может находиться нужная ячейка. Естественно, данные хранятся не одни, а вместе с тегом, в котором есть остаток адреса. С помощью этого тега можно точно определить, какой именно адрес из жесткой области находится в КЭШ прямого отображения.

Такой КЭШ очень прост, но главный недостаток в том, что в него нельзя записать несколько последовательных массивов из оперативки. Из каждой области памяти может храниться только одна строка (несколько двоичных слов).

Это приводит к тому, что часть областей КЭШ пустует, в то время как другая постоянно обновляется из-за недостатка места.

Множественно-ассоциативный КЭШ

N-Way Set Associative cache получил наибольшее распространение в «настольных» процессорах. В нем память, так же, как в КЭШ прямого отображения, разбита на жесткие области, поэтому по начальным битам адреса сразу можно обнаружить область, где примерно может находиться нужная ячейка. Однако в каждой области находится не одна строка из ОП, а несколько. Ими управляют маленькие модули ассоциативного КЭШа. В рамках каждой области хранится небольшое количество адресов оперативной памяти, значит и тегов тоже немного, следовательно и поиск по ним организовать несложно. То есть не требуется каких-то навороченных технических решений, зато теперь есть возможность записывать в КЭШ по небольшому куску последовательных данных из каждой области памяти. А именно на последовательных данных небольшого размера КЭШ и дает преимущества в производительности!

Буфер записи

Из КЭШ можно не только читать данные, но и записывать их туда. Но тогда в оперативной памяти и в КЭШ будут разные значения. Для этого все изменения в КЭШ должны отражаться и на оперативке. Однако если после каждого изменения в КЭШ ждать пока они будут внесены в ОП (write-through), то прирост скорости сводится на нет. Поэтому используются буферы, в которых выставляются изменения. КЭШ продолжает нормально работать дальше, в то время как с буфера данные переписываются в оперативную память. Такой режим называется «write-back» (WB).

L1, L2, L3

Часто приходится видеть в прайсах, что один и тот же процессор с одинаковой тактовой частотой поставляется в двух вариантах, например с КЭШ L2 256 Кб и 512 Кб. Отсюда и цена разнится. Оказывается, внутри процессора есть также многоступенчатая иерархия памяти. L1 (Level 1) – это уровень самый близкий непосредственно к АЛУ. L2 обычно кэширует оперативную память, а L1 кэширует L2. В некоторых версиях процессоров между L2 и оперативной памятью добавляют уровень L3. Но в «настольных» процессорах на сегодняшний день чаще всего встречаются только два уровня: L1 и L2.

Чем же они отличаются? Последнее время производители в один голос утверждают, что оба уровня, а если есть третий, то и он тоже, работают на частоте ядра процессора. Однако L1, как правило, меньше по объему, чем L2. Раньше L2 выносился рядом с процессором на модуль для установки в SLOT 1. Перекочевав на кристалл CPU, L2 первоначально работал не на полной скорости процессора.

Производители не сознаются, но есть все основания предполагать, что L2 все же работает медленнее, чем L1. Ведь из-за увеличенного объема адресация должна идти дольше и сложнее. Как мы уже выяснили выше, в некоторых случаях оперативка может тормозить работу КЭШ, поэтому разумно разделить L2 и L1.

Но самое главное архитектурное различие в том, что L1 делится на КЭШ команд и КЭШ данных, в то время как в L2 находятся избранные копии содержимого оперативной памяти. Тут-то и начинаются игры производителей с производительностью. Например, на уровне L1 в процессоре Intel Pentium 4 находится Execution Trace cache, участвующий в работе разрекламированной технологии Hyper-Threading, которая превращает один физический процессор в два логических. У CPU AMD поколений K7 и K8 на уровне L1 происходит Predecode – предварительное декодирование команды, ускоряющее процесс ее выдачи.

Exclusive vs. Inclusive

В иерархии памяти обычно более быстрые уровни хранят избранные копии содержимого более медленных уровней. Например, в L2 КЭШе хранятся области из оперативной памяти, а в L1 хранятся области из L2. Такая архитектура называется инклюзивной (Inclusive).

Однако! Места на кристалле процессора мало, и приходится платить за каждый квадратный миллиметр кремниевой пластины. Несколько расточительно хранить на этом ограниченном пространстве две копии одних и тех же данных. Поэтому в эксклюзивной (Exclusive) архитектуре КЭШ после того как данные переданы из L2 в L1, их копия в L2 уничтожается. То есть в эксклюзивном КЭШе мы можем хранить объем информации L2+L1, а в инклюзивном только L2, так как в L1 находятся копии L2. Хотя в таком случае скорость КЭШа может уменьшаться, но эффективность увеличивается, по мнению компании AMD. Благодаря, кроме всего прочего, эксклюзивности КЭШ, процессоры AMD с меньшими тактовыми частотами смогли конкурировать с CPU Intel с более высокими частотами.

Влияние КЭШ на внешний вид CPU

Возьмем три процессора AMD K7, вот как зависит степень интеграции процессоров этого поколения от объема КЭШ L2:


  • 25.2 миллионов транзисторов (152 Кб L1, 64 Кб L2)
  • 37.2 миллионов транзисторов (152Кб L1, 256 Кб L2)
  • 54.3 миллионов транзисторов (152Кб L1, 512 Кб L2)

Нетрудно посчитать, что один килобайт КЭШ L2 увеличивает степень интеграции процессора примерно на 66 тысяч транзисторов. Причем 512 Кб КЭШ L2 занимает больше половины площади кристалла. Что хорошо видно на фотографиях ядер с большим объемом КЭШ. То есть вместо этого дополнительного КЭШ мы бы вполне могли вместить второй процессор!

Похожая ситуация наблюдается и у двух процессоров Intel Pentium 4:


  • 42 миллионов транзисторов (12 Кб L1tc + 8 Кб L1d, 256 Кб L2)
  • 55 миллионов транзисторов (12 Кб L1tc + 8 Кб L1d, 512 Кб L2)

Здесь на каждый дополнительный килобайт приходится где-то 50 тысяч транзисторов.

Обрати внимание, кстати, что у процессоров AMD Athlon XP КЭШ L1 значительно больше L1 у Intel Pentium 4.

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

Хотя производители часто предпочитают продавать процессоры с отключенным дополнительным объемом КЭШ. То есть ты имеешь, например, Intel Pentium 4 55 миллионов транзисторов с КЭШ L2 всего 256 Мб, при этом он греется сильнее, чем CPU со степенью интеграции 42 миллиона транзисторов.

Выводы

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

Однако разработчики, несмотря на явные тестовые результаты, будут рекламировать увеличенный объем КЭШ. Будут вынуждать нас приобретать новые еще более сильно греющиеся процессоры. Или, еще хуже того, появится тяжелый софт, требующий 1 Мб, а затем и 4 Мб КЭШ L2.

Хотя есть и другие пути развития: например, несколько процессоров на кристалле, или интеграция графического процессора с центральным.

Что такое кэш в процессоре и зачем он нужен

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

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

Предпосылки создания кэш-памяти

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

Каждый раз при запуске программы из постоянной памяти, ее наиболее часто используемые данные или вся программа целиком «подгружаются» в оперативную память. Это делается для ускорения обработки данных процессором. Считывать и обрабатывать данные из оперативной памяти процессор будет значительно быстрей, а, следовательно, и система будет работать значительно быстрее в сравнении с тем, если бы массивы данных поступали напрямую из не очень быстрых (по меркам процессорных вычислений) накопителей.

Если бы не было «оперативки», то процесс считывания напрямую с накопителя занимал бы непозволительно огромное, по меркам вычислительной мощности процессора, время.


Но вот незадача, какой бы быстрой ни была оперативная память, процессор всегда работает быстрее. Процессор — это настолько сверхмощный «калькулятор», что произвести самые сложные вычисления для него — это даже не доля секунды, а миллионные доли секунды.

Производительность процессора в любом компьютере всегда ограничена скоростью считывания из оперативной памяти.

Процессоры развиваются так же быстро, как память, поэтому несоответствие в их производительности и скорости сохраняется. Производство полупроводниковых изделий постоянно совершенствуется, поэтому на пластину процессора, которая сохраняет те же размеры, что и 10 лет назад, теперь можно поместить намного больше транзисторов. Как следствие, вычислительная мощность за это время увеличилась. Впрочем, не все производители используют новые технологии для увеличения именно вычислительной мощности. К примеру, производители оперативной памяти ставят во главу угла увеличение ее емкости: ведь потребитель намного больше ценит объем, нежели ее быстродействие. Когда на компьютере запущена программа и процессор обращается к ОЗУ, то с момента запроса до получения данных из оперативной памяти проходит несколько циклов процессора. А это неправильно — вычислительная мощность процессора простаивает, и относительно медленная «оперативка» тормозит его работу.

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


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

Как работает кэш-память

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

Кэш-память — это, по сути, та же оперативная память, только более быстрая и дорогая. Она имеет небольшой объем и является одним из компонентов современного процессора.

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

Спекулятивное исполнение — метод оптимизации работы процессора, когда последний выполняет команды, которые могут и не понадобиться в дальнейшем. Использование метода в современных процессорах довольно существенно повышает их производительность.

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

Но как процессор это делает? Процессор что, следит за пользователем? В некоторой степени да. Он выгружает данные из оперативной памяти в кэш-память для того, чтобы иметь к ним мгновенный доступ, и делает это на основе предыдущих данных, которые ранее были помещены в кэш в этом сеансе работы. Существует несколько способов, увеличивающих число «попаданий» (угадываний), а точнее, уменьшающих число «промахов». Это временная и пространственная локальность — два главных принципа кэш-памяти, благодаря которым процессор выбирает, какие данные нужно поместить из оперативной памяти в кэш.

Временная локальность

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

Пространственная локальность

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

Набор таких адресов называется строкой (блоком) кэша, а количество считанных данных — длиной кэша.

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

Иерархия кэш-памяти

Любой современный процессор имеет в своей структуре несколько уровней кэш-памяти. В спецификации процессора они обозначаются как L1, L2, L3 и т. д.


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

Так же организована и работа быстрых ячеек кэша. Ячейки памяти первого уровня (L1) располагаются на кристалле в непосредственной близости от вычислительного ядра. Эта память — самая быстрая, но и самая малая по объему. В нее помещаются наиболее востребованные данные и команды. Для передачи данных оттуда потребуется всего около 5 тактовых циклов. Как правило, кэш-память первого уровня состоит из двух блоков, каждый из которых имеет размер 32 КБ. Один из них — кэш данных первого уровня, второй — кэш инструкций первого уровня. Они отвечают за работу с блоками данных и молниеносное обращение к командам.

Кэш второго и третьего уровня больше по объему, но за счет того, что L2 и L3 удалены от вычислительного ядра, при обращении к ним будут более длительные временные интервалы. Более наглядно устройство кэш-памяти проиллюстрировано в следующем видео.

Кэш L2, который также содержит команды и данные, занимает уже до 512 КБ, чтобы обеспечить необходимый объем данных кэшу нижнего уровня. Но на обработку запросов уходит в два раза больше времени. Кэш третьего уровня имеет размеры уже от 2 до 32 МБ (и постоянно увеличивается вслед за развитием технологий), но и его скорость заметно ниже. Она превышает 30 тактовых циклов.


Процессор запрашивает команды и данные, обрабатывая их, что называется, параллельными курсами. За счет этого и достигается потрясающая скорость работы. В качестве примера рассмотрим процессоры Intel. Принцип работы таков: в кэше хранятся данные и их адрес (тэг кэша). Сначала процессор ищет их в L1. Если информация не найдена (возник промах кэша), то в L1 будет создан новый тэг, а поиск данных продолжится на других уровнях. Для того, чтобы освободить место под новый тэг, информация, не используемая в данный момент, переносится на уровень L2. В результате данные постоянно перемещаются с одного уровня на другой.

Также при хранении одних и тех же данных могут задействоваться различные уровни кэша, например, L1 и L3. Это так называемые инклюзивные кэши. Использование лишнего объема памяти окупается скоростью поиска. Если процессор не нашел данные на нижнем уровне, ему не придется искать их на верхних уровнях кэша. В этом случае задействованы кэши-жертвы. Это полностью ассоциативный кэш, который используется для хранения блоков, вытесненных из кэша при замене. Он предназначен для уменьшения количества промахов. Например, кэши-жертвы L3 будут хранить информацию из L2. В то же время данные, которые хранятся в L2, остаются только там, что помогает сэкономить место в памяти, однако усложняет поиск данных: системе приходится искать необходимый тэг в L3, который заметно больше по размеру.

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

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

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

реклама


А теперь о Raptoreum. Важно! Не поддавайтесь на провокации, относительно этой криптовалюты, которая добывается на мощностях кэш-памяти центральных процессоров! Чем больше кэш-память второго и любого последующего уровня (при его наличии), тем быстрее происходят расчёты, результатом которых является условный доход. Так как сейчас на рынке именно у процессоров AMD самый «жирный» кэш, то наличие их на полках магазинов и соответственно рекомендованной стоимости этих процессоров под угрозой со стороны новой криптовалюты. Под удар могут попасть старейшие модели AMD Ryzen и все Threadripper.

MSI RTX 3070 сливают дешевле любой другой, это за копейки Дешевая 3070 Gigabyte Gaming - успей пока не началось

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


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

реклама

var firedYa28 = false; window.addEventListener('load', () => < if(navigator.userAgent.indexOf("Chrome-Lighthouse") < window.yaContextCb.push(()=>< Ya.Context.AdvManager.render(< renderTo: 'yandex_rtb_R-A-630193-28', blockId: 'R-A-630193-28' >) >) >, 3000); > > >);

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

Кэш-память процессора – это небольшая по объему, но супербыстрая оперативная память. Она встроена в процессор и является своеобразным буфером, при обмене CPU данными с медленной оперативной памятью, а в современных реалиях еще и с NVME SSD и видеокартой.


В большинстве процессоров используется многоуровневая система кэша:

реклама

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

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

• Кэш-память третьего уровня (L3) – еще более объемная и еще более медленная. Но она все равно быстрее любой оперативной памяти, даже новой DDR5. Со скоростями в несколько сотен гигабайт в секунду пока еще приходится считаться. Ее размер в современных процессорах в мейнстрим сегменте достигает нескольких десятков мегабайт, а в серверных AMD Epyc счет пошел уже на сотни мегабайт. В отличие от L1 и L2, кэш третьего уровня является общим для всех ядер процессора.

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

реклама


А теперь небольшой экскурс в развитие и эволюцию кэш-памяти. Если за отправную точку взять Pentium 1, то кэша L2 у него не было. L1 был объёмом 32 Кб. L2 как правило распаивался на материнской плате. Когда появился Pentium II, то L2 сразу стал равным 512 Кб, но он располагался рядом с ядром процессора на отдельной микросхеме и имел низкую скорость, но все равно это лучше, чем ничего.

Pentium-III с Socket 370 имел уже половину объема от Pentium II – 256 Кб, но зато этот кэш был быстрее, так как он был интегрирован в кристалл процессора. Pentium 4 вначале удвоил этот объём до 512 Кб, так называемый Nothwood, а последовавшее за ним ядро Prescott довел L2 до 1 Мб. Это уже объём дней сегодняшних.


Во времена Pentium 4 случилось еще одно важное событие: у Pentium 4 Extreme Edition впервые появился L3 кэш. До этого момента в десктопах такого явления не было. Объем L3 равнялся «жирным» 2 мегабайтам, что положительно влияло на производительность и цену процессора.


После смены с 478 на 775 контактов без ножек, первые “новые” Pentium с ядрами Prescott-2M и Cedar Mill увеличили L2 до 2-х мегабайт, а L1 так и оставался в пределах 32 Кб.

Микроархитектура Core2 и Core2 Quad значительно увеличили объемы кэшей. Так, объем L2 кэша уже варьировался от 4 до 12 Мб, но эти цифры нужно поделить на два, из особенности организации кэша, так как группы ядер по факту взаимодействовали только с половиной этого объема, но суммарный объем был именно таким.

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


Так, i5-2500К отличался от i7-2600K только объемом кэша. И надо отметить, речь уже идет о L3 кэше, который начинает появляться уже повсеместно. В первом случае L3 = 6 Мб, во втором 8 Мб. L2 у обеих моделей равнялся 256 Кб на одно ядро, а L1 был равен по-прежнему 32 Кб.

Далее происходит рост L3 у последующих поколений. У i9-9900K он уже равен 16 Мб. Параллельно развивается HEDT линейка процессоров Intel, где L3 уже достигает 24.5 Мб. Но дальнейшее развитие всей процессорной архитектуры меняют процессоры AMD с микроархитектурой ZEN и производные от них. Стартовало первое поколение AMD Ryzen c L2 = 512 Кб и L3 = 8 Мб, а на сегодняшний день топовый Ryzen Gen3 уже обладает 64 Мб L3 кэша. Недавний анонс новых серверных процессоров AMD Epyс вообще увеличил объем L3 до астрономических 768 Мб.


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

Поэтому при выборе того или иного процессора, обращайте внимание на объем L3 кэша процессора. Возможно, в будущем, объемы порядка пары гигабайт L3 кэша станут нормой, но а пока следим за стоимостью AMD Ryzen, в зависимости от популярности Raptoreum. Надеюсь, этот блог оказался для вас полезным.



В одной из наших прошлых статей мы коснулись такого аспекта работы RAM как аппаратно зарезервированная память, объём которой можно посмотреть в Диспетчере задач, переключившись на вкладку «Производительность» и выбрав слева блок «Память». Так вот, помимо этой самой зарезервированной памяти там имеются и другие данные о работе ОЗУ, которые могут вызвать у пользователя вопросы. Например, что такое кэшированная память в Диспетчере задач, почему она иногда занимает так много места, можно и нужно ли предпринимать какие-либо меры с целью её уменьшения?

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


Такие разные кэши

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

Что такое кэш процессора, и как он работает

Когда ЦП обращается к оперативной памяти, чтобы считать или записать в неё данные, он сначала идентифицирует ячейку, с которой собирается работать. Для этого он формирует и отправляет в память запрос, RAM же его обрабатывает и открывает доступ процессору к хранящимся в соответствующей ячейке данным. Эта процедура занимает некоторое время, а поскольку процессор гораздо шустрее оперативной памяти, он вынужден ждать ответа от ОЗУ. Чтобы ускорить получение процессором данных из оперативной памяти, была придумана так называемая быстрая оперативная память, или иначе кэш-память.

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

↑ Что такое кэшированная память в Диспетчере задач


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

Кстати, сведения об этой памяти указаны также в оснастке «Монитор ресурсов», в котором она обозначена секцией синего цвета «Ожидание». По сути, кэшированная память представляет собой часть свободной оперативной памяти, выделенной под неиспользуемые данные наиболее приоритетных процессов.
В то же время кэшированная память не привязана жёстко к данным процессам, поэтому её страницы могут быть использованы для записи других, менее приоритетных процессов. Убедиться в этом вы можете сами, открыв пару десятков вкладок в браузере. Вы увидите, что объем доступной кэшированной памяти сразу станет меньше, а всё потому, что зарезервированные страницы были переданы браузеру для записи в них данных вкладок. Из этого следует, что беспокоиться вам нужно не о увеличении размера кэшированной памяти, а скорее наоборот — об уменьшении доступного объёма кэша при отсутствии свободной памяти, выделенной в Мониторе ресурсов голубым цветом.

Нужно ли очищать кэшированную память

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

Очистка кэшированной памяти в RAMMap и EmptyStandbyList


Самый простой способ обнулить кэш оперативную память — это воспользоваться бесплатной тулзой RAMMap, разработанной одним из сотрудников Microsoft Марком Руссиновичем. Утилита не требует установки, чтобы очистить в ней память, выберите в главном меню Empty → Empty Standby List. Объем кэшированной памяти тут же уменьшится в несколько раз, но уже через несколько минут система опять её зарезервирует.
Также вы можете воспользоваться такой утилитой как EmptyStandbyList, работающей по тому же принципу что и функция Empty Standby List в утилите RAMMap. В отличие от RAMMap, тулза EmptyStandbyList не имеет графического интерфейса, чтобы очистить с её помощью кэшированную память, достаточно просто запустить исполняемый файл. Естественно, через некоторое время кэш снова будет заполнен, если вы хотите это предотвратить, в Планировщике заданий вам нужно создать задачу, которая станет запускать исполняемый файл EmptyStandbyList.exe каждые 2, 3, 5, 10 или сколько вам нужно минут.

Откройте Планировщик командой taskschd.msc, справа нажмите «Создать» задачу
и выставьте настройки как показано на скриншоте. Обратите внимание, что в качестве пользователя мы указываем Систему, тогда как по умолчанию задание будет выполняться от имени учётной записи администратора. В условиях запуска (триггеры) указываем интервал между запусками задачи, на вкладке «Действия» указываем путь к исполняемому файлу утилиты. Сохраняем задание и проверяем его работу.

Использовать этот трюк или нет, решать вам. Если вы наблюдаете чрезмерное заполнение RAM-кэша, сопровождающееся снижением производительности в играх или при работе с «тяжёлыми» приложениями, пробуйте, в остальных случаях особого смысла в очистке кэша памяти мы не видим.

Читайте также: