[Arm64-baikalm] Регресс в ядре 5.15

Vadim V. Vlasov vadim.vlasov на elpitech.ru
Ср Июл 6 15:48:41 MSK 2022


Приветствую!

On 6/27/22 6:03 PM, Alexey Sheplyakov wrote:
> Здравствуйте, Николай!
>
> On Fri, Jun 24, 2022 at 01:56:39PM +0300, Nikolay Zhuravlev wrote:
>   
>> Мы тут обнаружили, что в Simpy Linux 10 на платах et101 не работает HDA звук.
> Уже работает, начиная с kernel-image-std-def 1:5.10.117-alt1.
> А также в ядрах kernel-image-rpi-def версий 5.15.x.
>
>> В связи с этим решили попробовать более новые ядра, в частности
>> ядро 5.15 вот отсюда:
>> https://github.com/altlinux/linux-arm.git -b baikalm-5.15.y-next
>>
>> Звук там появился, всё нормально, отображаются две карты в /proc/asound/cards.
>> Однако обнаружили некоторые шероховатости в графике под этим ядром,
>> которые описываю ниже.
>> 3. Замедление gtkperf тестов примерно в два раза по сравнению со стоковым
>> ядром 5.10.88-std-def-alt1.
>>
>> 4. Замедление glmark2 тестов по сравнению с ядром 5.10:
>>
>> $ glmark2-es2 -b shading --annotate
>>
>> XFCE + 5.10.88-std-def-alt1: 424 FPS
>> XFCE + 5.15.29-51730-g01c2ae844980: 296 FPS
>>
>> 5. Еще более существенное замедление glmark2 тестов в GNOME/Wayland:
>>
>> $ glmark2-es2-wayland -b shading --annotate
>>
>> GNOME/Xwayland + 5.10.88-std-def-alt1: 741 FPS
>> GNOME/Xwayland + 5.15.29-51730-g01c2ae844980: 371 FPS
> Ожидаемый эффект. panfrost (Mesa) не умеет использовать некогерентные (по кешу)
> шейдерные ядра, и это неумение приводит к серьёзным артефактам ("рваные
> треугольники", "чёрный экран") и "случайному" зависанию GPU. Поэтому у T628
> используется только первая группа шейдерных ядер, в случае Байкал-М -- 4 из 8.
> Более подробное объяснение:
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6e55d273708b2a9485eb7c035efd2757fdae1869

Это неправильный патч. Проверяется простой серией тестов:

A. Собираем ядро baikalm-5.15.y-next, запускаем "glmark2 --annotate", 
получаем общий результат 210.

B. Идем в panfrost_job_write_affinity() (panfrost_job.c) принудительно 
вырубаем все ядра кроме 4-х (affinity &= 0xf;). Вроде, ничего не должно 
поменяться. Запускаем glmark2 - получаем 204 (отклонение в пределах 
погрешности).

C. Идем в panfrost_gpu_power_on() и убираем core_mask: "core_mask = 
pfdev->features.shader_present;" перед записью в SHADER_PWRON_LO. 
glmark2 = 201 - ничего не изменилось.

D. Снова идем в panfrost_job_write_affinity() и перед строчкой из п."B" 
добавляем условие:

if (js == 1)

Получаем glmark2 = 377 - почти вдвое больше.

E. Осталось полностью откатить обсуждаемый патч (включить второй кластер 
L2-кэша) и посмотреть на результат: glmark2 = 380 - в пределах 
статистической погрешности то же самое, что и в п."D".

> Раньше (по незнанию) использовали обе группы шейдерных ядер, что вызывало
> периодические зависания GPU. Теперь разобрались, и используем только первую
> группу шейдерных ядер. Зависания GPU прекратились, но FPS теперь в 2 раза меньше, да.
Вообще-то патчу с "affinity" уже скоро два года. И ничего не зависает.
>   
>> 1. Временные артефакты отображения в Хромиум, как на картинке:
>> https://drive.google.com/file/d/1e7fpI0-fJzuI9_LQufjkXyqDEtvD8gFJ/view?usp=sharing
>>
>> 2. Если вместо XFCE запускать GNOME/XWayland, то похожие артефакты
>> воспроизводятся на тестах gtkperf (gtkperf -a -c 500).
>> https://drive.google.com/file/d/1l_Btph1c5ZmlltsCJLuUCg70NINmnpUX/view?usp=sharing
> а) Я такое видел в Mate. Лечилось включением "программного" композитинга
>     (в кавычках - поскольку при этом используется GL ES).
>
> б) Такого рода артефакты я иногда наблюдаю и без panfrost (на TF307).
>   
>> Что касается визуальных артефактов, то нам удалось их вылечить откатыванием
>> патча про dma-coherent для gpu0 в *.dts. Наш патч для 5.15 прилагаю. Видимо,
>> добавление dma-coherent в dts не помогает на 100%, и всё равно приходится
>> залезать руками в panfrost_mmu.c, как оно и было в ядре 5.10.
> Этот патч неправильный, подробности здесь:
>
> https://lists.freedesktop.org/archives/dri-devel/2021-December/335750.html
>
>> Относительно замедлений в gtkperf/glmark пока теряемся в догадках.
> panfrost (Mesa) не умеет использовать некогерентные (по кешу) шейдерные ядра,
> и это неумение весьма быстро приводит к зависанию GPU. Поэтому у T628
> используется только первая группа шейдерных ядер, в случае Байкал-М -- 4 из 8.
>   
>> Наблюдаете ли вы вышеописанное на своих досках? Или это только свойственно ET101?
> 1. Неспособность panfrost использовать все шейдерные ядра Mali T628 проявляется
>     на всех платах с Байкал-М, которые мне попадались (TF307, ET101, AQBM1000).
>
> 2. Артефакты вида "перечёркивание" [1] также наблюдал на TF307, AQBM1000,
>     с panfrost и без него. Думаю, что это какая-то кривизна драйвера baikal_vdu,
>     а возможно - особенность аппаратуры.
>
> [1] https://drive.google.com/file/d/1e7fpI0-fJzuI9_LQufjkXyqDEtvD8gFJ/view?usp=sharing
>
>
> _______________________________________________
> Arm64-baikalm mailing list
> Arm64-baikalm at lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/arm64-baikalm



Подробная информация о списке рассылки Arm64-baikalm