Cучасні процесори такі прогресивні, що їм вже не можна вірити і цьому є докази

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

Комп’ютерні процесори видавали надійні результати обчислень порівняно з людьми, але в абсолютному вимірі вони не були 100% надійними. Помилки в обрахунках зустрічалися постійно внаслідок інженерних недоліків архітектури, умов роботи, інших перешкод.

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

Проте ситуація почала змінюватися в гіршу сторону: два найбільших техногіганта – Google та Facebook – почали помічати, що процесори дедалі частіше видають неправильні результати. Збої стаються настільки часто, що вони звернулися до технологічних компаній з пропозицією разом дослідити проблему та зрозуміти, як виявити такі помилки і зменшити їх.

Пригоди Google

“Наші пригоди почалися, коли наші продакшн-команди почали дедалі більше скаржитися на спотворення даних, – каже інженер Google Петер Хохшильд. – Ці машини були достовірно звинувачені в руйнуванні різних добре налагоджених додатків великого масштабу. Кожну машину звинуватило кілька незалежних команд, але звичайні методи діагностики не знайшли проблем з ними”.

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

Аналізуючи ці тихі помилки спотвореного виконання (CEEs) фахівці Google дійшли висновку, що у всьому винні “ртутні” процесорні ядра. Вони випадковим чином в різних обставинах видавали помилку обрахунків таким чином, що її не вдавалося спрогнозувати.

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

Хохшильд з колегами опублікував статтю “Ядра, які не рахують” (Cores that don’t count), в якій висунув кілька ймовірних причин, чому ненадійність процесорних ядер почала привертати увагу лише зараз. Одна з них – поширення великих серверних ферм, які роблять рідкісні явища значно частішими. Також серед причин – підвищена увага до загальної надійності, поліпшення інструментів створення коду, які зменшують кількість програмних багів.

“Але ми віримо, що є більш фундаментальна причина: зменшення розмірів, яке наблизилося до лімітів масштабування технології CMOS у поєднанні зі складністю архітектурного дизайну”, – пишуть інженери у своїй статті. Вони відмічають, що існуючі методи верифікації надійності процесорів слабо придатні для виявлення багів, які виникають випадково або є наслідком зношення в процесі експлуатації.

Проблеми також у Facebook

Найбільша соцмережа планети Facebook, яка також володіє гігантськими дата-центрами, також помітила ненадійність роботи процесорів. У лютому компанія випустила статтю “Тихе спотворення даних у великому масштабі”, яка описує цю проблему.

“Тихе спотворення даних стає дедалі більш поширеним феноменом у дата-центрах, ніж це спостерігалося раніше”, – йдеться у статті. Її автори пропонують певні способи пом’якшення проблеми, але вони не торкаються причин її появи.

Ненадійні обчислення несуть важкі наслідки

Ризики ненадійної роботи процесорних ядер включають в себе не лише збої та “падіння” програм. Це також неправильні обрахунки та втрата даних, які можуть відбуватися непоміченими.

У великому масштабі вони несуть значні ризики. Наприклад, Хохшильд згадує, що один з таких випадків у Google вважали не апаратним збоєм, а атакою програм-вимагачів.

“Одне з наших “ртутних” ядер пошкодило шифрування, – пояснює Хохшильд. – Це сталося у такий спосіб, що лише воно могло розшифрувати зашифроване ним”.

У Google відмовляються називати рівень помилок процесорних ядер, посилаючись на бізнес-причини. Однак вони навели грубу оцінку – одне “ртутне ядро” на кілька тисяч машин. Схожу цифру повідомила і Facebook.”

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

“Наш досвід показує, що приблизно половина знайдених людьми “ртутних” ядер виявляється проблемно. Інша половина – це суміш фальшивих звинувачень та обмеженої відтворюваності помилок”, – кажуть дослідники Google.

За матеріалами: The Register