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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Завдяки поєднанню спекулятивного виконання і великих кешів Pentium II 166 рішуче перевершує Pentium 250 MMX, незважаючи на те, що останній має переваги тактової частоти 1.51x у порівнянні з попередніми.

Зрештою, саме Pentium II надав переваги позапланового виконання більшості споживачів. Pentium II був швидким мікропроцесором по відношенню до систем Pentium, які були короткочасними раніше. Компанія AMD була цілком здатною до другого рівня, але до виходу оригінального Athlon, Intel мала блокування абсолютної продуктивності.

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

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

Чому таємна проблема для Intel?

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

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

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

Вплив на ефективність деяких стратегій зменшення впливу

Однією з стратегій пом'якшення, яку ми бачили, зокрема, нещодавно, є вимкнення Hyper-Threading. Apple опублікувала оновлення, пов'язане з MDS, повідомляючи користувачів про те, що вони можуть відключити HT, якщо вони хочуть обмежити можливість витоку даних між кількома потоками в межах одного ядра процесора. Вони також заявили, що це може досягти ефективності до 40 відсотків. Це крайній випадок, тому що HT не має загальної «вартості» такої продуктивності для процесора Intel - ми очікуємо, що типовий вплив буде в діапазоні 20-30 відсотків - але це все ще є значним ударом і значно більшою продуктивністю, ніж ми зазвичай видно з нової версії процесора.

Існує справжня розбіжність експертів щодо того, якою мірою люди повинні робити це, щоб захистити себе. Деякі, як Theo de Raadt, який запускає проект FreeBSD, за замовчуванням вимкнули HT. Інші ОС ще не зробили цього кроку. Такі компанії, як Apple, відмовилися від того, щоб повідомляти клієнтам про це також, пишучи: "Хоча на момент написання цієї статті не знайдено жодних експлуататів, які б впливали на клієнтів, клієнти, які вважають, що їхні комп'ютери піддаються підвищеному ризику атаки". пов'язані з фіксацією Spectre і Meltdown також мали вплив на продуктивність, хоча деякі з цих наслідків були потім зменшені подальшими виправленнями, а ступінь уповільнення - робоче навантаження і, певною мірою, залежність процесорної архітектури.

У довгостроковій перспективі ми сподіваємося, що AMD, Intel та інші постачальники продовжуватимуть виправлення цих проблем, коли вони виникатимуть, із поєднанням апаратних засобів, програмного забезпечення та оновлення програмного забезпечення. Концептуально, атаки побічних каналів, як вони, надзвичайно важко, якщо не неможливо, запобігти. Конкретні питання можуть бути пом'якшені або оброблені, але характер спекулятивного виконання означає, що певна кількість даних буде протікати за певних обставин. Можливо, це неможливо запобігти, не відмовляючись від набагато більшої продуктивності, ніж більшість користувачів, які захочуть прийняти.

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

Читати далі

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

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

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

Спекулятивне виконання було в новинах пізнього, як правило, при обговоренні помилок Meltdown і Spectre. Ми пояснюємо цю тему.

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

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