Продолжаем говорить о различных аппаратных и программных сбоях в процессорах, ведущих к ошибкам в расчетах или появлению уязвимостей. С первой частью материала можно ознакомиться тут.
Баг TLB в процессорах AMD
В 2007 году компания AMD выводит на рынок свои первые пользовательские 4-ядерные CPU на архитектуре K10, где все ядра были на одном кристалле. Еще одним значимым изменением стало наличие общего для всех ядер кэша L3. Эти процессоры стали неплохими конкурентами для Intel Core 2 Quad, но одна ошибка в кэше L3 первой вышедшей ревизии этих процессоров (B2) несколько омрачила радость фанатов AMD.
На программном уровне ошибку удалось закрыть обновлением BIOS, но при этом терялось до 10% производительности, что достаточно ощутимо. На аппаратном уровне баг исправили лишь спустя полгода, выпустив новую ревизию процессоров B3.
Медленно умирающие Intel Atom C2000
Пожалуй, ни для кого не новость, что кремниевые чипы со временем деградируют, и чем меньше техпроцесс и сильнее нагрев, тем быстрее. Но, в любом случае, если мы не говорим про экстремальный разгон с серьезным повышением напряжения, процессоры живут десятилетиями, и обычно устаревают куда быстрее, чем перестают работать деградации кристалла.
Но только не в случае с линейкой Atom C2000: эти процессоры, выпущенные в 2013 году, были предназначены для микросерверов, устройств коммутации и облачных хранилищ: в общем, там, где не требовалась серьезная производительностью и одновременно не хотелось бы иметь горячий процессор. С учетом невысокой цены, 8 ядер и теплопакета не больше 20 Вт эти процессоры стали достаточно популярными среди крупных серверных компаний, пока в 2017 году не вскрылась серьезная проблема — внутри этих процессоров в прямом смысле того слова тикала бомба.
А проблема была в синтезаторе частот шины LPC, по которой к процессору подключаются устройства, не требующие высокой пропускной способности. И как раз этот синтезатор через полтора года работы деградировал настолько, что синхросигналы могли начать пропадать, что приводило к полной неработоспособности устройства. Проблема усугублялась еще и тем, что этот синтезатор был интегрирован в процессор, который, в свою очередь, был припаян к плате, так что его замена была достаточно трудна.
Увы, но в данном случае, очевидно, программного решения проблемы не было, и Intel исправила ее только аппаратным обновлением процессоров с переходом на новый степпинг C0.
Разгон Skylake
После всего написанного выше складывается впечатление, что баги в процессорах только ухудшали жизнь пользователей. Однако на деле это не так — например, не стоит забывать разгон любых процессоров поколения Skylake по шине на платах с Z-чипсетом.
Обычно компания Intel разрешает разгонять лишь процессоры с индексом K на платах с Z-чипсетами, любые другие сочетания плат и процессоров увеличить частоту процессора не дадут. Но в данном случае Intel допустила ошибку в микрокоде процессоров, и даже обычные CPU без индекса K получили возможность разгона — правда, только на Z-чипсете и только по шине. Что же это значит?
Частота процессора складывается из двух параметров: это частота основной шины FSB и множителя. Шина в 99% случаев по умолчанию имеет фиксированную частоту в 100 МГц, а вот множитель может свободно меняться от единиц вплоть до нескольких десятков. И обычно разгоняют как раз увеличением множителя: к примеру, процессор Core i7-8700K имеет максимальный множитель при работе всех ядер 43, что дает частоту в 43 х 100 МГц = 4300 МГц. Увеличив множитель до, например, 50, мы получим 50 х 100 МГц = 5000 МГц.
Однако, очевидно, можно разгонять и увеличением частоты шины: установив ее на 120 МГц, мы при том же множителе в 43 получим частоту 43 х 120 МГц = 5160 МГц. И именно так из-за бага в микрокоде и стали разгонять официально не поддерживающие разгон процессоры поколения Skylake: например, тот же Core i5-6400, имеющий максимальную частоту в 31 х 100 МГц = 3100 МГц, после увеличения частоты шины на Z-чипсете мог заработать и на 31 х 130 МГц = 4030 МГц.
Конечно, Intel оперативно выложила обновление микрокода, и его быстро интегрировали в свои BIOS производители различных плат — однако, очевидно, далеко не все стали эти обновления ставить: шутка ли, мало кто согласится просто так лишиться прироста производительности зачастую в 30%.
Но, конечно, ложка дегтя все же была: при таком разгоне отключались векторные AVX-инструкции, так что в некоторых вычислительных задачах производительность таких CPU при разгоне могла оказаться даже ниже, чем без оного, но с AVX. Правда, в играх даже сейчас эти инструкции используются крайне редко, что позволяет некоторым пользователям до сих пор эксплуатировать данный баг без особых проблем.
Разблокировка дополнительных ядер в процессорах AMD
Лазейка, дающая возможность разогнать CPU — вещь, конечно, приятная. Но еще лет за 10 до этого компания AMD устроила другой аттракцион невиданной щедрости: как вам увеличение количества ядер вдвое изменением пары пунктов в BIOS?
А причина такой щедрости вполне банальна: очень часто более слабые процессоры получаются из более мощных банальным урезанием числа ядер, кэша и т.д. — зачем выкидывать кристалл, у которого не работает одно-два ядра, если их можно просто отключить и продать получившийся абсолютно рабочий CPU дешевле? Например, современный 8-ядерный Core i9-9900K работает на том же кристалле, что и 6-ядерный Core i5-9600K. И ровно также отключением 4 ядер и части кэша получается Ryzen 3 из Ryzen 7.
Но бывает и так, что выход годных кристаллов настолько высок, что приходится «пускать под нож» абсолютно рабочие заготовки. И да, это выгодно компании: например, каждый кристалл стоит 50 долларов, а топовый процессор на нем — 200. Очевидно, что далеко не все будут покупать топы, поэтому можно программно отключить несколько ядер и продать такой CPU за, например, 100 долларов: и пользователи будут довольны, и сама компания без прибыли не останется.
Отсюда следует вполне очевидный вывод: раз отключение зачастую программное, то почему бы не включить то, что было отключено? Конечно, есть шанс, что кристалл изначально был бракованный и включенные ядра будут сбоить — но, как показала практика, велик шанс того, что вместо одноядерного Sempron вы получите двухядерный Athlon или Phenom абсолютно бесплатно, а двухкратное увеличение производительности на дороге не валяется.
Причем список таких процессоров был достаточно внушителен: это Sempron 1xx, Athlon и Phenom II X2, X3 и X4 — всего несколько десятков моделей! Правда, в некоторых случаях «опознать» разблокирующийся процессор можно было по маркировке на крышке, что моментально увеличивало на него цену.
Конечно, сейчас это уже не имеет никакого смысла, ибо даже топовые Phenom тех лет на данный момент способны справиться разве что с серфингом в интернете. Но вот если у вас есть такой «волшебный камень» — приберегите его на будущее, ибо его коллекционная ценность будет только расти.
Жадность Intelа сгубила
Миллениум в процессорах ознаменовался гонкой за достижение 1 ГГц: так, Pentium III с такой частотой анонсировали 8 марта 2000 года. В июле того же года компания Intel замахнулась на еще большие частоты — вплоть до 1.13 ГГц.
И вот тут «синие» не рассчитали: даже при достаточно высоком напряжении в 1.75 В такой процессор работал нестабильно, и в августе его пришлось отозвать. И лишь спустя пару ревизий, уже в 2001 году, процессоры от Intel смогли стабильно работать на частоте в 1.1 и 1.13 ГГц.
Уязвимость BranchScope
Уязвимости Meltdown и Spectre открыли ящик Пандоры — теперь чуть ли не каждый месяц появляются новые ошибки на их базе, которые Intel зачастую не успевает закрывать.
Самые важные из них имеют свои имена, а не только номера, и такой стала уязвимость BranchScope, которой подвержены процессоры Intel Core i5 и i7 поколения Sandy Bridge, Haswell и Skylake. Причем уязвимость работает, даже если приложение запущено внутри анклава (защищенного массива кода) Intel SGX.
Как и Spectre, данная атака использует модуль предсказания переходов, который направлен на ускорение работы процессора путем угадывания путей выполнения будущих инструкций. И проблема в том, что два процесса, работающие на одном ядре процессора, используют предсказатель переходов совместно, что позволяет получить одному процессу данные о другом.
В чем же тогда разница этой уязвимости и Spectre? Последний использует буфер предсказания переходов внутри этого модуля, а вот BranchScope работает с другой частью этого модуля — предсказанием ответвлений. К счастью, заплатка, закрывающая Spectre, также защищает и от этой уязвимости, так что никаких дополнительных патчей безопасности ставить не нужно.
Баг в процессоре Tegra, позволивший взломать Nintendo Switch
Ошибок в ARM-процессорах все же меньше, чем в x86, но они не менее серьезные: так, около года назад хакеры нашли аппаратную уязвимость в загрузочной области и микрокоде процессора Tegra X1, который используется в консоли Nintendo Switch.
И проблема этого бага в том, что он — чисто аппаратный, и программно исправить его можно только выпуском новой ревизии процессора. Ну а пока этого нет, можно делать с консолью все что угодно: к примеру, хакеры запустили на ней полноценный Linux.
К слову, сам процесс использования этой ошибки достаточно забавный: нужно замкнуть контакты Joy-Con и увеличения громкости. Однако сами хакеры призывают быть максимально осторожными, ибо даже они один раз перепутали контакты и сожгли LCD-матрицу консоли.
VME-баг процессоров Ryzen
К сожалению, зачастую новые продукты от AMD выходят сырыми, и в дальнейшем дорабатываются обновлениями. И Ryzen исключением не стали — для них постоянно выходят обновления библиотек AGESA, которые закрывают различные баги (например, ошибки в FMA3-инструкциях) и повышают общую стабильность и производительность системы. И, разумеется, я не стану перечислять все эти ошибки — лишь расскажу о самой интересной, на мой взгляд.
Самой ошибке VME порядка двух лет, и заключалась она в том, что Ryzen имел неправильную реализацию инструкции INT, генерирующую программное прерывание. В итоге в режиме виртуального процессора 8086 (он же VME, и да, такой режим есть в процессорах даже спустя 40 лет после выхода 8086), который использовался для запуска старых 8086-программ в относительно современных ОС, Ryzen начинали работать некорректно, что зачастую приводило к зависанию такого ПО или вообще BSOD.
Данная проблема актуальна для 32-битных Windows XP или Windows Server 2003 при выполнении 16-битного кода в реальном времени — казалось бы, явно не стезя процессоров Ryzen, особенно если учесть, что в 64-битных системах такой проблемы нет. Получается, что это про баг ради бага? Не совсем: не стоит забывать виртуальные машины, которые используют сейчас для запуска старого ПО, которое под Windows 10 не работает, так что эту ошибку AMD все же пришлось исправлять в AGESA 1.0.0.6.
Уязвимость процессоров Slylake-U при использовании USB 3.0
Архитектура Skylake оказалась на редкость «дырявой» — очередная проблема затронула низковольтные процессоры на этой архитектуре и устройства, оборудованные USB 3.0 (то есть по сути все ультрабуки). Причем для взлома нужно всего две вещи: это обычный USB-кабель и пакет для разработчиков Intel System Studio вместе с компонентами Intel System Debugger и Intel DAL.
Это позволяет получить доступ к аппаратной отладке ядра ОС, гипервизорам и драйверам с помощью отладочного интерфейса JTAG (Joint Test Action Group) и технологии Direct Connect Interface (DCI) — именно в Skylake последняя может работать через порт USB 3.0, что и является уязвимостью. Защититься от нее достаточно просто: нужно отключить DCI через порты USB, что и сделали большая часть производителей, выпустив обновления BIOS.
Как видите, в двух статьях суммарно набралось под два десятка уязвимостей и багов в процессорах — достаточно ощутимая цифра. Знаете еще какие-либо ошибки в процессорах? Пишите об этом в комментариях.