Мы испробовали всё, чтобы сделать наш Raspberry Pi самым быстрым в мире — меняли ОС, использовали для охлаждения жидкий азот, апгрейдили схему питания и даже поменяли тактовый генератор. В этой статье я поделюсь некоторыми интересными выводами, которые мне удалось сделать за несколько недель хакинга малинки в сотрудничестве с ElmorLabs.
Содержание
- Вступление
- Raspberry Pi OS + патч NUMA
- Охлаждение жидким азотом
- Прокачка Raspberry Pi
- Тактовый генератор
- Выводы
Вступление
Начну с того, на чём остановился в своём проекте SkatterBencher #77: в нём я разогнал Raspberry Pi 5 до 3 ГГц путём небольшого апгрейда системы воздушного охлаждения. Как оказалось, ключевым фактором, препятствующим повышению частоты, является контроллер напряжения (PMIC). И он не только ограничивает возможность настройки напряжения, поскольку мы также наблюдали отключение Pi при высоких уровнях потребления энергии.
SkatterBencher Pi 5 с новым охлаждением
В связи с этим я решил доработать схему питания, используя ElmorLabs AMPLE-X1. Но к этому моменту я вернусь позже, так как основным инструментом для повышения быстродействия является операционная система.
Raspberry Pi OS + патч NUMA
В нашем случае, когда готовишься побить рекорд, важно начинать с операционной системы. Используя всё тот же дистрибутив Ubuntu, что и в проекте SkatterBencher, мы можем реализовать два улучшения:
- установить официальную Raspberry Pi OS;
- применить патч NUMA.
Официальную операционку малинки можно скачать с сайта производителя, либо использовать образ Raspberry Pi, который проделает всю основную работу автоматически.
О патче Numa я впервые узнал пару месяцев назад, когда обсуждал разгон Pi на подкасте The Pi Cast #181 YouTube-канала Tom’s Hardware Guide. Основная суть патча в том, что эмуляция NUMA позволяет контроллеру памяти BCM2721 эффективнее использовать многопоточность на микросхеме.
О том, как использовать этот патч, я прочёл в руководстве Джеффа Гирлинга. В итоге, установив официальную операционку Pi и применив патч NUMA, мне удалось получить значительный прирост в тестах.
Повышение скорости Raspberry Pi 5
Охлаждение жидким азотом
При подготовке Raspberry Pi к повышению напряжения и частоты следующим шагом должно идти улучшение системы охлаждения, желательно с помощью чего-то очень холодного вроде жидкого азота. Ну а где в Тайбэе можно организовать тестирование с использованием жидкого азота? Конечно же, в офисе ElmorLabs.
Плата Raspberry Pi 5 имеет довольно скромный размер со множеством высоких компонентов, поэтому стандартный контейнер вроде нашего AI LN2 или ElmorLabs Volcano использовать не получится. Тем не менее мы нашли миниатюрный вариант LN2, который оказался достаточно увесистым, чтобы его можно было просто поставить на SoC и получить необходимый уровень охлаждения даже в условиях комнатной температуры. В конце концов, SoC потребляет очень мало энергии.
Raspberry Pi 5 с охлаждением на жидком азоте
Сначала для проверки адекватности разгона я выполнил Geekbench на 3 200 МГц. Тесты показали 1 000 в одноядерном режиме и 2 000 в многоядерном.
Затем я попробовал повысить рабочую частоту при невысокой температуре окружающей среды 20°C. Но как видите, в таких условиях мне удалось достичь лишь 3 600 МГц. Когда я пробовал повысить частоту до 3 700 МГц, Pi зависал.
Максимальная частота Raspberry Pi 5 3 600 МГц
Понижение температуры до -40°C ничего не меняло: при 3 700 МГц Pi также зависал. Странно! Я также подключил ElmorLabs EVC2, чтобы взаимодействовать с PMIC Renesas напрямую и повысить напряжение на каждой линии питания. Увы, но и это не позволило поднять частоту.
Для справки: у Raspberry Pi 5 проблемы с работоспособностью начинаются только при -90°C. Весьма неплохо!
Отчёт о температуре Raspberry Pi 5 показывает -94.1°C
Довольно странно, что при любой температуре я упираюсь в один и тот же потолок частоты. Все современные SoC должны нормально масштабироваться при изменении температуры и напряжения, если только не присутствует некий внешний ограничивающий фактор.
Невозможность повышения частоты при понижении температуры говорит о том, что здесь может быть замешана нехватка напряжения.
И выяснить это можно лишь одним способом.
Прокачка Raspberry Pi
В упомянутом ранее проекте SkatterBencher я писал, что малинка отключается при высоких нагрузках, использующих инструкции NEON.
«При более внимательном рассмотрении бенчмарка PassMark мы увидим, что сбой происходит конкретно в суб-тесте NEON. […] Если проследить за изменением силы тока, напряжения и мощности
VDD_Core
во время рабочей нагрузки, то станет ясно, что суб-тест NEON требует намного больше мощности, чем любой другой бенчмарк. Здесь мы видим, что в пике сила тока превышает 15 А, а потребление энергии — 18 Вт.Когда бенчмарк крашится, Raspberry Pi зависает, и мы теряем возможность взаимодействия даже с PMIC, пока не нажмём кнопку питания. Это говорит о том, что нестабильность малинки вызвана не слишком высокой частотой, а, скорее, неким другим механизмом вроде защиты от превышения тока или температуры. Если верить телеметрии напряжения, демонстрируемой моим скриптом Python, то не похоже, чтобы проблема была в нехватке напряжения. Но, к сожалению, на данный момент эта PMIC возможности отладки не предоставляет».
— SkatterBencher #77: Raspberry Pi 5 Overclocked to 3000 MHz
Чтобы решить эту проблему — а также преодолеть лимит в 1,2 В — нам нужно доработать микросхему питания. И здесь нам на выручку снова приходит ElmorLabs с их платой Ample-X1.
ElmorLabs AMPLE-X1
ElmorLabs AMPLE-X1 — это плата питания, использующая однофазный понижающий преобразователь. Она оптимизирована под работу от 12 В, но при этом может обходиться и меньшим напряжением вплоть до 4,5 В. Эта плата достигает эффективности 91,7%, а при подключении к EVC2 мы также получаем возможность мониторить и изменять параметры её работы.
Чтобы подцепить AMPLE-X1 к малинке, потребуется проделать ряд труднообратимых модификаций, которые определённо лишат устройство гарантии.
- Удалить с 4-фазной SoC индукторы, чтобы отключить от неё PMIC.
- Соскоблить с платы часть паяльной маски, чтобы оголить дополнительные медные площадки под
Vcc
иGnd
. - Впаять короткие, толстые провода между Raspberry Pi и AMPLE-X1.
- Сделать так, чтобы AMPLE-X1 по умолчанию обеспечивала примерно 1,0 В (так она может давать вплоть до 5,0 В).
Индукторы vdd_core на Raspberry Pi 5
После этого можно проверить, будет ли малинка загружаться. И это не гарантируется, так как иногда для обеспечения корректной загрузки у SoC настроено двухстороннее взаимодействие с PMIC. К счастью, в моём случае всё работает. В этом процессе важно подать питание с AMPLE-X1 на Raspberry Pi 5 до запитывания других линий через USB Type-C и начала загрузки.
Доработанный Raspberry Pi 5 с платой питания ample-x1 от ElmorLabs
Теперь можно использовать ElmorLabs EVC2 для корректировки выходного напряжения, а также мониторинга выходных тока и мощности. Вы можете использовать EVC2 через отдельную систему, например, ноутбук с Windows, или скачать неофициальный пакет для Linux с Discord-канала ElmorLabs (backup).
Вот пример того, как AMPLE-X1 демонстрирует пиковые 25,5 Вт при прогоне в Passmark:
Теперь, прокачав схему питания, можно повысить напряжение, чтобы получить более высокую частоту. Мы пробовали повышать его с 1,2 В вплоть до 1,55 В. К сожалению, это не позволило нам получить ни единого дополнительного МГц. Ситуация та же, что и при изменении температуры.
Но в чём же дело?
Тактовый генератор
Есть несколько причин, по которым изменение напряжения или внешней температуры может не влиять на изменение частоты. Например, проблема может заключаться в фазовой автоподстройке частоты (ФАПЧ), что мы наблюдали в Intel Tiger Lake. Ещё дело может быть в том, что какой-то IP-блок, подключённый к ядрам Arm, тоже попутно разгоняется. Или же загвоздка в нестабильности конкретного коэффициента ФАПЧ.
К сожалению, большинство этих проблем сложно отлаживать без нужных инструментов разработки. Но мы можем попробовать один последний приём, чтобы понять, заключается ли проблема именно в автоподстройке частоты ядер Arm — поменять тактовый генератор. Идея здесь проста: заменить генератор фиксированной частоты на генератор регулируемой. Это позволит нам установить другой коэффициент ФАПЧ для получения частот выше 3,6 ГГц.
▍ ElmorLabs ECB
Штатный тактовый генератор находится на задней стороне платы и работает на 54 МГц. Его можно демонтировать с помощью нагрева. После этого мы заменим его на ElmorLabs External Clock Board, которая позволит устанавливать частоту выше или ниже штатных 54 МГц.
Тактовый генератор Raspberry Pi 5, работающий на 54 МГц
Тактовый генератор ECB от ElmorLabs
При повышении частоты мы сразу упёрлись в ограничение 56 МГц, а вот при понижении таких проблем не возникло, и нам удалось опустить её вплоть до 46 МГц.
Elmorlabs ECB при 46 МГц
При таковой частоте 46 МГц мы можем установить частоту Arm на 4 000 МГц. Как видите, инструмент vcgencmd
от Broadcom тоже показывает 4 ГГц. Но, естественно, в реальности частота меньше, так как опорная частота тактового генератора понижена. То есть по факту мы получаем 4,000 / 54 x 46 = 3,407 МГц.
И тут мы снова упёрлись в тот же потолок частоты, который возникал при корректировке температуры и напряжения: около 3,4 ГГц в бенчмарках и 3,6 ГГц в настройках.
Ах да, я пробовал прогнать Geekbench при 4 ГГц и — рад сообщить — бенчмарк смог определить, что это недействительный результат. Молодец!
Geekbench сообщает о том, что результаты теста могут быть ошибочны из-за проблем с таймерами Pi 5
Выводы
Итак, что мы имеем… В своём стремлении разогнать Raspberry Pi 5 до 4 ГГц мы перепробовали всё, что смогли придумать. Но ни значительное понижение температуры, ни повышение напряжения, ни даже замена тактового генератора не позволили превысить 3,6 ГГц.
Однако я нисколько не жалею, что потратил силы и время на этот проект, так как он, в любом случае, позволил мне больше узнать о разгоне малинки. Благодаря ему, я смог лучше разобраться в Linux и Arm, а также изучить реально продвинутые аппаратные модификации. Я рассматриваю этот опыт как поворотную точку, которая заложила основу для будущих экспериментов.
Хочу выразить благодарность Джону из ElmorLabs за его помощь и предоставленные для работы инструменты. Без его содействия этот проект оказался бы невозможен.
Ну а вам спасибо за чтение. До новых встреч!
Автор: Bright_Translate