Многих интересует решение вопроса с тирингом (screen tearing) в ОС, основанных на ядре Linux. Что такое тиринг? Это когда "рвётся изображение". Это не беда какой-то отдельной аппаратной или программной платформы. Стоит отключить вертикальную синхронизацию в игре на Windows - и tearing тут как тут.
У кого-то при использовании GNU/Linux его нет и не было, у кого-то периодически пропадает, некоторые его просто не замечают. Иногда тиринг пропадает при работе в полноэкранном режиме, при этом присутствуя в оконном.
Причины кроются в видеодрайверах, настройках менеджера окон, X-сервера и, возможно, в самом железе (имеется в виду не только видеокарта, но и монитор).
Не так давно у меня появился удивительно мерзкий тиринг, который натурально мешал смотреть видео, включая полноэкранные режимы, где тиринга у меня никогда не было.
И я решил, что хватит это терпеть и стал искать решения. Делюсь тем, что нашёл.
Вариант 1:
После многочасовых попыток решить проблему, на горизонте нарисовалось первое решение.
Для этого нужно внести изменения в файл /etc/X11/xorg.conf, добавив в секцию Screen строку:
Кроме того, вместо nvidia-auto-select можно вручную вписать разрешение и частоту обновления. Например, вот так:
Option "metamodes" "1920x1080_120 +0+0 { ForceFullCompositionPipeline = On }"
После этого нужно сохранить изменения в файле и перезапустить X-сервер. Но можно и "просто" перезагрузить компьютер (я так и делал).
Для полноты картины моих настроек:
На форумах devtalk.nvidia.com я слышал байки, что эта опция для решения проблемы screen tearing - ужасное решение, т.к. приведёт к страшной потере производительности. Возможно, у кого-то так и будет. Возможно, для какой-то версии драйверов это и так.
Но я на слово верить не захотел и проверил через Unigine Valley. Ключевые компоненты - i5-2500K @ 4.4 GHz и GTX 760.
С включенной опцией получил такой результат:
Причины кроются в видеодрайверах, настройках менеджера окон, X-сервера и, возможно, в самом железе (имеется в виду не только видеокарта, но и монитор).
Не так давно у меня появился удивительно мерзкий тиринг, который натурально мешал смотреть видео, включая полноэкранные режимы, где тиринга у меня никогда не было.
И я решил, что хватит это терпеть и стал искать решения. Делюсь тем, что нашёл.
Вариант 1:
После многочасовых попыток решить проблему, на горизонте нарисовалось первое решение.
Для этого нужно внести изменения в файл /etc/X11/xorg.conf, добавив в секцию Screen строку:
Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"У меня получилось вот так:
Section "Screen"Если blogger разобьёт выделенное жирным на 2 строки - не поддавайтесь на провокацию, всё выделенное жирным должно быть в Вашем xorg.conf одной строкой.
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Кроме того, вместо nvidia-auto-select можно вручную вписать разрешение и частоту обновления. Например, вот так:
Option "metamodes" "1920x1080_120 +0+0 { ForceFullCompositionPipeline = On }"
После этого нужно сохранить изменения в файле и перезапустить X-сервер. Но можно и "просто" перезагрузить компьютер (я так и делал).
Для полноты картины моих настроек:
- в настройках Nvidia X Server в разделе OpenGL у меня отключён "Sync to VBlank";
- в настройках эффектов KDE движок - OpenGL 3.1, графическая система Qt - растровая, предотвращение разрывов (Vsync) - полная перерисовка.
На форумах devtalk.nvidia.com я слышал байки, что эта опция для решения проблемы screen tearing - ужасное решение, т.к. приведёт к страшной потере производительности. Возможно, у кого-то так и будет. Возможно, для какой-то версии драйверов это и так.
Но я на слово верить не захотел и проверил через Unigine Valley. Ключевые компоненты - i5-2500K @ 4.4 GHz и GTX 760.
С включенной опцией получил такой результат:
Текстом:
FPS: 35.0А вот результат того же бенчмарка с выключенной опцией:
Score: 1465
Min FPS: 22.5
Max FPS: 59.6
Текстом:
не только лишь все, мало кто может это заметить своими глазами.
Вроде бы всё достаточно понятно.
Вариант 2:
Создать файл /etc/profile.d/antitearing.sh
В который необходимо добавить строку
Опять же, дисклеймер: то, что работает у меня, не обязательно должно работать у других, т.к.
системы, настройки, версии драйверов и железо у всех разное.
Возможно, есть и более изящные решения, но я их не нашёл, поэтому делюсь тем, которое помогло в моём случае, вдруг поможет кому-то ещё устранить tearing.
P.S. если помогло (или не помогло), просьба указать об этом в комментариях, упомянув DE, драйвер и железо. А то заметка людьми читается, а вот есть ли результат у читателей - неизвестно :-(
FPS: 35.1Возможно, для кого-то потеря 0.5 от максимального FPS и 0.1 от среднего - это страшно, но по моему скромному мнению,
Score: 1470
Min FPS: 21.5
Max FPS: 60.1
Вроде бы всё достаточно понятно.
Вариант 2:
Создать файл /etc/profile.d/antitearing.sh
В который необходимо добавить строку
export __GL_YIELD="USLEEP"Сделать его исполняемым через
chmod +x /etc/profile.d/antitearing.sh
Опять же, дисклеймер: то, что работает у меня, не обязательно должно работать у других, т.к.
системы, настройки, версии драйверов и железо у всех разное.
Возможно, есть и более изящные решения, но я их не нашёл, поэтому делюсь тем, которое помогло в моём случае, вдруг поможет кому-то ещё устранить tearing.
P.S. если помогло (или не помогло), просьба указать об этом в комментариях, упомянув DE, драйвер и железо. А то заметка людьми читается, а вот есть ли результат у читателей - неизвестно :-(

