Временная заплатка 20-летней давности в ядре Linux продолжает тормозить современные процессоры AMD

Инженер AMD Пратик Наяк недавно представил патч для драйверов бездействия процессоров для Linux, который «пропускает фиктивное ожидание для процессоров на основе микроархитектуры Zen».

Когда в 2002 году в ядро ​​Linux была добавлена ​​поддержка ACPI, она включала «фиктивную операцию ожидания». По сути, система считывала данные без какой-либо цели, а лишь для задержки выполнения следующей инструкции до тех пор, пока CPU не сможет полностью остановиться с помощью команды STPCLK#. Это позволило обеспечить некоторую экономию энергии и совместимость в первые дни реализации ACPI, когда некоторые чипы не переходили в состояние простоя, когда этого можно было ожидать.

Но это решение было актуально для процессоров линейки Athlon 20-летней давности. Современные чипы AMD Threadripper на базе архитектуры Zen не нуждаются в этом обходном пути. Как пишет Наяк, он вредит им, по крайней мере, при определённых рабочих нагрузках в Linux. Тестирование рабочих нагрузок с выборкой на основе инструкций показывает, что «значительное количество времени тратится на фиктивную операцию, которая ошибочно учитывается как резидентность C-State». Процессор, выявляя эту фиктивную работу с низкими нагрузками, может переходить в более глубокое и медленное состояние C-State, что затем заставляет ЦП дольше «пробуждаться», особенно в задачах, требующих большого количества переключений между состояниями работы и простоя.

Nayak провел тесты tbench в системе с двумя процессорами на базе архитектуры Zen3. При этом для сравнения использовались базовое ядро Linux, ядро с полностью отключенным состоянием C2 и ядро с исправленной фиктивной операцией ожидания. В его пропатченной версии минимальная пропускная способность в МБ/с увеличилась на 1390%, а средняя пропускная способность — на 51% по сравнению с базовым ядром. Эти результаты лишь немного отстают от версии ядра с полного отключенным состоянием C2.

Если на этой неделе будет утверждён срочный патч, удаляющий или ограничивающий «фиктивное ожидание», он, скорее всего, станет частью ядра ​​Linux 6.0, которое ожидается на следующей неделе.

Источник: arstechnica

Disqus Comments Loading...