Відображення секторів ВП в кеш-пам'яті.
Даний тип відображення застосовується у всіх сучасних ЕОМ і полягає в тому, що вся ОП розбивається на сектори, що складаються з фіксованого числа послідовних блоків. Кеш-пам'ять також розбивається на сектори, що містять таку ж кількість рядків. Розташування блоків в секторі ОП та секторі кешу повністю збігається. Відображення сектора на кеш-пам'ять здійснюється асоціативно, ті будь-який сектор з ОП може бути поміщений в будь-який сектор кеша. Таким чином, в процесі роботи АЛУ звертається в пошуках чергової команди до ОП, в результаті чого, в кеш завантажується (в разі відсутності там блоку, що містить цю команду), цілий сектор інформації з ОП, причому за принципом локальності, за рахунок цього досягається значна збільшення швидкодії системи.
Ієрархічна модель кеш-пам'яті
Як правило, кеш-пам'ять має багаторівневу архітектуру. Наприклад, в комп'ютері з 32 Кбайт внутрішньої (в ядрі ЦП) і 1 Мбайт зовнішньої (в корпусі ЦП або на системній платі) кеш-пам'яті перша буде вважатися кеш-пам'яттю 1-го рівня (L1), а друга - кеш-пам'яттю 2 -го рівня (L2). У сучасних серверних системах кількість рівнів кеш-пам'яті може доходити до чотирьох, хоча найбільш часто використовується двох або трирівнева схема.
У деяких процесорних архітектур кеш-пам'ять 1-го рівня розділена на кеш команд (Instruction Cache, I-cache) і кеш даних (Data Cache, D-cache), причому необов'язково однакових розмірів. З точки зору схемотехніки простіше і дешевше проектувати роздільні I-cache і D-cache: вибірку команд проводить I-box, а вибірку даних - Е-box і F-box, хоча в обох випадках задіюються А-box і С-box. Всі ці блоки великі, і забезпечити їм одночасний і швидкий доступ до одного кешу проблематично. Крім того, це неминуче вимагало б збільшення кількості портів доступу, що також ускладнює завдання проектування.
Так як I-cache і D-cache повинні забезпечувати дуже низькі затримки при доступі (це справедливо для будь-якого кеша L1), доводиться жертвувати їх обсягом - зазвичай він становить від 16 до 32 Кбайт. Адже чим менше розмір кеша, тим легше добитися низьких затримок при доступі.
Кеш-пам'ять 2-го рівня, як правило, уніфікована, т. Е. Може містити як команди, так і дані. Якщо вона вбудована в ядро ЦП, то говорять про S-cache (Secondary Cache, вторинний кеш), в іншому випадку - про B-cache (Backup Cache, резервний кеш). У сучасних серверних ЦП обсяг S-cache становить від одного до декількох мегабайт, a B-cache - до 64 Мбайт. Якщо дизайн ЦП передбачає наявність вбудованої кеш-пам'яті 3-го рівня, то її називають T-cache (Ternary Cache, третинний кеш). Як правило, кожен наступний рівень кеш-пам'яті повільніше, але більше попереднього за обсягом. Якщо в системі присутній B-cache (як останній рівень моделі кеш-пам'яті), то він може контролюватися як ЦП, так і набором системної логіки.
Якщо в момент виконання деякої команди в регістрах не опиниться даних для неї, то вони будуть затребувані з найближчого рівня кеш-пам'яті, т. Е. З D-cache. У разі їх відсутності в D-Cache запит направляється в S-cache і т. Д. У гіршому випадку дані будуть доставлені безпосередньо з пам'яті. Втім, можливий і ще більш сумний варіант, коли підсистема управління віртуальною пам'яттю операційної системи (ОС) встигає витіснити їх в файл підкачки на жорсткий диск. У разі доставки з оперативної пам'яті втрати часу на отримання потрібних даних можуть складати від десятків до сотень тактів ЦП, а в разі знаходження даних на жорсткому диску мова вже може йти про мільйони тактів.
Розмір рядка і тега кеш-пам'яті
Розмір тега кеш-пам'яті залежить від трьох основних чинників: обсягу кеш-пам'яті, максимального кешувального обсягу оперативної пам'яті, а також асоціативності кеш-пам'яті. Математично цей розмір розраховується за формулою:
де Stag - розмір одного тега кеш-пам'яті, в бітах; Smem - максимальний Кешована обсяг оперативної пам'яті, в байтах; Scache - об'єм кеш-пам'яті, в байтах; А - асоціативність кеш-пам'яті, в каналах.
Звідси випливає, що для системи з 1-Гбайт оперативної пам'яттю і 1-Мбайт кеш-пам'яттю з двоканальної асоціативністю буде потрібно 11 біт для кожного тега. Примітно, що власне розмір рядка кеш-пам'яті ніяк не впливає на розмір тега, але обернено пропорційно впливає на кількість тегів. Слід розуміти, що розмір рядка кеш-пам'яті не має сенсу робити менше розрядності системної шини даних, але багаторазове збільшення розміру призведе до надмірного засмічення кеш-пам'яті непотрібною інформацією і зайвого навантаження на системну шину і шину пам'яті. Крім того, максимально Кешована об'єм кеш-пам'яті не зобов'язаний відповідати максимально можливому встановлюється обсягом оперативної пам'яті в системі. Якщо виникне ситуація, коли оперативної пам'яті виявиться більше, ніж може бути кешуватися, то в кеш-пам'яті буде присутній інформація тільки з нижнього сегмента оперативної пам'яті. Саме такою була ситуація з платформою Socket7 / Super7. Набори мікросхем для цієї платформи дозволяли використовувати великі обсяги оперативної пам'яті (від 256 Мбайт до 1 Гбайт), в той час як Кешована обсяг часто був обмежений першими 64 Мбайт (мова йде про B-cache, що знаходиться на системній платі) через використання дешевих 8 -біт мікросхем тегів SRAM (2 біта з яких резервувалося під покажчики дійсності і измененности рядки). Це призводило до відчутного падіння продуктивності.
Розглянемо механізм роботи кеш-пам'яті різних видів асоціативності. Припустимо, є абстрактна модель з вісьмома рядками кеш-пам'яті і 64 еквівалентними рядками оперативної пам'яті. Потрібно помістити в кеш рядок 9 оперативної пам'яті (зауважимо, що всі рядки нумеруються від нуля і по зростаючій). У моделі з прямим відображенням цей рядок може зайняти лише одне місце: 9 mod 8 = 1 (обчислення залишку від ділення без остачі), т. Е. Місце рядка 1. Якщо взяти модель з двоканальної асоціативністю, то цей рядок може зайняти одне з двох місць : 9 mod 4 = 1, т. е. рядок 1 будь-якого каналу (сегмента). Полноассоціатівная модель надає свободу для розміщення, і даний рядок може зайняти місце будь-який з восьми наявних. Іншими словами, фактично є 8 каналів, кожен з яких складається з 1 рядка.
Жодна з вищезгаданих моделей не дозволить, зрозуміло, помістити в кеш більше рядків, ніж він фізично в змозі розмістити, вони лише пропонують різні варіанти, що розрізняються балансом ефективності використання кешу і швидкості доступу до нього.
Типи підключення кеш-пам'яті
Кількість портів читання-запису кеш-пам'яті - показник того, скільки одночасних операцій читання-запису може бути оброблено. Хоча жорстких вимог і немає, певну відповідність набору функціональних пристроїв ЦП повинно простежуватися, так як відсутність вільного порту під час виконання команди призведе до вимушеного простою.
Існує два основних способи підключення кеш-пам'яті до ЦП для читання: наскрізний і побічний (Look-Through і Look-Aside). Суть першого в тому, що при необхідності дані спочатку запитуються у контролерів кеш-пам'яті найвищого рівня, який перевіряє стан підключених тегів і повертає або потрібну інформацію, або негативну відповідь, і в цьому випадку запит перенаправляється в більш низький рівень ієрархії кеш-пам'яті або в оперативну пам'ять. При реалізації другого способу читання запит одночасно надсилається як кеш-контролера самого високого рівня, так і іншим кеш-контролерів і контролера оперативної пам'яті. Недолік першого способу очевидна: при відсутності інформації в кеші високого рівня доводиться повторювати запит, і час простою ЦП збільшується. Недолік другого підходу - висока надмірність операцій і, як наслідок, "засмічення" внутрішніх шин ЦП і системної шини непотрібною інформацією. Логічно припустити, що якщо для кешей L1 оптимальна наскрізна схема, то для T-cache або B-cache побічна схема може виявитися більш вигідною. Для S-cache вибір неоднозначний.
Розрізняють також локальний і віддалений кеш. Локальним називають кеш, що знаходиться або в ядрі ЦП, або на тій же кремнієвій підкладці або в корпусі ЦП, віддаленим - розміщений на системній платі. Відповідно локальним кешем управляє контролер в ядрі ЦП, а віддаленим - НМС системної плати. Локальний кеш з точки зору швидкодії краще, так як інтерфейс до віддаленого кешу зазвичай мультиплексуюча з системною шиною. З одного боку, коли інший ЦП захоплює загальну системну шину або який-небудь периферійний контролер звертається до пам'яті безпосередньо, віддалений кеш може виявитися тимчасово недоступним. З іншого - такий кеш легше використовувати в багатопроцесорних системах.
Існують два найпоширеніші способи запису в кеш: наскрізний (Write-Through) і зворотного (Write-Back) запису. У першому випадку інформація одночасно зберігається як у поточний, так і в більш низький рівень ієрархії кеш-пам'яті (або прямо в оперативну пам'ять при відсутності такого). У другому - дані зберігаються тільки в поточному рівні кеш-пам'яті, при цьому виникає ситуація, коли інформація в кеші і оперативної пам'яті розрізняється, причому остання стає застарілою. Для того щоб при скиданні кеша інформація не була необоротно втрачена, до кожного рядка кеша додається "брудний" біт (dirty bit, інакше відомий як modified). Він потрібен для позначення того, чи відповідає інформація в кеші інформації в оперативній пам'яті, і чи слід її записати в пам'ять при скиданні кеша.
Також слід згадати спосіб резервування запису (write allocation). При запису даних в оперативну пам'ять часто виникає ситуація, коли записуються дані можуть скоро знадобитися, і тоді їх доведеться досить довго довантажувати. Резервування запису дозволяє частково вирішити цю проблему: дані записуються не в оперативну пам'ять, а в кеш. Рядок кеша, замість якої записуються дані, повністю вивантажується в оперативну пам'ять. Так як знову записаних даних зазвичай недостатньо для формування повної рядка кеша, з оперативної пам'яті запитується відсутня інформація. Коли вона отримана, новий рядок записується, і тег оновлюється. Певних переваг чи недоліків такий підхід не має - іноді це може дати незначний приріст продуктивності, але також і привести до засмічення кешу непотрібною інформацією.
Збільшення кешу і тестірованіеINELAMD
Первинна причина збільшення обсягу вбудованого кеша може полягати в тому, що кеш-пам'ять в сучасних процесорах працює на тій же швидкості, що і сам процесор. Частота процесора в цьому випадку ніяк не менше 3200 MГц. Більший обсяг кеша дозволяє процесору тримати великі частини коду готовими до виконання. Така архітектура процесорів сфокусована на зменшенні затримок, пов'язаних з простоєм процесора в очікуванні даних. Сучасні програми, в тому числі ігрові, використовують великі частини коду, який необхідно витягати з системної пам'яті на першу вимогу процесора. Зменшення проміжків часу, що йдуть на передачу даних від пам'яті до процесора, - це надійний метод збільшення продуктивності додатків, що вимагають інтенсивної взаємодії з пам'яттю. Кеш L3 має трохи вищу час очікування, ніж L 1 і 2, це цілком природно. Хоч він і повільніше, але все-таки він значно швидший, ніж звичайна пам'ять. Не всі програми виграють від збільшення обсягу або швидкості кеш-пам'яті. Це сильно залежить від природи додатки.
Якщо великий обсяг вбудованого кешу - це добре, тоді що ж утримувало Intel і AMD від цієї стратегії раніше? Простим відповіддю є висока собівартість такого рішення. Резервування простору для кеша дуже дорого. Стандартний 3.2GHz Northwood містить 55 мільйонів транзисторів. Додаючи 2048 КБ кеша L3, Intel йде на збільшення кількості транзисторів до 167 мільйонів. Простий математичний розрахунок покаже нам, що EE - один з найдорожчих процесорів.
Сайт AnandTech провів порівняльне тестування двох систем, кожна з яких містила два процесори - Intel Xeon 3,6 ГГц в одному випадку і AMD Opteron 250 (2,4 ГГц) - в іншому. Тестування проводилося для додатків ColdFusion MX 6.1, PHP 4.3.9, і Microsoft .NET 1.1. Конфігурації виглядали наступним чином:
- Dual Opteron 250;
- 2 ГБ DDR PC3200 (Kingston KRX3200AK2);
- системна плата Tyan K8W;
- 1 жорсткий IDE 40 ГБ 7200 rpm, кеш 8 МБ
- Dual Xeon 3.6 ГГц;
- материнська плата Intel SE7520AF2;
- 1 жорсткий IDE 40 ГБ 7200 rpm, кеш 8 МБ
На додатках ColdFusion і PHP, що не оптимізованих під ту чи іншу архітектуру, трохи швидше (2,5-3%) виявилися Opteron'и, зате тест з .NET продемонстрував послідовну прихильність Microsoft платформі Intel, що дозволило парі Xeon'ов вирватися вперед на 8%. Висновок цілком очевидний: використовуючи ПО Microsoft для веб-додатків, є сенс брати процесори Intel, в інших випадках кілька кращим вибором буде AMD.
Аналіз викладеного вище матеріалу дозволяє зробити висновок, що відповідно до канонічними теоріями, сучасні виробники широко використовують кеш-пам'ять при побудові новітніх процесорів. Багато в чому, їх чудові характеристики по швидкодії досягаються саме завдяки застосуванню кеш-пам'яті другого і навіть третього рівня. Цей факт підтверджує теоретичні викладки Гарвардського університету про те, що з огляду на дії принципу локальності інформації в сучасних комп'ютерах застосування кеш-пам'яті змішаного типу дозволяє досягти чудових результатів у продуктивності процесорів і знижує частоту необхідних звернень до основної пам'яті.
У наявності широкі перспективи подальшого застосування кеш-пам'яті в машинах нового покоління, однак існуюча проблематика неможливість нескінченного збільшення кешу, а також висока собівартість виготовлення кешу на одному кристалі з процесором, ставить перед конструкторами питання про якийсь якісному, а не кількісному видозміні або стрибок в принципах, або огранізації кеш-пам'яті в процесорах майбутнього.
До цієї роботи були використані матеріали:
---- 9. Лекція: Організація пам'яті обчислювальної системи