Процессоры AMD тормозят под Linux из-за кривого кода 20-летней давности
В ядре Linux есть код, мешающий современным чипам AMD работать на полную мощность. Ему уже 20 лет, но момент выпуска он был необходим для корректной работы процессоров тех лет. Проблема не зацепила CPU Intel – в них от нее есть встроенная защита. Новый патч к ядру готов – он разработан внутри AMD и уже доказал свою эффективность.
Когда старые технологии начинают мешать
Современные процессоры AMD не в состоянии раскрыть свой потенциал в дистрибутивах Linux из-за патча к ядру, добавленному 20 лет назад, в 2002 г. Как пишет портал Ars Technica, из-за него Linux считает, что за 20 лет у AMD не вышло ни одного нового процессора – он по-прежнему полагает, что производительные Threadripper – это процессоры линейки Athlon, со всеми вытекающими из этого последствиями.
Патч для ядра Linux написал разработчик Энди Гровер (Andy Grover), и он был одобрен лично Линусом Торвальдсом (Linus Torvalds) – создателем Linux. Этот патч вносил в ядро поддержку ACPI – открытого промышленного стандарта образца 1996 г., который позволяет определять единый интерфейс обнаружения аппаратного обеспечения, управления питанием и конфигурации материнской платы и устройств компьютера.
Апдейт за авторством Гровера включает, помимо прочего, еще и активацию «фиктивной операции ожидания» (dummy wait op). В результате система считывала данные с единственной целью – для задержки следующей инструкции процессора до тех пор, пока у CPU появится возможность полной остановки при помощи инструкции STPCLK#.
Свою пользу патч Гровера, вне всякого сомнения, принес, однако к 2022 г. он давно утратил свою актуальность. Если на момент 2002 г. развертывание ACPI еще продолжалось, и многие CPU еще не умели переходить в режим ожидания без данного обновления и экономить энергию, то спустя 20 лет эта проблема давно была решена. Однако работе современных процессоров AMD разработка Энди Гровера может мешать.
Патч к патчу
В компании AMD творение Гровера, вероятно, считают как минимум бесполезным, максимум – вредным. Инженер Пратик Наяк (Prateek Nayak) из ее штата разработал собственное дополнение к ядру Linux, привносящее в него функцию «фиктивного ожидания для процессоров с архитектурой Zen». В настоящее время у AMD на руках три поколения данной архитектуры, и она в ускоренном темпе работает над Zen 4.
Пратик Наяк утверждает, что все актуальные CPU компании AMD, в основе которых лежит Zen-архитектура, могут корректно работать в среде Linux, даже если патча Гровера в ядре не будет. Более того, инженер прямо заявил, что наработка Гровера 20-летней давности негативно влияет на производительность современных чипов компании. С его слов, это проявляется как минимум при некоторых рабочих нагрузках. Заявлять, что в ядре Linux содержится код, который замедляет современные Epyc, Threadripper и Ryzen на постоянной основе, Наяк, видимо, не решился. Вместо этого он сказал, что проблема становится все более заметной с увеличением количества ядер в процессоре. Из этого можно сделать вывод, что сильнее всего страдают чипы линеек Threadripper и Epyc.
Все заработало
Достоверность своей теории и работоспособность созданного им патча инженер AMD доказал наглядно, проведя несколько замеров производительности. Согласно полученным им данным, патч Энди Гровера в ядре Linux действительно крайне разрушительно влияет на производительность процессоров AMD.
Так, в версии с патчем Наяка одна система выдавала колоссальную минимальную пропускную способность МБ/с – она была на 1390% выше в сравнении с той же системой, но без кода Наяка. Средняя пропускная способность МБ/с была на 51% выше в пользу решения Наяка.
Intel «в домике»
AMD и Intel – два заклятых конкурента на рынке х86-процессоров для ПК, ноутбуков и серверов. Они соперничают не годами – десятилетиями, и патч Энди Гровера, казалось бы, должен был зацепить еще Core вместе с Pentium, Celeron и Xeon.
Однако же современные чипы Intel оказались невосприимчивы к тому, что 20 лет назад выпустил Энди Гровер. Инженеры Intel, как выяснилось, давно осведомлены об этой проблеме, и потому в процессорах компании на протяжении как минимум 10 последних лет есть функция обхода его патча для Linux.
У Intel, к слову, тоже готово исправление данной проблемы 20-летней давности – его разработал сотрудник компании Дэйв Хансен (Dave Hansen). Он планирует в обозримом будущем направить его разработчикам ядра с целью рассмотрения возможности интеграции в ядро Linux 6.0.
Следует отметить, что в ОС семейства Windows тоже встречаются инструменты замедления производительности современных CPU. Такая «фишка», как сообщал CNews, есть в новейшей Windows 11. Microsoft попыталась все исправить, но лишь усугубила проблему. Только много позже ей удалось справиться с поставленной задачей.
Насколько хорошая поддержка Ryzen в Linux
Давно (несколько лет) не собирал компы для Linux, сейчас вот понадобилось собрать десктопную офисную машинку.
Присматриваюсь к бюджетным процессорам AMD Ryzen 3 с графическим ядром Radeon R7. Пока что неясно следующее:
- нет ли в Linux проблем с вольтажом, управлением частотой, перегревом?
- как ведёт себя графика? Нужен ли проприетарный драйвер от AMD ил можно жить с обычным открытым драйвером? Не дёргаются ли эффекты в Гноме/КДЕ, нет ли тиринга?
- есть ли смысл ставить специализированные сборки Linux для Ryzen, типа OpenMandriva?
Или может взять что-то бюджетное на Intel? Меня в данном случае волнует не прибавка к производительности, а отсутствие геморроя.
AMD Ryzen 3 с графическим ядром Radeon R7
Разве такие есть? Я думал, внутри Vega.
нет ли в Linux проблем с вольтажом, управлением частотой, перегревом?
На счет вольтажа не в курсе, если ты про CPU. Но cpu frequency governor точно работает. Для бюджетных процессоров вполне хватит комплектного охлаждения. Я думаю, встроенный GPU можно андервольтить и разгонять в линуксе также, как и дискретки.
как ведёт себя графика? Нужен ли проприетарный драйвер от AMD
Вроде бы тут были темы с жалобами на проблемы со встройкой, но у меня дискретная вега (и проблемы с ней), так что сказать не могу. Проприентарного драйвера как такового нет: это юзерспейсная реализация OpenGL/Vulkan/OpenCL, которая местами проигрывает в производительности реализации из Mesa. Если нужен OpenCL и по какой-то причине не подходит ROCm — ставь.
В xorg.conf можно прописать, если тиринг увидишь. Я это сделал просто чтобы было.
есть ли смысл ставить специализированные сборки Linux для Ryzen, типа OpenMandriva?
Лично я не вижу смысла. Использую Gentoo, собираю пакеты с -march=znver1, особого прироста не увидел.
Есть проблема с тем, что на дефолтных настройках биоса (те, которые safe defaults) линукс может работать не стабильно. Проблема проявляется не со всеми комбинациями материнская плата + процессор, и возможно зависит от конкретных экземпляров изделий. Самое плохое, что если твоя система вдруг окажется подверженной проблеме, не факт, что ты найдешь исправляющее ситуацию временное решение. Проблема тянется с выпуска самых первых процессоров ryzen, и нормального исправления пока не предвидится.
AMD Ryzen 3 с графическим ядром Radeon R7
Там Vega 8, хорошая интегрированая «графика», между прочим.
нет ли в Linux проблем с вольтажом, управлением частотой, перегревом?
Нету. Всё там работает, как положено. А перегрев может быть только если разогнать его до скорости света под «стоковым» кулером да в наглухо закрытом корпусе.
как ведёт себя графика? Нужен ли проприетарный драйвер от AMD ил можно жить с обычным открытым драйвером? Не дёргаются ли эффекты в Гноме/КДЕ, нет ли тиринга?
Сейчас всё пляшет «из коробки», максимум, что может случиться — придётся дописывать параметр загрузки ядра (не помню, какой), и тогда гарантированно заработает. Это нужно уже на месте смотреть.
Открытый драйвер прекрасно работает, простому пользователю пропиетарный вообще не нужен (он только для OpenCL нужен, и то — некоторые умельцы нужный функционал оттуда выдирают и прикорчёвывают себе). Игры, видео — всё работает, «кеды», «гном» — прекрасно себя чувствуют, никакого тиринга нету (если только не ломать GUI специально).
есть ли смысл ставить специализированные сборки Linux для Ryzen, типа OpenMandriva?
В первый раз о таких слышу, но нет, они не нужны. Всегда ставил Arch, и мой 2600 себя прекрасно чувствует. 2200, 2400 тоже должны отлично работать с последними драйверами и «месой».
И я не могу понять, с чего вы решили, что OpenMandriva специально для «рязани» создавалась.
Или может взять что-то бюджетное на Intel? Меня в данном случае волнует не прибавка к производительности, а отсутствие геморроя.
Вроде бы и то, и другое без геморроя, как говорится — «вставил и забыл». Но к «синему» камню ещё надо хорошую мат. плату подобрать, а это задачка, так сказать, «для гурманов».