Що таке спекулятивне виконання?

Що таке спекулятивне виконання?

Оскільки обговорення проблем Spectre і Meltdown переважає в технологічному циклі новин, повторюється посилання на специфіку високопродуктивних процесорів: спекулятивне виконання. Це ключова можливість високопродуктивних продуктів ARM, корпоративних ядер Apple, сімейства POWER від IBM та переважної більшості процесорів x86 від Intel та AMD. Ось що таке спекулятивне виконання і як воно стосується інших ключових можливостей сучасних мікропроцесорів, і як останнім часом виникає помилка ощадливості для процесорів Intel, зокрема.

Що таке спекулятивне виконання?

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

Ось як це працює. Сучасні ЦП використовуються для конвеєра, що означає, що вони здатні паралельно виконувати кілька інструкцій, як показано на діаграмі нижче.

Зображення Вікіпедії. Це загальна схема конвеєрного ЦП, показуючи, як інструкції проходять через процесор від тактового циклу до циклу годин.
Зображення Вікіпедії. Це загальна схема конвеєрного ЦП, показуючи, як інструкції проходять через процесор від тактового циклу до циклу годин.

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

Без прогнозу гілки та спекулятивного виконання, процесор не знає, яка гілка вона займе, поки перша інструкція в конвеєрі (зелена коробка) закінчиться виконанням і переходить до етапу 4. Замість того, щоб рухатися прямо з одного набору інструкцій на Далі процесор повинен чекати отримання відповідних інструкцій. Це завдає шкоди продуктивності системи, оскільки саме час процесор може виконувати корисну роботу.

Причиною того, що "спекулятивне" виконання, звичайно, полягає в тому, що процесор може бути неправильним. Якщо це так, система завантажує відповідні дані та виконує ці інструкції. Проте гігантські предиктори часто помиляються; показники точності, як правило, вище 95 відсотків.

Навіщо використовувати спекулятивне виконання?

Десятиліття тому, до того, як було витворено замовлення на випадок несанкціонованого виконання, центральними процесорами були те, що ми сьогодні називаємо "на замовлення". Інструкції виконувалися в тому порядку, в якому вони були отримані, без спроби перевпорядкувати їх або виконувати їх більш ефективно. Одна з основних проблем з виконанням замовлення полягає в тому, що трубопровід припиняє роботу всього процесора, доки проблема не буде вирішена.

Іншою проблемою, яка зумовила розвиток спекулятивного виконання, була розрив між процесором та основною швидкістю пам'яті. Наведений нижче графік показує розрив між процесором та часом роботи пам'яті. Зростаючи розрив, зростає і час, протягом якого процесор витратив очікування на основну пам'ять для передачі інформації. Такі функції, як кеш-пам'ять L1, L2 і L3, і спекулятивне виконання, були розроблені таким чином, щоб CPU був зайнятий і мінімізував час, який він витратив на холостий хід.

Якщо пам'ять могла б відповідати продуктивності ЦП, то не було б потреби в кешах.
Якщо пам'ять могла б відповідати продуктивності ЦП, то не було б потреби в кешах.

Це спрацювало. Поєднання великих кеш-пам'яті та виконання нестандартного режиму дало змогу Intel Pentium Pro та Pentium II розширити свої ноги таким чином, щоб попередні чіпи не могли зрівнятися. Цей графік з статті Anandtech чітко показує перевагу.

Що таке спекулятивне виконання?

У кінцевому рахунку, саме Pentium II забезпечив більшість споживачів переваги нестандартного виконання. Pentium II був швидким мікропроцесором по відношенню до систем Pentium, які були лише найближчим часом раніше. AMD був абсолютно потужним дворівневим варіантом - моїм основним комп'ютером в коледжі був AMD K6-233, який став K6-2 400, який отримав нову материнську плату з підтримкою K6-2 + і став розігнаним K6- 2 + 550. Але до появи оригінального Athlon Intel міг зробити дуже чесну претензію на загальну корону продуктивності.

Pentium Pro та пізніший Pentium II були набагато швидшими, ніж попередні архітектури Intel. Це не було гарантовано. Коли Intel розробив Pentium Pro (перший ЦП, який використовує спекулятивне виконання), він витратив значну частину свого бюджету та потужності, щоб вивести на ринок чіп. Але ставка окупилася, великий час.

Існують відмінності між тим, як Intel, AMD та ARM впроваджують спекулятивне виконання, і ці відмінності є частиною того, чому Intel розкривається в Meltdown таким чином, що інші постачальники не мають. Але спекулятивне виконання, як техніка, просто надто цінне, щоб не використовувати. Кожна високопродуктивна архітектура процесора сьогодні - AMD, ARM, IBM, Intel, SPARC - використовує нестандартне виконання. І спекулятивне виконання, при реалізації по-різному, від компанії до компанії, використовується кожним з них.

Чому Meltdown така проблема для Intel?

Причина, чому Meltdown викликає такі унікальні головні болі для Intel, - це те, що Intel дозволяє спекулятивне виконання для доступу до привілейованої пам'яті, і ніколи не буде дозволено торкатися додатка користувача. Ось як описує проблему MarkCC Goodmath.org:

Код, який працює під спекулятивним виконанням, не робить перевірки доступу пам'яті з кеша до доступу до привілейованої пам'яті. Він починає виконувати інструкції без перевірки привілеїв, і коли прийшов час визначити, чи слід продовжувати спекулятивне виконання, перевірка відбудеться. Але в цьому вікні ви маєте можливість запустити пакет інструкцій щодо кешу без перевірок привілеїв. Таким чином, ви можете написати код з правильною послідовністю вказівок галузі, щоб отримати передбачення галузі для роботи так, як вам це потрібно; і тоді ви можете використовувати його для читання пам'яті, яку ви не зможете прочитати.

Реакції спекулятивного прогнозування інших постачальників процесорів не дозволяють додаткам користувачам пробувати вміст пам'яті простору ядра у будь-якій точці. Єдиний спосіб пом'якшення Meltdown в програмному забезпеченні - змусити систему виконувати повний контекстний перемикач щоразу, коли він переключається між ядром і простором користувача. Причиною того, що продуктивність від Meltdown настільки різноманітна, пов'язана з тим, наскільки це патч завдає біль, залежить від частоти застосування програми до перемикача контексту.

Вирішення цих проблем - це надути деяких народів

Ми орієнтувалися на Meltdown тут, тому що це дефект, загорнутий навколо спекулятивного виконання, але існують патчі для Windows для варіантів Spectre і Meltdown - і враження від продуктивності, пов'язане з пом'якшенням Spectre, виглядає так, що він сильно вразить деякі системи.

Згідно з публікацією блогу Microsoft, користувачі Windows 10 з Skylake, Kaby Lake або Coffee Lake повинні побачити зниження продуктивності в одиничних цифрах. Користувачам з Haswell або попередніми процесорами, що використовують Windows 10, не так-то пощастило. MS повідомляє, що "деякі еталонні показники демонструють більш значні уповільнення, і ми очікуємо, що деякі користувачі помітять зниження продуктивності системи".

Якщо ви використовуєте Windows 7 або Windows 8, ви намагаєтесь потрапити важче. Microsoft пише, що очікує, що більшість користувачів зазнають зниження продуктивності. Ще незрозуміло, чи зможуть Intel та AMD відрізнити інший потік продуктивності для пом'якшення продуктивності Specter (AMD все ще не використовується Meltdown). І ми знаємо, що Meltdown не має незначного впливу на використання серверів та деяких орієнтирів в Linux.

Ця ситуація все ще розвивається, але ми сподіваємося, що ми розібрали принаймні одну частину проблеми. Якщо ви використовуєте Haswell або попередню систему і задаєтесь питанням, яку продуктивність вам буде запропоновано відмовитися, то, що це коштує, я поруч із вами. Раптом мій процесор Ivy Bridge виглядає, що може знадобитися заміна, якщо деградація продуктивності є досить поганою.

Ознайомтеся з нашою серією wfoojjaec Explains для більш поглибленого висвітлення сьогоднішніх найгарячих технологічних тем.

Читати далі

Нова спекулятивна критична помилка при виконанні програмного забезпечення гвардії Intel

Новий вектор атаки проти процесорів Intel був виявлений - знову заснований на спекулятивному виконанні.

Нова патча Google знижує ефективність виконання Spectre для "шуму"

Коли Spark Variant 2 виправлено в цьому році, деякі сервери, особливо ті, що мають старші процесори Intel, побачили зниження продуктивності. Google працює з MS, щоб переконатись, що ми повернемо цю продуктивність.