Кеш, його рівні.Різниця

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук

Кеш — це пам'ять з більшою швидкістю доступу, призначена для прискорення звернення до даних, що містяться постійно в пам'яті з меншою швидкістю доступу. Кешування застосовується ЦПУ, жорсткими дисками, браузерамі і веб-сервером-серверами.

Кеш (Cache) — спеціальний вид пам'яті або частина ОЗП, де зберігаються копії часто використовуваних даних. Забезпечує до них швидкий доступ. Кеш пам'ять зберігає вміст і адресу ділянки ОЗП, до якої часто звертається процесор. При звертанні процесора до адреси пам'яті, кеш перевіряє наявність у себе цієї адреси. Якщо він її знаходить, обмін даними виконується між процесором і кешем; якщо ні — між процесором і ОЗП. Кеш ефективний, коли швидкість роботи пам'яті менша за швидкість роботи процесора.

Характеристики кеша

- функція проекції блоків пам’яті на блоки кеша (в нас – пряма проекція);

- алгоритм заміни блоків кеша на блоки пам’яті(в нас – найпростіший, примусовий алгоритм);

- алгоритм виконання запису слова, як результату виконання дій в процесорі, до складної системи кеш-пам’ять (в нас застосовано спрощений алгоритм наскрізного запису).

Робота кеша

Детальний розгляд системи кеша залишено поза межами цієї статті. В даній статті пояснено роботу лише одного, спрощеного варіанту, відомого під назвою “кеш із прямою проекцією та наскрізним записом”. Звернемо увагу на те, що у поясненні фігурує термін "блок" з трьома можливими тлумаченнями:

- блок як інформаційна одиниця; він складається сусідніх за адресним принципом розташуванням слів без посилання на тип пам’яті;

- блок як множина комірок пам’яті даних або пам’яті інструкцій;

- блок як множина комірок робочої (внутрішньої) пам’яті кеша.

Розрізнення тлумачень не є важким, воно забезпечене контекстом пояснення.

Кожний блок пам’яті, що складають у середньому з (16 –64) сусідніх з точки зору адресування слів, можна копіювати не до будь-якого, а тільки до наперед визначеного блоку робочої пам’яті кеша. В нас номер блоку кеша, що приймає участь у копіюванні, однозначно визначено за допомогою семи розрядів адреси процесора, які містить поле Block. Негайно зауважимо, що процесор “не розуміє” і не “сприймає” структурної інтерпретації адреси, що згенерував. Таку інтерпретацію адресі надає лише і тільки лише контролер кеша, коли “незаконно, без відома процесора” перехоплює цю адресу, що призначена пам’яті даних або пам’яті інструкцій.

Нехай адреса, яку генерує процесор при читанні вмістимого однієї комірки пам’яті (тобто, слова) до власного регістра, має довжину 16 бітів. В цьому випадку, контролер кеша за допомогою семи середніх розрядів адресного слова звертається до визначеного цими розрядами блоку власної пам’яті. Зрозуміло, що бінарний номер кеша є збіжним з бінарним наповненням поля Block адреси процесора. Шуканий в такий спосіб блок завжди присутній в робочій пам’яті кеша. При цьому кеш має складатись з 2(7)=128 блоків.

Але вмістиме винайденого блоку робочої пам’яті кеша може бути копією не одного, а одного з декількох дозволених на копіювання блоків пам’яті. Наприклад, в нас до нульового блоку кеша дозволено копіювати наступні блоки пам’яті: 0, 128, 256, 512 і т.д. Усього до кожного блоку кеша можна скопіювати один з 2(5)=32 блоків пам’яті. Зрозуміло, що інформаційна місткість пам’яті в 32 рази перевищує місткість кеша. Таке співвідношення місткостей є коректним згідно до означення парадоксу пам’яті. Доходимо висновку, що нас задовільнить лише однин з 32-х можливих варіантів копіювання. Питання лише в тому, чи є поточне наповнення визначеного блоку кеша відповідним запитанню процесора? Питання розв’язують за допомогою вмістимого старших п’яти бітів адреси процесора, які утворюють поле із назвою Tag.

Якщо при вже визначеному номері блоку вмістиме блоку кеша є відповідним, тоді вмістиме полів tag з поля адреси процесора і з мітки блоку робочої пам’яті кеша співпадають, тоді у блок кеша в поточний момент містить потрібну копію. В цьому випадку фіксують ситуацію “влучення до кеша” (cache hit). Лишається за допомогою бітів правого поля формату адреси Word визначити шукане слово в межах винайденої в кеші копії блоку, яку щойно знайдено і перевірено на адекватність, та переслати це слово до входу процесора. Бачимо, що адресне запитання процесора на читання вмістимого комірки перехопив та задовільнив швидкий кеш, а повільна пам’ять не працювала.

Інша ситуація з назвою промах (cache miss) виникає при розбіжності вище зазначених двох тегів. Контролер кеша вимушений перетранслювати адресне запитання від процесора до повільної пам’яті та перейти (разом із процесором) до стану очікування результатів роботи пам’яті на читання. Аби зменшити кількість звернень до пам’яті навіть у цій ситуації, читають не одне, вказане адресою процесора слово, а цілий інформаційний блок (з 16-64 сусідніх слов), який, безперечно, має містити шукане процесором слово пам’яті. Тут спрацьовує принцип локалізації адресних звертань процесора – “наступне слово, що знадобиться процесору, скорше від усього, буде мати і наступну адресу”.

Блок надсилають до кеша, де його копіюють до блоку робочої пам’яті із вже відомим номером, і, водночас, потрібне слово з цього блоку, подають до інформаційного входу процесора. Зрозуміло, що при копіюванні інформаційного блоку з пам’яті до блоку робочої пам’яті кеша перевизначають вмістиме відповідного тегового поля.

Під час запису (пересилання слова з регістру процесора до комірки пам’яті) робота контролера кеша виконується так. Спочатку визначають присутність або відсутність копії блоку, який містить старе значення, відповідного до наданої процесором адреси. У разі влучення до кеша запис виконують як до блоку кеша, так і до блоку пам’яті, інакше тільки до блоку пам’яті Але в обидвох випадках запис виконують повільно через обов’язкову участь у ньому повільної пам’яті даних. Зазначимо, що пояснений алгоритм запису реалізує так званий кеш із наскрізним записом.



Принцип дії

Кеш — це швидка буферна пам'ять невеликої місткості, що розташована поміж процесором і основною пам'яттю. Кеш працює на повній швидкості процесора і не пригальмовує його роботу. Кеш (cache в перекладі з англ. — тайник) лишається прозорим для програміста, тому що система інструкцій процесора, як правило, не містить команд роботи з кешем. При поясненні роботи кеша можна прийняти, що процесор також не «бачить» кеш і генерує адреси пам'яті так, ніби кеша немає. Проте кеш, як правило, існує, і на апаратному рівні перехоплює сигнали процесора читання/запис, а коли треба, то надає процесору швидкі копії інформаційних кодів, які тимчасово зберігає у власній робочій пам'яті. Якщо кеш спроможний підмінити собою пам'ять (у понад 96-98 відсотків випадків), тоді він за рахунок власних ресурсів задовольняє запит процесора. Процесор не пригальмовується і залишається працювати на повній швидкості. Коли «підміна» пам'яті неможлива (менше від двох-чотирьох відсотків випадків), тоді кеш залучає до роботи пам'ять, обмін з якою суттєво пригальмовує процесор.

Усі завдання, пов'язані з перехопленням запитів від процесора на роботу із пам'яттю, вирішує частина апаратури кешу під назвою контролер кешу. Друга частина апаратури кешу містить невелику робочу пам'ять, де зберігають вміст копій комірок головної пам'яті, що брали участь в обслуговуванні останніх, тобто «найсвіжіших» запитів процесора. Важливо, що вміст комірок головної пам'яті копіюється до пам'яті кешу разом зі своїми адресами. Саме ці копійовані адреси і дозволяють контролеру кешу приймати рішення про спроможність буферної пам'яті задовольнити конкретний процесорний запит без залучення до обміну повільної головної пам'яті.



Рівні кеша

1. Кеш першого рівня L1(від 8 до 128 Кб) - найшвидший, але маленький за об'ємом. З L1 працює безпосередньо ядро процесора. У нього копіюються дані, витягнуті з оперативної пам'яті. Збереження основних команд дозволяє підвищити продуктивність процесора за рахунок більш високої швидкості обробки даних (обробка з кешу швидше, ніж з оперативної пам'яті).


2. Кеш другого рівня L2 (від 128 до 16384 Кб)- дещо більше першого за об'ємом, але повільніше за швидкістю передачі даних.Якщо ви обираєте процесор для 'ресурсоємних' завдань, то модель з великим об'ємом кешу L2 буде переважною. Для багатоядерних процесорів вказується сумарний об'єм кеш-пам'яті другого рівня.

3. Кеш третього рівня L3(від 0 до 30720 Кб). Цей кеш ще більше за розміром, хоча і трохи повільніше, ніж L2. Інтегрована кеш-пам'ять L3 в поєднанні з швидкою системною шиною формує високошвидкісний канал обміну даними з системною пам'яттю. Як правило, кеш-пам'ять третього рівня комплектуються тільки топові процесори і серверні рішення. Кеш-пам'яттю третього рівня мають, наприклад, такі лінійки процесорів, як AMD Opteron, AMD Phenom, AMD Phenom II, Intel Core i3, Intel Core i5, Intel Core i7, Intel Xeon.

Об'єми кешів L2 і L3 - дуже важливі характеристики. Чим вони більші, тим вище продуктивність процесора.


У багатоядерних процесорах об'єми 1 і 2 рівнів кеша діляться на кількість ядер. Тобто якщо в описі, наприклад, до четирех'ядерному процесора об'єм кеша другого рівня вказаний як «1 Мб», під цим мається на увазі 256 х 4 Кб. Справедливо і зворотна вказівка.Кеш L3 є загальним для всіх ядер.

Ядро - це головна частина центрального процесора (CPU). Воно визначає більшість параметрів процесора, насамперед - тип сокета (гнізда, в яке вставляється процесор), діапазон робочих частот і частоту роботи внутрішньої шини передачі даних (FSB). Ядро процесора характеризується наступними параметрами: технологічний процес , обсяг внутрішнього кеша першого і другого рівня , напруга і тепловіддача (наскільки сильно буде нагріватися процесор). Перш ніж купувати процесор з тим чи іншим ядром, необхідно впевнитися, що ваша материнська плата зможе працювати з таким процесором. У рамках однієї лінійки можуть існувати процесори з різними ядрами. Наприклад, в лінійці Intel Core i5 присутні процесори з ядрами Lynnfield, Clarkdale, Arrandale і Sandy Bridge.