Кеш процесора - це
Кеш мікропроцесора— кеш (надоперативна пам'ять), що використовується мікропроцесором комп'ютера зменшення середнього часу доступу до комп'ютерної пам'яті. Є одним із верхніх рівнів ієрархії пам'яті [1] . Кеш використовує невелику, дуже швидку пам'ять (зазвичай типу SRAM), яка зберігає копії даних, що часто використовуються з основної пам'яті. Якщо більшість запитів у пам'ять буде оброблятися кешем, середня затримка звернення до пам'яті буде наближатися до затримок роботи кешу.
Збільшення розміру кеш-пам'яті позитивно впливає на продуктивність багатьох додатків [2] .
Зміст
Принцип роботи
Для додавання даних в кеш після кеш промаху може знадобитися витіснення раніше записаних даних. Для вибору лінійки, що заміщується, використовується евристика, званаполітика заміщення(англ.replacement policy). Основною проблемою алгоритму є передбачення, яка лінійка найімовірніше не знадобиться для наступних операцій. Якісні пророкування складні, і апаратні кеші використовують прості правила, такі як LRU. Позначка деяких областей пам'яті якнекешуються(англ.non cacheable) покращує продуктивність за рахунок заборони кешування даних, що рідко використовуються. Промахи для такої пам'яті не створюють копію даних у кеші.
Існують також змішані політики. Кеш може бути з наскрізним записом (англ. write-through ), але для зменшення кількості транзакцій на шині запису можуть тимчасово поміщатися в чергу і об'єднуватися один з одним.
Дані основної пам'яті можуть змінюватися як процесором, а й периферією, використовує прямий доступом до пам'яті, чи іншими процесорами в многопроцессорной системі. Змінаданих призводить до старіння їх копії в кеші (станstale). В іншій реалізації, коли один процесор змінює дані в кеші, копії цих даних у кешах інших процесорів будуть позначені як stale. Для підтримки вмісту кількох кешів у актуальному стані використовується спеціальний протокол кеш когерентності.
Структура запису у кеші
Типова структура запису в кеші
Блок даних (кеш-лінія) містить безпосередню копію даних із основної пам'яті. Адреса пам'яті поділяється (від старших біт до молодшим) наТег, індекс та зміщення. Біт актуальності означає, що цей запис містить актуальну (найсвіжішу) копію. Довжина поля індексу дорівнює біт і відповідає ряду (рядку) кешу, що використовується для запису. Довжина зміщення дорівнює.
Асоціативність
У порядку погіршення (збільшення тривалості перевірки на влучення) та покращення (зменшення кількості промахів):
- кеш прямого відображення (англ.direct mapped cache) - найкращий час влучення, і, відповідно, найкращий варіант для великих кешів;
- 2-х канальний множинно-асоціативний кеш англ.2-way set associative cache;
- 2-х канальний skewed асоціативний кеш (англ.«Best tradeoff for …. Caches whose sizes are in the range 4K-8K bytes» - André Seznec);
- 4-х канальний множинно-асоціативний кеш (англ.4-way set associative cache);
- повністю асоціативний кеш, англ. fully associative cache — найкращий (найнижчий) відсоток промахів (miss rate), і найкращий варіант при надзвичайно високих витратах при промаху (miss penalty).
Псевдо-асоціативний кеш
Види промахів
Промах читання з кешу інструкцій.Зазвичай дає дуже великузатримку, оскільки процесор не може продовжувати виконання програми (принаймні поточного потоку виконання) і змушений простоювати в очікуванні завантаження інструкції з пам'яті.
Промах читання з кешу даних.Зазвичай дає меншу затримку, оскільки інструкції, які не залежать від запитаних даних можуть продовжувати виконуватися, поки запит обробляється в основній пам'яті. Після отримання даних із пам'яті можна продовжувати виконання залежних інструкцій.
Промах із запису в кеш даних.Зазвичай дає найменшу затримку, оскільки запис може бути поставлений у чергу і наступні інструкції практично не обмежені у своїх можливостях. Процесор може продовжувати свою роботу, крім випадків промаху із запису з повністю заповненою чергою.
Категорії промахів (Three Cs)
Важливо також помітити, що перші системи віртуальної пам'яті були дуже повільними, тому що вони вимагали перевірки таблиці сторінок (що зберігається в основній ОЗП) перед будь-яким програмним зверненням на згадку. Без використання кешування для відображення такі системи зменшують швидкість роботи з пам'яттю приблизно в 2 рази. Тому використання TLB дуже важливе і іноді його додавання до процесорів передувало появі звичайних кешів даних та інструкцій.
Швидкість цих дій (затримка завантаження з пам'яті) критично важлива для продуктивності процесорів, і тому більшість сучасних L1-кешів є віртуально індексованими, що, як мінімум, дозволяє блоку MMU виробляти запит в TLB одночасно з запитом даних їх кеш-пам'яті.