Якщо ви недавно придивлялися до покупки нового ноутбука, швидше за все, ви чули цей термін. Друг чи технічно підкований родич міг застерегти вас від використання більш дешевих процесорів Celeron, посилаючись на відсутність «кешу». Це здається дрібною деталлю у специфікаціях, але це не так.
Що таке “кеш”? Це шар високошвидкісного зберігання даних, розташований між процесором та основною пам’яттю. Без нього сучасні обчислення йшли б надто повільно.
Кеш використовується у комп’ютерах повсюдно. Усередині процесора знаходяться кеші L1, L2 та часто L3. Далі операційні системи використовують кеші пам’яті, сторінкові кеші та дискові кеші. Віртуальна пам’ять також діє як свого роду кеш. Це прискорює виконання завдань та знижує витрати на обладнання. Як це працює на практиці?
Аналогія з бібліотекарем: без кешу
Щоб зрозуміти логіку, відкинемо кремній і скористаємося способом бібліотекаря. Уявіть бібліотеку, де не можна самостійно чіпати книги. Ви просите бібліотекаря, який біжить у заднє сховище, щоб принести книгу.
Приходить перший клієнт. Йому потрібна книга “Мобі Дік”. Бібліотекар заходить у сховище, бере книгу та передає її клієнту. Клієнт пізніше повертає книгу. Бібліотекар відносить її назад у сховище. Він повертається за свій стіл і чекає.
Наступний клієнт знову хоче “Мобі Дік”. Бібліотекар знову має обійти все сховище. Навіть для популярних заголовків він щоразу виконує ту саму неефективну роботу.
Так працює комп’ютер без кешу. Для кожного запиту використовується основна пам’ять (сховище) незалежно від частоти звернень.
Аналогія з бібліотекарем: з використанням кешу
Тепер дайте тому ж бібліотекареві рюкзак. Він може мати до 10 книг. Цей рюкзак є кеш.
Почався новий день. Рюкзак порожній. Перший клієнт хотів «Мобі Дік». Бібліотекар зайшов у сховище, взяв книгу та передав її. Клієнт повертає книгу. Замість того, щоб відносити її назад у сховище, бібліотекар кладе її у свій рюкзак. Він залишається сидіти за своїм столом.
Приходить інший клієнт. Йому потрібна “Мобі Дік”. Бібліотекар спочатку дивиться на рюкзак. Книжка там. Він одразу ж передає її. Жодної поїздки до сховища. Клієнти отримують швидший сервіс.
Це називається попаданням в кеш (cache hit). Цей продукт було знайдено у швидкому сховищі.
Промахи в кеші та затримка
Що якщо клієнт запросить книгу, якої немає у рюкзаку? Бібліотекар спочатку має перевірити рюкзак. Тільки тоді він розуміє, що книжки там нема. Потім він біжить до складу.
Це називається промахом в кеші (cache miss).
Чи робить це бібліотекаря менш ефективним? Технічно так. Він витратив час на перевірку рюкзака. Однак у обчисленнях ця затримка дуже мала. Сучасне обладнання перевіряє наявність даних у кеші за наносекунди. У порівнянні з шляхом до “сховища” (основної пам’яті) він величезний. Штраф за промах невеликий порівняно зі штрафом через відсутність кешування.
Важливі правила кешування
З цієї простої моделі бачимо основні механізми.
- Швидкість та розмір: Кеші використовують швидшу, але меншу за обсягом пам’ять для прискорення повільнішої та більшої за обсягом пам’яті. Це працює з операційними системами, веб-серверами та апаратним забезпеченням.
- Попадання та промах: Спочатку перевіряється кеш. Знайшли? Попадання. Чи не знайшли? Промах. Потім система повинна отримати дані з більшого і повільнішого пулу.
- Обмеження розміру: Пам’ять кешу завжди менша, ніж основна пам’ять. Ви не можете помістити всю бібліотеку в рюкзак.
- Багатошаровість: Їх можна накладати один на одного. У нашого бібліотекаря могли бути полиці (більші кеші) та рюкзаки (дрібніші, швидші кеші) за стійкою. Він перевіряє рюкзак, потім полиці, потім сховище. Це багаторівневий кеш.
Ця ієрархія робить комп’ютери чуйними, навіть коли вони переміщують величезні обсяги даних. Дані, які ви використовуєте найчастіше, залишаються ближчими до процесора. Інші чекають у фоновому режимі.
Як кеші L1, L2 та L3 підвищують швидкість процесора
Час – ворог обчислень. Час процесора вимірюється у наносекундах. Коли мікропроцесор звертається до оперативної пам’яті (RAM), він чекає близько 60 наносекунд. Це здається дуже повільним. Для чіпа з коротким циклом 2 наносекунди 60 наносекунд – це ціла вічність.
Рішення полягає у ієрархії швидкостей. Інженери створили на материнській платі спеціальний банк пам’яті. Він невеликий. Він швидкий. Час доступу становить близько 30 наносекунд. Це вдвічі швидше, ніж основна пам’ять. Це кеш другого рівня, або L2.
Потім є кеш першого рівня, або L1. Цей невеликий високошвидкісний пам’ять помістили безпосередньо на мікропроцесор чіп. Дані тепер передаються зі швидкістю самого процесора, а чи не шини пам’яті. У процесорі Pentium 233 МГц кеш L1 в 3,5 рази швидше, ніж кеш L2, який, у свою чергу, вдвічі швидше, ніж RAM.
Деякі нові чіпи навіть більш просунуті. Вони вбудували два шари кешу безпосередньо в кремнієву підкладку. Коли це відбувається, кеш материнської плати відсувається на третій рівень, або L3. Створюються сходи швидкостей.
Найшвидше в комп’ютері це мікропроцесор. L1 кешує L2. L2 кешує основну пам’ять. Основна пам’ять потім кешує повільніші периферійні пристрої, такі як жорсткі диски та CD-ROM. Жорсткі диски можуть кешувати ваше інтернет-з’єднання.
Кеш браузера: чому веб-сторінки завантажуються швидше
Доступ до Інтернету став вузьким місцем. Це найповільніша ланка в ланцюзі. Веб-браузери, такі як Chrome та Safari, усвідомлюють цю проблему. Вони використовують ваш жорсткий диск як тимчасове сховище.
Коли ви вперше відкриваєте HTML-сторінку, ваш браузер завантажує сторінку та зберігає її копію у певній папці на диску. Малює сторінку. Ви її бачите.
Наступного разу, коли ви натиснете URL, ваш браузер перевірить тимчасову мітку. Він порівнює дату кешованого файлу на диску з датою файлу на веб-сервері. Якщо файл не оновився на сервері, браузер пропустить завантаження. Він надасть локальну копію.
Швидша система пам’яті – це жорсткий диск. Повільніша і більша система — це Інтернет.
Експерименти з кешем жорсткого диска та гнучкими дисками
Кеші знаходяться не лише у вашому процесорі чи браузері. Вони існують і на периферійних пристроях. Сучасні жорсткі диски мають швидку пам’ять. Зазвичай близько 512 КБ. Контролер жорсткого диска керує цією пам’яттю, а не комп’ютер безпосередньо.
Коли система запитує дані, драйвер спочатку перевіряє цей внутрішній кеш. Це відбувається перед тим, як переміститься механічна головка приводу. Механічне рух повільне. Доступ до пам’яті миттєвий. Якщо дані вже закешовані, контролер повертає їх негайно. Головка ніколи не рухається. Ви заощаджуєте час.
Ви можете самостійно перевірити роботу цього кешу. Спробуйте експеримент із гнучким диском (дискетою). Дискети дуже повільні.
Відкрийте великий файл, наприклад, текстовий файл розміром 300 КБ. Загориться лампочка дисководу. Зачекайте. Завантаження займає близько 20 секунд, поки привід фізично шукає дані.
Тепер закрийте редактор. Знову відкрийте той же файл негайно. Не чекайте 30 хвилин. Не заповнюйте пам’ять іншими завданнями. Лампочка дисководу не спалахне. Файл миттєво завантажиться.
Операційна система перевіряє кеш пам’яті на наявність даних із дискети. Вона знаходить їх.
Різниця очевидна. Одне звернення до дискети займає 120 мілісекунд. Звертання до основної пам’яті займає близько 60 наносекунд. Це величезна різниця у швидкості. Цей тест можна провести з жорстким диском, але результати менш помітні. Дискет робить затримку видимою.
Ієрархія кешів: швидкість і розмір
Щоб зрозуміти всю систему, подивіться цифри.
- Кеш L1 : Пам’ять кешу на повній швидкості мікропроцесора. Час доступу становить близько 10 наносекунд. Розмір варіюється від 4 КБ до 16 КБ.
- Кеш L2 : Доступ на основі SRAM. Займає 20-30 наносекунд. Розмір зазвичай становить від 128 до 512 КБ.
- Основна пам’ять : Звичайна оперативна пам’ять (RAM). Час доступу становить близько 60 наносекунд. Розмір варіюється від 32 МБ до 128 МБ.
- Жорсткий диск (HDD) : Механічний та повільний. Час доступу становить близько 12 мілісекунд. Розмір від 1 ГБ до 10 ГБ.
- Інтернет : Неймовірно повільний. Затримка варіюється від 1 секунд до днів. Розмір практично необмежений.
L1 кешує L2. L2 кешує основну пам’ять. Основна пам’ять кешує диск. Диск кешує мережу.
Це естафета, де кожен бігун швидше за попередній. Однак дані завжди передаються від повільнішої до швидкої. Якщо відбувається промах кешу (cache miss), ви чекаєте. Якщо влучення (cache hit), то ні. Загальна продуктивність машини визначається тим, як часто вона виявляється між швидкою, маленькою пам’яттю та повільним, великим сховищем.
Уявіть світ, де кожен байт оперативної пам’яті комп’ютера працював так само швидко, як кеш рівня L1 процесора. Це було б блискавично. Але такий підхід також спричинив би банкрутство.
Це фундаментальний компроміс у архітектурі комп’ютерів. Вам потрібна швидкість, але ви також повинні переконатися, що ваш банківський рахунок не зникне, коли ви купите новий комп’ютер. Кешування – це цей компроміс. Використання невеликих об’ємів дорогої та швидкої пам’яті для прискорення роботи великих об’ємів дешевої та повільної пам’яті.
Ось математика, що стоїть за цим безумством.
Сучасні процесори із частотою 500 МГц виконують 500 мільйонів циклів на секунду. Це один цикл кожні 2 наносекунди. Якщо ваш процесор повинен чекати від оперативної пам’яті, ви впертеся в стіну. Доступ до основної пам’яті займає близько 60 наносекунд. Це близько 30 витрачених даремно циклів. 30 циклів. Пропадають. Втрати виникають, коли процесор очікує надходження даних із повільного сховища.
Без кешів L1 і L2 ваш комп’ютер більшу частину часу простоював би, чекаючи, поки пам’ять наздожене його.
Магія невеликого кешу
Розглянемо кеш L2 об’ємом 256 КБ, керуючий 64 МБ оперативної пам’яті. Це приблизно відповідає співвідношенню 256 000 байт кешу до 64 000 000 байт пам’яті.
Як така маленька та швидка пам’ять може керувати великими обсягами даних? Вона працює з урахуванням принципу, званого локальністю посилань.
Хоча це звучить академічно, концепція інтуїтивно зрозуміла. У складних програмах ви не використовуєте весь код одночасно. Повторно використовується лише невелика частина. Навіть якщо розмір файлу становить 10 мегабайт, активними є лише кілька сотень байт на секунду. І ці конкретні байти з’являються знову і знову.
Процесору не потрібно щоразу отримувати код та дані з повільної основної пам’яті. Вони витягуються з кешу. Кеш потрапляє в ціль майже щоразу, тому що одні й ті самі біти постійно використовуються повторно.
Локальність посилань у дії
Погляньмо на просту логічну послідовність, щоб зрозуміти, чому це так. Уявіть програму, яка просить вас запровадити число від 1 до 100.
- Програма очікує на введення.
- Збережіть число в змінну X.
- Встановіть змінну Y, що дорівнює 100.
- Встановіть змінну Z, що дорівнює 1.
- Цикл: Розділіть Z на X.
- Якщо залишок дорівнює нулю, виведіть “Z кратно X”.
- Додайте 1 до Z.
- Повторіть крок 5, доки Z не досягне Y.
Рядки з 1 по 4 виконуються лише один раз. Цикл (рядки з 5 до 8) виконується 100 разів.
Процесор багато разів виконує інструкції циклу. Ці інструкції залишаються в кеші, тому виконуються на повній швидкості. Що щодо решти програми? Вона виконується один раз, а потім зникає.
Це локальність посилань простими словами. Приблизно 95% часу виконання програми витрачається виконання невеликого набору повторюваного коду. Текстові редактори роблять те саме. Вони проводять 95% часу, чекаючи, поки ви надрукуєте текст або оновите екран. Код, що обробляє взаємодію, знаходиться у кеші. Решта 5% виконують важку роботу: форматування, перевірку орфографії та збереження.
Тримаючи ці 5% у швидкій пам’яті, ваш процесор здаватиметься миттєво реагує. Користувачі вважають його чуйним. Виробники економлять гроші, не використовуючи SRAM (статична оперативна пам’ять) для створення модулів RAM об’ємом 64 МБ. Для масових обсягів використовується DRAM (динамічна пам’ять), а кешу — SRAM.
Це не ідеальний баланс. Іноді відбувається промах кешу, і процесору досі чекати. Але у 95% випадків це працює. Ось чому ми не витрачаємо час на створення комп’ютерів із швидкої пам’яті. Ми не можемо собі цього дозволити. Отримайте 95% ефективності за частку вартості.
Часті питання
Яке призначення кешу?
Кешування зберігає дані в швидкому місці, щоб їх можна було отримати швидше, ніж при доступі до основного сховища. Знижує затримки та покращує продуктивність системи.
Що таке кеш пам’яті?
Кешування в пам’яті зберігає дані, що часто використовуються, в зарезервованих місцях (кешах), до яких можна отримати доступ швидше, ніж до основної оперативної пам’яті або дискового сховища. Це дозволяє процесору витягувати дані без затримок основної пам’яті.
Що таке кешування і як воно працює?
Кешування – це техніка, що використовує принцип локальності посилань. Вона передбачає, які дані знадобляться процесору наступним, і зберігає в швидкій пам’яті. Коли процесор запитує цю інформацію, він відразу ж знаходить її в кеші, замість чекати її доставки з повільнішої основної пам’яті.




































