Функция кэш памяти процессора
Известно, что процессор работает с данными, которые доставляются в него из оперативной памяти. Но в их взаимодействии есть одна серьёзная проблема: ОЗУ работает гораздо медленнее, чем CPU, что для последнего означает постоянные простои, в ожидании, пока из оперативной памяти придут нужные данные. Чтобы избежать простоев, в кристалл чипа интегрирована та самая кэш-память, играющая роль буфера между оперативной памятью и процессором. Кэш-память загружает и хранят в себе данные, с которым процессор работает в текущий момент, что избавляет от необходимости ждать эти данные из ОЗУ. Таким образом, кэш память процессора предназначена для того, чтобы сглаживать разницу в скорости работы между процессором и ОЗУ, чтобы вычисления производились как можно быстрее.
Помимо выравнивания скорости, кэш еще и перепаковывает данные, чтобы процессору было проще их понимать, рассчитывать и возвращать обратно.
Устройство кэш памяти процессора
Чтобы понять, на что влияет кэш память процессора и как работает, необходимо сперва разобраться, как она устроена, что мы и сделаем. Общем и целом, система процессорного кэша состоит из двух важных составляющих: контроллера, который управляет движением данных, и самой кэш-памятью — где эти данных хранятся. Если говорить образно, то кэш-память — это склад, а контролер — погрузчик, который снует по помещению и подтаскивает поближе к процессору нужные ящики.
Контроллер кэш-памяти
Итак, первая составляющая блока — контроллер по управлению содержания кэша. Он регулярно проверяет, что пришло к процессору из ОЗУ, переварилось, и возвратилось обратно. Контроллеры зачастую установлены внутрь чипов, но еще не так давно находились на северном мосту (до AMD64 и Intel Nehalem соответственно).
Когда одно из ядер обращается к контроллеру за информацией, последний проверяет ее наличие в кэше. Если есть — отдает (это называется «кэш-попадание»), если нет — ядро ожидает, пока медленная и неповоротливая улитка (оперативная память) доставит все необходимое. Эта ситуация зовется «кэш-промах».
Основная задача контроллера заключается в том, чтобы минимизировать количество промахов, а то и вовсе свести к нулю, и потому он должен загружать кэш-память только важными данными по принципу «всегда под рукой». Другое дело, что для этого контроллер должен уметь «ванговать», т.е. предсказывать события, пользуясь для выбора загружаемых из ОЗУ данных так называемой «интеллектуальной стратегией кэширования», которая основана на анализе уже имеющихся ошибок. Проще говоря, следуя заложенным в него алгоритмам, контроллер рассчитывает, какие данные могут понадобиться процессору и грузит их заранее. Если он «угадал», то ставит себе галочку и запоминает опыт, как удачный. Если не угадал, то бракует такой опыт, и меняет логику выбора данных для предварительной загрузки.
Современные контроллеры работают с возможностью глубокого самообучения и аналитики, что сильно снижает количество промахов. Чем дольше устройство работает в системе, тем лучше понимает требования пользователя и тем чаще выдает необходимый результат. Даже процессор понимает, что в случае неудачи его заменят. Точнее, это понимают производители процессоров.
Строение кэш-памяти
Что вообще представляет собой этот модуль? Это отдельная, но размещенная непосредственно на плате ЦПУ микросхема SRAM (Static Random Access Memory) с огромной скоростью работы. Столь высокий показатель объясняется тем, что DRAM (ОЗУ) использует для работы конденсаторы, а SRAM — транзисторы, что и обеспечивает прирост в 10 раз.
Но и у SRAM-памяти есть свои особенности, которые ограничивают возможности ее использования.
Проблема №1: транзисторная память требует гораздо больше места на кристалле, поэтому много ее не поставить. Если говорить числами, то 100 МБ SRAM = 4 ГБ DRAM в плане габаритов. А подложка процессора, увы, не резиновая.
Проблема №2: чем больше объем SRAM, тем ниже скорость и выше задержки. Поэтому производители придумали хитрый способ обхода этой особенности, разделив весь кэш на несколько блоков разного размера, и назвав их «уровни» (Layers).
Уровни кэш памяти процессора
Итак, кэш в современных ЦП дифференцирован по уровням:
- L1 — самый быстрый и маленький;
- L2 — не такой шустрый, но больший в объеме;
- L3 — самый медленный, но его много.
На схеме четко показан принцип работы с информацией, которая передается от хранилища к оперативной памяти, а от нее к кеш-памяти L3-L2-L1, и так до самого процессора. Процедура обмена данными закольцована.
В самом кристалле ЦП размещены арифметическо-логические устройства (ALU), выполняющие все математические вычисления. А помогают в этом регистры, которые также представляют собой SRAM-память, но технически не относятся к кэшу.
Каждому регистру присвоено одно из 64-битных целых чисел, а в качестве значения может быть фрагмент данных, кусок кода, ссылка на другой регистр и не только. Но поскольку сам регистр не способен хранить в памяти хоть что-то (у него ее попросту нет), на помощь приходит кэш L1.
Кэш память 1 уровня
L1 — память первого уровня. Это крайне скромный по размерам, но очень быстрый вычислительный блок, который постоянно скармливает регистрам важнейшую информацию, не давая им простаивать. В нем скомпилированы данные, к которым ЦП обращается чаще всего. Образный пример — дамская сумочка, без которой девушек напрочь парализует. Или обилие карманов на куртке.
Количество микросхем L1 зачастую привязано к количеству ядер процессора, при этом у каждого ядра кэш свой собственный. Размер блока может варьироваться от 64-256 КБ у десктопов и ноутбуков до 1-2 МБ для серверных решений.
Сам L1 тоже имеет свое разделение. Он делится на кэш команд и кэш данных:
Первый содержит информацию об операции, которой занимается ЦП, проще говоря, отвечает на вопрос: «Что надо сделать»;
Второй хранит в себе данные, над которыми должны производиться вычисления.
Эдакие функция и его переменные, только воплощенные в кремнии.
Кэш память 2 уровня
L2 — память второго уровня. Как уже было сказано, она не такая шустрая, но это компенсируется повышенным объемом. Также привязана к ядру и не взаимодействует с остальными. Однако маркетологи любят писать какие-то заоблачные цифры L2, попросту суммируя показатели. Например, для AMD Ryzen 7 5800X размер кэша заявлен в 512 КБ на ядро, что не так красиво. Но если суммировать все 8 блоков — получим уже интересные 8 МБ. К слову, для AMD EPYC 7763 показатель составляет уже 32 МБ, поскольку ядер уже 64 соответственно.
L2 можно представлять, как личное хранилище для L1: первому не хватает места под определенные, не самые критические задачи, и он сгружает их в кэш второго уровня на расстояние «вытянутой руки».
Кэш память 3 уровня
L3 — память третьего уровня. Самый большой и самый медленный кластер среди «родственников». При этом все еще быстрее ОЗУ и, тем более, SSD-накопителей, даже на базе NVMe.
Этот блок уже доступен для всех ядер процессора, как общественная библиотека. На третьем уровне временно хранятся данные, которые хоть и важны для продуктивной работы, но регистры обращаются за этой информацией относительно нечасто. Зато объем кэш памяти третьего уровня процессора может быть гигантским на фоне L1 и L2. Для Intel Xeon 3 Gen это до 80 МБ, для AMD же — все 256 МБ соответственно.
Наглядное сравнение скорости кэш памяти процессора
Трудно представить себе, насколько это — «быстрее» или «медленнее», когда речь заходит о передаче данных. Но если проводить аналогии с реальной жизнью, то соотношение скоростей для разных уровней памяти и других типов носителей можно представить так:
-
Вообразите, что вы — это ядро процессора, и тогда регистры для вас — как бумажные стикеры, расклеенные по периметру монитора. На них находится информация, которая необходима здесь и сейчас, и чтобы ее прочесть, достаточно поднять взгляд и сфокусироваться на нужном листочке;
-
Кэш L1 — папка на рабочем столе. Физическая, с массой файлов, где лежат документы, отчеты по бухгалтерии и прочие сводки по работе. Открыл, порылся в файлах, нашел нужный, прочитал информацию в 50-й строчке на 20-й странице и принялся за работу.
-
Кэш L2 — алгоритм тот же, но папка лежит не на столе на расстоянии вытянутой руки, а в книжном шкафу в конце кабинета. А значит необходимо подняться с места, дойти до шкафа, найти нужную полку и еще какое-то время потратить на поиск требуемой папки, страницы и строчки.
-
Кэш L3 — архивный отдел. Находится на 5 этаже под охраной злого бухгалтера. При этом вся информация рассортирована по стеллажам, которые практически не подписаны. Более того, один несчастный бухгалтер должен обслуживать 10-20 наседающих сотрудников (других ядер ЦП, которым тоже нужно «вот-прямо-сейчас») и носиться по всему помещению, выдавая документы по самым разным запросам.
-
Оперативная память — городская библиотека в отдаленном районе. Сначала до нее надо доехать, потом разбудить библиотекаря, дождаться, пока он будет блуждать по архиву в течение пары часов. А потом еще вернуться добычей обратно. И не факт, что все требуемое найдется с первого раза по причине банального недосмотра.
-
SSD-накопитель — курьерская доставка из соседней области. При всем желании и развитой логистической цепочке, ждать придется пару суток, а то и больше, если дороги переполнены.
-
HDD-накопитель — Алиэкспресс. Выбор шикарный, всего много, стоит — копейки. Но доставку ожидайте в течение месяца.
В такой интерпретации понимать разницу в памяти гораздо проще.
Само собой, реальная скорость сильно отличается от схематичных обозначений. Например, процессору для сложения пары 64-битных целых чисел требуется всего 1/4 наносекунды (10-9 степень), если он работает на частоте в 4 ГГц (примерно).
А вот HDD с их неповоротливой магнитной головкой приходится тратить миллисекунды (10-3 степень), и это настоящая пропасть. И это только поиск, без доставки в ОЗУ.
Конечно, на фоне всего вышесказанного возникает логичный вопрос, отчего бы не добавить еще уровней, и не сделать кэш такого размера, чтобы на нем хранилась вся информация, которая может понадобиться процессору. Вот только проблема в том, что кэш-память не нарастить в любом объеме, иначе чип попросту не поместится на подложку процессора. А если и поместится, то размером такой процессор будет с многоэтажный дом, а цену его в принципе будет невозможно представить.
Как объем кэш-памяти влияет на производительность
Тут все напрямую зависит от количества ядер и назначения процессора. Перед производителем ЦП стоит задача сделать максимально сбалансированный продукт, отвечающий требованиям пользователей.
Возьмем, к примеру, стандартный домашний или офисный компьютер на 4 ядра с частотой около 3 ГГц. Его сфера использования — таблицы, текстовые редакторы и офисные приложения, мультимедиа, простые игры и развлечения. Нет никакого смысла давать на процессор такой машины кэш L1 более 256 КБ, на L2 — больше 1 МБ, на L3 — 4 МБ (суммарно). Задачу решают оптимизацией кэша, обеспечивая до 90% кэш-попаданий на всех этапах. При этом промахами заканчивается не более 1-2% всех операций. Производитель десктопных устройств понимает простую истину: наращивание показателей не увеличит производительность, но больно отразится на стоимости, поскольку финальная цена такого компьютера окажется слишком высокой.
Совсем другое дело — серверный сегмент, где давно и прочно прописались кристаллы на 16, 32 и 64 ядра. Вот тут объемный кэш необходим (да и площадь кристалла для его размещения больше), ведь модели с маленьким кэшем попросту не сумеют обеспечить серверу нужную скорость вычислений для тысяч задач, которые требуется решать в одну единицу времени.
Вот так и появляются гигантские цифры в 128, и даже 256 МБ кэша L3, характерные, например, для AMD EPYC 2 и 3 поколений. Больше места для быстрого доступа — выше производительность. И не стоит забывать, что в серверном сегменте никто не занимается разгоном ядер для компенсации малого размера кэш-памяти, ведь от этого напрямую зависит тепловыделение процессора, которое также требуется отводить. Никакой пользы не будет от машины, где кристалл моментально нагревается от разгона и требует отвести 400, а то и 500 Вт тепла. На одном охлаждении разоритесь.
Когда нужно больше кэша?
Получит ли рядовой пользователь хоть какой-то прирост для своего домашнего компьютера, если заменит процессор с кэшем 8 МБ на 16 МБ при аналогичных показателях всего остального (ядра, частота, производитель, архитектура)? Нет.
Величина этого параметра, как объем кэша, полностью проявляет себя лишь при расчетах в тяжелых приложениях, будь то сложный рендер 3D-сцены, работа с огромным количеством полигонов, обращение к структурированной базе данных на регулярной основе, терминальная работа и т.д. Сюда же стоит добавить монтаж, стриминг с высоким битрейтом.
Но по большому счету, объемный кэш нужен серверам с высокой нагрузкой и посещаемостью. В качестве костылей производители предлагают для ускорения работы даже отдельные платы с кэш-памятью L4, которые подключаются либо в проприетарные, либо в PCI-E слоты.
Можно ли увеличить размер кэш-памяти процессора?
Как уже было сказано выше, такая возможность существует, но сделать это можно лишь путем установки дополнительных плат расширения. Долго, сложно, дорого и далеко не всегда востребовано. Плюс, об этом надо договариваться с производителем оборудования заранее, чтобы он предоставил необходимую ревизию и прошивку материнской платы.
Более простой вариант увеличения кэша — замена процессора на более мощный. Но при этом от перехода со 2-го на 3-е поколение чипов (Intel/AMD) разница будет лишь в увеличении базовой частоты ядра. Но если сделать скачок, допустим, с 1-го поколения на 3-е — то прирост производительности будет куда ощутимее.
Других способов увеличить кэш-память, увы, не предусмотрено.
Рекомендации по выбору кэша
В целом, рекомендация одна: при выборе учитывайте свои потребности.
Например, в процессорах настольных компьютеров величина кэша практически не играет роли для 90% типовых задач. Львиная доля пользователей выполняет исключительно казуальные задачи вроде серфинга интернета и социальных сетей. И им совершенно не важны уровни L1/L2/L3, как и общее время задержек при обращении от ЦП к ОЗУ и наоборот. Лишь бы работало.
Вторая категория пользователей — профессионалы, для которых ПК представляет собой полноценную рабочую станцию. На этом поле играют уже «промежуточные» процессоры вроде AMD Threadripper и Intel Core X. У них уже все в порядке с количеством ядер и с размером кэш-памяти, где одно дополняет другое, увеличивая суммарную производительность.
И самые требовательные в этом отношении — серверы. Здесь кэш — царь и бог в одном флаконе. Если взять две модели с идентичными характеристиками, например, для построения сети терминалов, то в гонке на выживание выиграет та модель серверного процессора, где значение L3 будет выше при прочих равных. Вот так это и работает.
Если у вас еще остались вопросы, вы всегда можете задать их нашим специалистам, заказав персональную консультацию для подбора параметров оборудования, которая идеально закроет все ваши потребности.