Многих интересует решение вопроса с тирингом (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, драйвер и железо. А то заметка людьми читается, а вот есть ли результат у читателей - неизвестно :-(
Не работает. Тиринг как был, так и есть.
ОтветитьУдалитьЕщё уточняйне пожалуйста где этот файл находится, а то не для всех такая инйормация очевидна.
Ubuntu 14.04 Nvidia 331.113
GT525m
Core i7 2670qm
Систему перезапускал после изменений.
Кстати, на встроеной HD3000 интел тиринга вообще нет. Но хотелось бы Нвидию использовать
Предполагалось, что те, кому подобная тема интересна, знают, где xorg.conf находится. Но тем не менее, дельное замечание, поправлю.
УдалитьВ остальном - решение проблемы с тирингом зависит, в том числе, и от композитного менеджера, у которого есть специфичные настройки.
Вероятно, в ubuntu стоит попробовать:
создать файл /etc/profile.d/antitearing.sh
в который добавить строку export __GL_YIELD="USLEEP"
сделать его исполняемым через chmod +x /etc/profile.d/antitearing.sh
а затем перезапустить ОС.
либо попробовать export __GL_THREADED_OPTIMIZATIONS=1
или же обе строки вместе.
Спасибо, брат! Помогло! Дай, Бог, здоровья!
ОтветитьУдалить