Что на самом деле делает кэш процессора (L1/L2/L3)
Размер кэша появляется в спецификациях как маленькая, легко пропускаемая цифра — но у него непропорционально большое влияние на реальную производительность, которое стоит реально понять.
Основная проблема, которую решает кэш
ОЗУ быстрая по сравнению с хранилищем, но медленная по сравнению с собственной скоростью выполнения процессора. Если бы процессору приходилось ждать полного доступа к ОЗУ для каждой единицы нужных данных, он проводил бы большую часть времени простаивая. Кэш существует, чтобы держать часто нужные данные физически близко к исполнительным блокам процессора, избегая этого ожидания.
Почему три уровня, а не один
Есть прямой компромисс между скоростью и размером в технологии памяти — максимально быстрая память также самая дорогая и физически труднее всего масштабируется. Процессоры справляются с этим через многоуровневую иерархию:
| Уровень | Типичный размер | Относительная скорость | Область |
|---|---|---|---|
| L1 | Десятки КБ на ядро | Самая быстрая | На каждое ядро, очень маленький |
| L2 | Сотни КБ до пары МБ на ядро | Быстрый | Обычно на каждое ядро |
| L3 | Несколько МБ до десятков МБ | Медленнее L1/L2, но всё ещё намного быстрее ОЗУ | Общий для всех ядер |
Процессор проверяет L1 первым (самый быстрый, наименьший шанс иметь нужное из-за крошечного размера), затем L2, затем L3, и обращается к ОЗУ, только если ни в одном из них нет нужных данных — этот откат называется промахом кэша, и это именно та задержка, для минимизации которой спроектирована вся иерархия.
Почему размер кэша конкретно влияет на производительность в играх
Игры часто работают с паттернами данных, непропорционально выигрывающими от большего кэша — держать больше активных рабочих данных игры близко к процессору позволяет чаще избегать дорогих обращений к ОЗУ. Это прямая логика линейки чипов X3D от AMD, которая добавляет существенный дополнительный кэш L3 к в остальном похожим чипам специально потому, что некоторые игры показывают значимо большую реальную выгоду от этого дополнительного кэша, чем предсказала бы одна только спецификация количества ядер или частоты.
Простая аналогия для иерархии
Представьте L1 как несколько инструментов на вашем верстаке прямо сейчас, L2 как ящик с инструментами рядом с вами, L3 как шкаф с инструментами через комнату (общий со всеми остальными в мастерской), а ОЗУ как отдельный склад снабжения вниз по улице. Вы всегда сначала проверяете ближайший вариант — идти на склад за каждым отдельным инструментом сделало бы любую работу мучительно медленной.
Это одна часть более широкой картины, описанной в нашем объяснении как процессор выполняет программу, и связано с тем, почему сама ОЗУ существует как отдельный, более медленный уровень ниже кэша.
Частые вопросы
Почему процессорам нужны три уровня кэша, а не один большой?
Есть прямой компромисс между скоростью и размером кэша — самая быстрая технология памяти также самая дорогая и труднее всего масштабируется до больших объёмов, поэтому процессоры используют многоуровневый подход: очень быстрый, но крошечный L1, умеренно быстрый и больший L2, и больший, но несколько более медленный L3, балансируя скорость и ёмкость на каждом уровне.
Больше кэша всегда означает лучшую производительность в играх?
Часто значимо да для чувствительных к кэшу игр — именно это лежит в основе чипов X3D от AMD, которые добавляют существенный дополнительный кэш L3 специально потому, что некоторые игры необычно чувствительны к нему, показывая большую реальную выгоду, чем предполагала бы одна спецификация ядер/частоты.
Что происходит, когда нужные данные нет ни на одном уровне кэша?
«Промах кэша» — процессору приходится вместо этого получать данные из ОЗУ, что значительно медленнее любого уровня кэша. Это именно та задержка, ради минимизации которой существует вся иерархия кэша.