Фокус – мерцание экрана, недозагрузка FIFO процессора i915 трубы A/B на Intel HD Graphics с экраном DisplayPort.

Вопрос или проблема

У меня подключен Lenovo ThinkPad X220 к экрану Acer VG0 27″ 1440p через DisplayPort. Периодически экран выключается на несколько секунд. Обычно он возвращается, но иногда он выключается до тех пор, пока я не отключу экран и не подключу его снова.

Я добавил репликатор порта, который позволяет мне подключить второй экран и использовать ноутбук в закрытом состоянии. Второй экран – это LG 23″ 1080p, подключенный через DisplayPort->HDMI. Этот экран не мерцает, так что это связано либо с более высоким разрешением Acer, либо с родным соединением DisplayPort (или с обоими).

Я нашел много противоречивой информации о сообщении об ошибке, которое появляется в dmesg после мерцания:

[ 2779.680083] [drm:intel_cpu_fifo_underrun_irq_handler [i915]] *ERROR* CPU pipe B FIFO underrun
[ 2779.680147] [drm:intel_set_pch_fifo_underrun_reporting [i915]] *ERROR* uncleared pch fifo underrun on pch transcoder B
[ 2779.680176] [drm:intel_pch_fifo_underrun_irq_handler [i915]] *ERROR* PCH transcoder B FIFO underrun

Иногда это pipe/transcoder A. В любом случае, это один и тот же блок сообщений. Обширный поиск привел к тому, что это простое диагностическое сообщение, без особого влияния на использование, к тем же симптомам, с которыми я сталкиваюсь при мерцании экрана, и нет ясного решения. В некоторых публикациях говорится, что это было исправлено в более старых ядрах, чем то, которое я использую – 5.4.0-37.

Мерцание возникает очень случайно и его сложно вызвать, но часто происходит при прокрутке в Firefox, выпадении моего терминала Guake или участии в Zoom-встрече.

Я пробовал множество различных флагов ядра из различных сообщений, которые, по-видимому, указывают на две возможные причины: 1) IOMMU в этом Sandy Bridge i7 или 2) C-состояния и управление питанием. Ничто не исправило проблему надежно. Некоторые из вариантов, которые я пробовал: "i915.enable_rc6=0 i915.semaphores=1 pcie_aspm=force i915.enable_psr=0 i915.edp_vswing=2 intel_iommu=on,igfx_off processor.max_cstate=1 intel_idle.max_cstate=1". В данный момент я использую "i915.enable_rc6=1 i915.enable_fbc=1 i915.powersave=1 i915.modeset=1 i915.lvds_downclock=1", и мерцание все еще происходит. Один из примеров: Flickering screen + CPU pipe B FIFO underrun when I use the termnal

Я заменил материнскую плату в моем X220, и поврежден сетевой интерфейс, так что не исключено, что есть аппаратная ошибка на этой плате, но поскольку он работает в течение разумного времени и второй экран стабилен, я уверен, что это не эта плата. Я не пробовал экран Acer на оригинальной плате, но подключение оригинальной платы к экранам 1080p через DP->HDMI не вызывало проблем. У меня нет другого DP-экрана для тестирования. Я пробовал другой DP-кабель безуспешно. Он также мерцает, если подключен к DP-выходу ноутбука.

Экран не проблема, так как он работает на другом ноутбуке через DP. Я также пробовал подключать экран к X220 через HDMI, что стабильно, но кажется, что максимальное разрешение составляет 1080p, а мне нужны дополнительные пиксели.

Аппаратное обеспечение:

  • Core i7 2620m с 16 ГБ DDR3
  • интегрированная Intel HD Graphics 3000
  • Acer VG270UPbmiipx через DP
  • LG IPS236v через DP->HDMI
  • Lenovo Mini Dock Series 3 Plus USB3.0

Программное обеспечение:

  • Ubuntu 20.04 x64
  • ядро 5.4.0-37
  • Интерфейс Cinnamon на Xorg

Модули ядра:

Module                  Size  Used by
ppp_mppe               16384  2
ppp_async              20480  1
nf_conntrack_pptp      24576  0
nf_conntrack          139264  1 nf_conntrack_pptp
nf_defrag_ipv6         24576  1 nf_conntrack
nf_defrag_ipv4         16384  1 nf_conntrack
binfmt_misc            24576  1
nls_iso8859_1          16384  1
dm_multipath           32768  0
scsi_dh_rdac           16384  0
scsi_dh_emc            16384  0
scsi_dh_alua           20480  0
intel_rapl_msr         20480  0
mei_hdcp               24576  0
intel_rapl_common      24576  1 intel_rapl_msr
x86_pkg_temp_thermal    20480  0
coretemp               20480  0
kvm_intel             282624  0
kvm                   663552  1 kvm_intel
intel_cstate           20480  0
intel_rapl_perf        20480  0
uvcvideo               98304  0
videobuf2_vmalloc      20480  1 uvcvideo
videobuf2_memops       20480  1 videobuf2_vmalloc
snd_usb_audio         262144  1
videobuf2_v4l2         24576  1 uvcvideo
videobuf2_common       49152  2 videobuf2_v4l2,uvcvideo
cdc_mbim               20480  0
joydev                 24576  0
snd_usbmidi_lib        36864  1 snd_usb_audio
snd_rawmidi            36864  1 snd_usbmidi_lib
snd_seq_device         16384  1 snd_rawmidi
iwldvm                237568  0
videodev              225280  3 videobuf2_v4l2,uvcvideo,videobuf2_common
cdc_ncm                36864  1 cdc_mbim
mac80211              843776  1 iwldvm
usbnet                 45056  2 cdc_mbim,cdc_ncm
wmi_bmof               16384  0
mii                    20480  1 usbnet
libarc4                16384  2 ppp_mppe,mac80211
mc                     53248  5 videodev,snd_usb_audio,videobuf2_v4l2,uvcvideo,videobuf2_common
input_leds             16384  0
cdc_acm                40960  0
cdc_wdm                24576  1 cdc_mbim
serio_raw              20480  0
iwlwifi               331776  1 iwldvm
snd_hda_codec_hdmi     61440  1
snd_hda_codec_conexant    28672  1
snd_hda_codec_generic    81920  1 snd_hda_codec_conexant
cfg80211              704512  3 iwldvm,iwlwifi,mac80211
snd_hda_intel          53248  5
snd_intel_dspcfg       24576  1 snd_hda_intel
snd_hda_codec         131072  4 snd_hda_codec_generic,snd_hda_codec_conexant,snd_hda_codec_hdmi,snd_hda_intel
snd_hda_core           90112  5 snd_hda_codec_generic,snd_hda_codec_conexant,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec
thinkpad_acpi         110592  0
snd_hwdep              20480  2 snd_usb_audio,snd_hda_codec
snd_pcm               106496  6 snd_hda_codec_hdmi,snd_hda_intel,snd_usb_audio,snd_hda_codec,snd_hda_core
mei_me                 40960  1
snd_timer              36864  1 snd_pcm
snd                    90112  24 snd_hda_codec_generic,snd_hda_codec_conexant,snd_seq_device,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_usb_audio,snd_usbmidi_lib,snd_hda_codec,snd_timer,thinkpad_acpi,snd_pcm,snd_rawmidi
soundcore              16384  1 snd
mac_hid                16384  0
sch_fq_codel           20480  3
parport_pc             40960  0
ppdev                  24576  0
lp                     20480  0
parport                53248  3 parport_pc,lp,ppdev
ip_tables              32768  0
x_tables               40960  1 ip_tables
autofs4                45056  2
btrfs                1253376  0
zstd_compress         167936  1 btrfs
dm_crypt               40960  1
raid10                 57344  0
raid456               155648  0
async_raid6_recov      24576  1 raid456
async_memcpy           20480  2 raid456,async_raid6_recov
async_pq               24576  2 raid456,async_raid6_recov
async_xor              20480  3 async_pq,raid456,async_raid6_recov
async_tx               20480  5 async_pq,async_memcpy,async_xor,raid456,async_raid6_recov
xor                    24576  2 async_xor,btrfs
raid6_pq              114688  4 async_pq,btrfs,raid456,async_raid6_recov
libcrc32c              16384  3 nf_conntrack,btrfs,raid456
raid1                  45056  0
raid0                  24576  0
multipath              20480  0
linear                 20480  0
hid_logitech_hidpp     40960  0
hid_logitech_dj        24576  0
hid_generic            16384  0
usbhid                 57344  1 hid_logitech_dj
hid                   131072  4 usbhid,hid_generic,hid_logitech_dj,hid_logitech_hidpp
crct10dif_pclmul       16384  1
crc32_pclmul           16384  0
ghash_clmulni_intel    16384  0
i915                 1986560  22
sdhci_pci              53248  0
cqhci                  28672  1 sdhci_pci
ahci                   40960  3
aesni_intel           372736  2
psmouse               155648  0
libahci                32768  1 ahci
i2c_algo_bit           16384  1 i915
i2c_i801               32768  0
lpc_ich                24576  0
sdhci                  65536  1 sdhci_pci
drm_kms_helper        184320  1 i915
syscopyarea            16384  1 drm_kms_helper
crypto_simd            16384  1 aesni_intel
sysfillrect            16384  1 drm_kms_helper
sysimgblt              16384  1 drm_kms_helper
fb_sys_fops            16384  1 drm_kms_helper
cryptd                 24576  3 crypto_simd,ghash_clmulni_intel
glue_helper            16384  1 aesni_intel
drm                   491520  8 drm_kms_helper,i915
e1000e                258048  0
wmi                    32768  1 wmi_bmof
video                  49152  2 thinkpad_acpi,i915

Поскольку это происходит случайно, я не могу точно сказать, является ли это решением, но с новыми ядрами/другими обновлениями, похоже, увеличивающими частоту мерцания, это, кажется, помогло:

https://bbs.archlinux.org/viewtopic.php?pid=1533863#p1533863

Этот драйвер использует SNA в качестве метода ускорения по умолчанию. Вы можете попробовать
переключиться на UXA, если столкнетесь с проблемами. Чтобы сделать это, сохраните файл
с следующим содержанием как /etc/X11/xorg.conf.d/20-intel.conf :

  Section "Device"
    Identifier  "Intel Graphics"
    Driver      "intel"
    Option      "AccelMethod"  "uxa"
    #Option      "AccelMethod"  "sna"
  EndSection

С тех пор как я добавил этот файл и перезагрузил X11, мерцания не было. Надеюсь, это поможет.

Правка: нет, это не решение. Только что произошло еще одно мерцание. Однако, похоже, что частота возникновений уменьшилась.

У меня такая же проблема, как у вас, на моем Thinkpad W520 и аналогичное сообщение об ошибке процессора.

Это аппаратная проблема, так как я пробовал переключиться на Windows 7 и мой экран мерцает так же. Проблема связана с перегревом.

Я увеличил скорость вентилятора до максимума с помощью “Thinkfan,” и теперь у меня редко возникает эта проблема.

У меня была такая же проблема в течение нескольких месяцев, с такими же сообщениями об ошибках. Я использую Fedora 32 с ядром 5.11.22, но проблема была и с предыдущими ядрами. Мой ноутбук – ASUS N55S, и проблема сохраняется даже с чистой копией Ubuntu 20.04.

Я подтверждаю, что проблема связана с перегревом. Я почистил вентилятор процессора, и проблема была сведена к минимуму. Кроме того, служба fancontrol (работает вместе с pwmconfig, предоставленным lm_sensors) имеет проблему, что в моем случае файл “fan1_input” не имеет значения (команда cat по этому файлу показывает ошибку “No such device or address”)…
Поэтому я создал небольшой shell-сервис для более строгого управления вентилятором. Я также создал расширение для оболочки GNOME, чтобы иметь его под контролем в любое время (из-за такой же проблемы с файлом fan1_input стандартные расширения, показывающие статус вентилятора, также не работают в моем случае).

Программа (служба fanASUS и gnome shell) может быть загружена с https://nuvol.cmima.csic.es/owncloud/s/ehzjniK9Ls2hlLx

.

Ответ или решение

Фликеринг экрана и сообщения об ошибках FIFO underrun на графике Intel при использовании DisplayPort являются распространённой проблемой среди пользователей ноутбуков с интегрированной графикой Intel HD Graphics 3000. Проблема, как правило, связана с несовершенствами драйверов и специфическими особенностями аппаратного и программного обеспечения.

Теория

Основной причиной фликеринга экрана и сообщений о сбоях FIFO underrun является, как правило, нехватка или ошибочная обработка данных в линии передачи данных между графическим процессором и монитором. Это может быть связано с управлением энергопотреблением, режимами дисплея и спецификой работы драйвера графического процессора.

Ошибка FIFO underrun означает, что кадровый буфер, который используется для передачи данных к дисплею, не получает данные в достаточной мере. Это может происходить из-за разрыва в передаче данных, вызванного различными факторами, такими как сбои в энергопотреблении, неправильный контроль тепловых режимов или проблемы, связанные с интеграцией между различными компонентами системы.

Примеры

Возьмём случаи, приведенные пользователями с похожими проблемами. Например, когда один экран подключён через DisplayPort, могут наблюдаться фликеры, в то время как второй экран, подключённый через DisplayPort->HDMI, работает стабильно. Зачастую данные обстоятельства указывают на проблемы, связанные с конфигурацией DisplayPort или специфичную работу оборудования с более высоким разрешением (как в случае с Acer VG270UPbmiipx с разрешением 1440p в отличие от LG IPS236v с разрешением 1080p).

Существует множество сообщений о том, что подобные проблемы могут быть связаны с работой подсистем энергосбережения, таких как IOMMU или C-States. Это приводит к тому, что системы иногда не успевают переходить из одного состояния низкого энергопотребления в другое достаточно быстро, что приводит к недозагрузке FIFO и, следовательно, к фликерингу экрана.

Применение

Чтобы минимизировать или устранить данную проблему, следует выполнить несколько рекомендаций:

  1. Обновление драйверов и ядра: Убедитесь, что у вас установлены последние версии драйверов и ядра. Некоторые пользователи сообщают, что обновления решают проблему или уменьшают её частоту.

  2. Конфигурация графического драйвера: Внесение изменений в X11 конфигурацию, переключение режима ускорения с SNA на UXA, хотя и не решило проблему полностью, снизило её частоту. Для этого создайте или отредактируйте файл /etc/X11/xorg.conf.d/20-intel.conf, добавив в него настройку:

    Section "Device"
        Identifier  "Intel Graphics"
        Driver      "intel"
        Option      "AccelMethod"  "uxa"
    EndSection

    Однако учтите, что это может не всегда работать, и снижает производительность.

  3. Управление тепловыми режимами: Поскольку перегрев может способствовать возникновению проблемы, проследите за состоянием системы охлаждения. Очистка вентиляторов и обеспечение адекватного отвода тепла (например, с помощью программного обеспечения thinkfan) может помочь избежать перегрева и, как следствие, уменьшить или даже устранить проявления фликеринга.

  4. Энергопотребление и C-States: Попробуйте изменить параметры ядра для улучшения управления энергопотреблением. Использование таких параметров, как intel_idle.max_cstate=1 и processor.max_cstate=1, может помочь предотвратить переходы в низкие состояния энергопотребления, которые могут вызывать недозагрузки FIFO.

  5. Проверка кабелей и оборудования: Попробуйте различные кабели и конфигурации подключения, чтобы исключить аппаратные неисправности. Убедитесь, что у вас используется высококачественный кабель DisplayPort, который способен стабильно поддерживать высокое разрешение.

  6. Внесение изменений на уровне системы: Проверьте наличие обновлённых конфигураций BIOS или микропрограммного обеспечения, которые могли бы повлиять на работу системы в целом и графического адаптера в частности.

После выполнения вышеуказанных рекомендаций, внимательно мониторьте систему и постарайтесь зафиксировать любые изменения в поведении фликеринга экрана. В случае успешного уменьшения проблемы это может указать на эффективное решение, учитывающее специфические условия и конфигурацию вашей аппаратной и программной среды.

Оцените материал
Добавить комментарий

Капча загружается...