Кэш L1, L2 и L3
Коротко: Кэш — это очень быстрый буфер в процессоре, хранящий данные и команды, которые скоро понадобятся. Есть три уровня: L1 (маленький, самый быстрый), L2 (средний) и L3 (большой, общий, медленнее).
Подробнее: Основная память для процессора очень медленная: одно обращение длится как сотни шагов вычислений. Кэш сглаживает это наблюдением, что программам многократно нужны одни и те же данные (временная локальность) и соседние данные (пространственная локальность). Несколько уровней — компромисс: чем быстрее память, тем она дороже и меньше.
Подробности
| Уровень | Типичный размер | Время доступа | Принадлежит | Особенность |
|---|---|---|---|---|
| L1 | 32 – 64 КБ (отдельно для данных и команд) | ~4 такта | каждому ядру | Самый быстрый и маленький, разделён на L1d (данные) и L1i (команды) |
| L2 | 256 КБ – 2 МБ | ~12 тактов | обычно каждому ядру | Буфер между L1 и L3 |
| L3 | 8 – 128 МБ (и больше, 3D V-Cache) | ~40 тактов | всем ядрам вместе | Обменивает данные между ядрами |
| RAM | ГБ | ~200+ тактов | внешняя | для сравнения |
Как это работает:
- Данные загружаются строками кэша (cache line) по 64 байта.
- Попадание (hit): данные там, быстро. Промах (miss): данные нужно подгрузить с следующего уровня, процессор ждёт.
- Вытеснение (eviction): когда кэш полон, обычно выбрасывается строка, не использовавшаяся дольше всех (типа LRU).
- Когерентность: если одно ядро изменило данные, остальные ядра должны обновить или отбросить свои копии (протоколы вроде MESI).
Почему несколько уровней?
- Один большой кэш был бы медленным (длиннее пути, больше управления).
- Маленький быстрый L1 перехватывает большинство обращений. То, что не помещается, лежит в L2 и L3.
- Так сочетаются высокая скорость и достаточная ёмкость.
На практике:
- Программы работают быстрее, когда читают данные по порядку (массивы), а не скачками (связные списки, случайный доступ).
- Игры и базы данных сильно выигрывают от большого L3 (AMD X3D, 3D V-Cache).
- Размер кэша — наряду с частотой и числом ядер — критерий покупки.
- Атаки вроде Spectre и Meltdown использовали различия во времени в кэше.
См. также: Устройство процессора: исполнительные блоки и кэш, Иерархия памяти и строки кэша, Кэши