У космічній галузі дуже високий рівень надійності – він становить 99,99% і ледь-ледь не дотягує до 100%. Але якби процесори будували з такою ж безвідмовністю, як і космічну техніку, ви б не встигли навіть увімкнути комп’ютер, а він вже почав збоїти. Але щодня ми вмикаємо свій комп’ютер, дивимося на ньому фільми, працюємо, граємо в ігри, слухаємо музику та виконуємо безліч справ. І навряд чи хто задумується, чого коштує розробникам створити процесор, який просто працює.
Навіть глюк, шанс якого один на мільярд, у сучасному процесорі буде проявляти себе кожні 2-3 секунди. Візьміть, наприклад, чіп, що працює на частоті 2 ГГц. Це звична частота навіть для повільних процесорів на смартфонах. Але дуже рідкісний глюк з шансом один на мільярд стане звичною справою в такому чіпі, який щосекунди виконує 2 мільярди операцій.
Складнощі апаратури
Розробка нового процесора вимагає близько п’яти років напруженої роботи кількох сотень людей.
Виробництво процесора також є дуже дорогим, адже в ньому використовується набір масок для літографії, які можуть коштувати до трьох мільйонів доларів. Саме виробництво окремого чіпа триває від двох до трьох місяців.
Додатково необхідно оплатити створення спеціального тестового обладнання та аксесуарів для нього.
Також сучасний процесор x86 дуже складний – якщо перевести його на мову програмування апаратної частини Verilog, тоді його код може сягнути мільйона рядків.
Тож баги у процесорах трапляються. Найвідоміші з них – це баг ділення у Pentium 1994 року, через який чіп іноді неправильно ділив числа. У 2007 році стало відомо про баг TLB у процесорах AMD, через який при високому навантаженні процесори збоїли. Днями викрили баг технології віртуальних ядер Hyper-threading у чіпах Intel, через яку чіпи також збоять.
Перевірка чіпа до виробництва
Оскільки процесори роблять навіть дуже рідкісний баг регулярним збоєм, виробники ретельно підходять до тестування майбутньої продукції. З п’яти років створення нового мікропроцесора близько року може піти на його перевірку.
Перший етап ще до отримання тестового зразка з фабрики – його верифікація. На цій стадії розробники ретельно вивчають, наскільки збігається реальна схема з бажаними специфікаціями. До того ж мова йде не лише про електричну частину, а й про продуктивність, енергоспоживання, тепловиділення тощо. Адже якщо новий процесор буде повільніше за старий, він буде таким самим сміттям, як і переповнений багами чіп.
Один із способів перевірки характеристик майбутнього процесора – його симуляція. Адже «залізо» можна представити на мові програмування, наприклад, Verilog, та запустити на наявному комп’ютері.
Однак симуляція всього процесора вимагає дуже багато часу. Її можна виконувати зі швидкістю один герц. Тобто за секунду симуляція обробляє один цикл, тоді як реальний процесор за секунду робить 2-3 мільярди циклів.
Трохи пришвидшити процес вдається, якщо розділити симульований процесор на блоки та тестувати їх окремо. Наприклад, у чотирьохядерному процесорі можна тестувати кожне ядро окремо. Це вже чотири герци.
Якщо розділити ядра на менші блоки, їх також можна тестувати окремо. Але в найкращому випадку це все одно лише 100-200 герц. Щоб симулювати одну секунду роботи реального процесора, знадобиться близько десяти років.
Емуляція, щоб було швидше
Для швидшої симуляції майбутнього процесора окремі його блоки можна виконати в апаратному вигляді. Подібні системи виготовляють кілька компаній. Такі рішення виглядають як дуже великі комп’ютери і коштують близько мільйона доларів.
Емуляція значно швидша за симуляцію – вона забезпечує до 500 000 герц. Однак це все ще в кілька тисяч раз повільніше за середній сьогоднішній процесор.
Баги після втілення в кремнію
Вироблений тестовий зразок процесора навряд чи з першого разу запрацює як потрібно. Необхідно дізнатися, що не так. У таких випадках програмісти запускають спеціальні програми, які відстежують роботу їхнього додатка. Але всі ці засоби для своєї роботи використовують працездатний процесор.
Розробники апаратної частини не можуть просто запустити інший процесор поряд. Тому для відстеження помилок вони вбудовують у чіпи інтерфейс JTAG. Це стандарт, який дозволяє при збої отримати принаймні певні дані про спеціалізовані контакти на самому процесорі, коли решта чіпа відмовила. Набір даних, які можна отримати таким чином, дуже обмежений. Наприклад, не можна дізнатися, що було в якихось проміжних блоках процесора, а можна лише отримати результат їхньої роботи.
Але в разі збої процесора навіть цих крихт інформації може не виявитися. Через високу швидкість роботи, якщо чіп не завис тієї ж миті, що стався збій, він перезапише зміст своєї вбудованої пам’яті. У такому випадку розробникам доводиться сподіватися на вдачу, повторюючи баг знову і знову.
Як полагодити баги
Припустимо, що причина збоїв стала відома і необхідно виправити дефектне місце в процесорі. Для цього можна внести у код Verilog та повторно випустити зразок процесора. Це близько двох місяців та три мільйони доларів на виробництво нових масок.
Трохи здешевити виправлення помилок дозволяє сама технологія виробництва чіпів. Вони виготовляються шарами. Основний базовий шар містить усі транзистори. На ньому знаходяться шари металізації, яких може бути до дев’яти. У металізації знаходяться провідники, які з’єднують транзистори один з одним. У деяких випадках можна змінити схему з’єднання, не чіпаючи базовий шар з транзисторами.
Додатково у вільних місцях процесора розробники створюють блоки запасних транзисторів. Тоді також не доведеться переробляти базовий шар, якщо виявиться, що початкового числа транзисторів не вистачає. Можна змінити шар металізації та залучити в роботу запасні транзистори.
До речі, схему з’єднання можна тимчасово змінити у вже готовому процесорі за допомогою іонної пушки. Недолік у тому, що після такої обробки чіпи «живуть» кілька тижнів. Це підходить для лабораторних дослідів, де за кілька годин можна поправити баг, але не годиться для масового виробництва.
Останній запобіжник перед багами
Попри всі зусилля розробників, навіть фінальні чіпи матимуть баги. Тому вони вбудовують в процесори так звані «курчачі біти». Це запобіжники, які дозволяють повністю відключити від процесора той чи інший блок.
Загальний приріст потужності нового процесора у десятки відсотків складається із суми невеликих удосконалень: 0,5% в одному блоці, 0,2% в іншому і так далі. Тому якщо вимкнути погану частину взагалі, чіп стане повільнішим, але на непомітну величину.
Патч мікрокоду
Сучасні процесори також мають у собі невеликий обсяг пам’яті з мікрокодом. У ньому зберігаються дуже складні та великі інструкції. Збої у цій частині коду легко виправити патчем. Для цього в процесорі виділяють блок доступної для запису пам’яті. При виявленні проблеми виробник випускає патч, і його треба «залити» в чіп. Саме так виправляють, наприклад, помилку Hyper-threading в останніх процесорах Intel.