В космической отрасли очень высокий уровень надежности – он составляет 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.