- Ryzen
- Tweaking Ryzen
- Voltage, power and temperature monitoring
- Power management, undervolting and overclocking
- Compiling a kernel
- Troubleshooting
- Random reboots
- Screen-tearing (APU)
- Soft lock freezing
- Freeze on shutdown, reboot and suspend
- Процессоры AMD тормозят под Linux из-за кривого кода 20-летней давности
- Когда старые технологии начинают мешать
- Патч к патчу
- Все заработало
- Intel «в домике»
Ryzen
Install the amd-ucode package to enable microcode updates and enable it with the help of the Microcode page. These updates provide bug fixes that can be critical to the stability of your system. It is highly recommended to use it despite it being proprietary.
Tweaking Ryzen
Voltage, power and temperature monitoring
lm_sensors should be able to monitor temperatures out of the box. However, for more detailed information such as power consumption and voltage, zenpower3-dkms AUR is needed. For GUI based monitoring tools, use zenmonitor AUR or zenmonitor3-git AUR for Zen 3 CPUs.
Power management, undervolting and overclocking
- RyzenAdj — RyzenAdj is a command-line tool that can adjust power management settings for Ryzen mobile processors.
- Ryzen Controller — Ryzen Controller is a GUI for RyzenAdj.
- amdctl — amdctl is a command-line tool for under/over clocking/volting AMD CPUs, currently supporting AMD CPU families 10h, 11h, 12h, 15h, 16h, 17h and 19h.
- ZenStates-Linux — ZenStates is a command-line tool to adjust the clock speed and voltage. A detailed setup example is given in Level1Techs forum.
Compiling a kernel
See Gentoo:Ryzen#Kernel on enabling Ryzen support. The officially supported kernels have the required configuration by default.
Troubleshooting
Random reboots
With Ryzen 5000 series, particularly the higher-end models of 5950X and 5900X there seem to be some slight instability issues under Linux, related possibly to the 5.11+ kernel, as shown by this kernel bug. After investigating and reading reports on the Internet, It seems that out of the box, Windows seems to run the CPUs at higher voltage and lower peak frequencies, compared to the stock linux kernel, which depending on your draw from the silicon lottery could cause a host of random application crashes or hardware errors that lead to reboots. You will recognise those by dmesg logs that look like:
kernel: mce: [Hardware Error]: Machine check events logged kernel: mce: [Hardware Error]: CPU 22: Machine Check: 0 Bank 1: bc800800060c0859 kernel: mce: [Hardware Error]: TSC 0 ADDR 7ea8f5b00 MISC d012000000000000 IPID 100b000000000 kernel: mce: [Hardware Error]: PROCESSOR 2:a20f10 TIME 1636645367 SOCKET 0 APIC d microcode a201016
The CPU ID and the Processor number may vary. To solve this problem you need to supply higher voltage to your CPU so that it is stable when running at peak frequencies. The easiest way to achieve this is to use the AMD curve optimiser which is accessible via your motherboard’s bios. Access it and put a positive offset of 4 points, which will increase the voltage your CPU is getting at higher loads. It will limit overclocking potential due to higher heat dissipation requirements, but it will run stable. For more details check this forum post. When I did this for my 5950X, my processor stabilised and the frequency and voltage ranges were more similar to those observed under windows.
Screen-tearing (APU)
If you are using Xorg and are experiencing screen-tearing, see AMDGPU#Tear free rendering.
Soft lock freezing
This bug is well known and is being discussed on bugzilla and launchpad. While the solution is not the same in all cases, this one helped some users. Add the output of this command echo rcu_nocbs=0-$(($(nproc)-1)) as a kernel parameter where the command nproc just prints your CPU’s threads. For this option to be applied, you need a compiled kernel with option CONFIG_RCU_NOCB_CPU (like linux ).
A different cause for the freezes is the power saving management indicated by c-states. The maximum power saving state c6 can cause problems. Adding the kernel parameter processor.max_cstate=5 helped in some cases but other users reported that the option is not applied and the c6 state is still entered. For them, this package disable-c6-systemd AUR helped. Before using it, modprobe msr needs to be run in order to activate that kernel module.
Some laptops with Ryzen CPUs such as the HP Envy x360 15-bq100na may experience CPU soft locks which result in a frozen system. These can be avoided with the kernel parameter idle=nomwait added.
In some cases, kernel parameter pci=nomsi fixes the issue.
In some other cases, the issue is simply bad hardware, and warranty claiming the CPU for a new one may just solve your issues.
Freeze on shutdown, reboot and suspend
This seems to be related to the C6 c-state, that does not seem to be well supported (if at all) in Linux.
To fix this issue, go into UEFI Setup and search for an option labelled something like this: «Power idle control». Change its value to «Typical current idle». Note that these names are dependent on what the motherboard manufacturer calls them, so they may be a little different in your particular case.
Other less ideal solutions include disabling c-states in the UEFI Setup or adding processor.max_cstate=1 to your kernel command line arguments.
Процессоры 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 попыталась все исправить, но лишь усугубила проблему. Только много позже ей удалось справиться с поставленной задачей.