Вопрос или проблема
У меня подключен 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 и, следовательно, к фликерингу экрана.
Применение
Чтобы минимизировать или устранить данную проблему, следует выполнить несколько рекомендаций:
-
Обновление драйверов и ядра: Убедитесь, что у вас установлены последние версии драйверов и ядра. Некоторые пользователи сообщают, что обновления решают проблему или уменьшают её частоту.
-
Конфигурация графического драйвера: Внесение изменений в X11 конфигурацию, переключение режима ускорения с SNA на UXA, хотя и не решило проблему полностью, снизило её частоту. Для этого создайте или отредактируйте файл
/etc/X11/xorg.conf.d/20-intel.conf
, добавив в него настройку:Section "Device" Identifier "Intel Graphics" Driver "intel" Option "AccelMethod" "uxa" EndSection
Однако учтите, что это может не всегда работать, и снижает производительность.
-
Управление тепловыми режимами: Поскольку перегрев может способствовать возникновению проблемы, проследите за состоянием системы охлаждения. Очистка вентиляторов и обеспечение адекватного отвода тепла (например, с помощью программного обеспечения thinkfan) может помочь избежать перегрева и, как следствие, уменьшить или даже устранить проявления фликеринга.
-
Энергопотребление и C-States: Попробуйте изменить параметры ядра для улучшения управления энергопотреблением. Использование таких параметров, как
intel_idle.max_cstate=1
иprocessor.max_cstate=1
, может помочь предотвратить переходы в низкие состояния энергопотребления, которые могут вызывать недозагрузки FIFO. -
Проверка кабелей и оборудования: Попробуйте различные кабели и конфигурации подключения, чтобы исключить аппаратные неисправности. Убедитесь, что у вас используется высококачественный кабель DisplayPort, который способен стабильно поддерживать высокое разрешение.
-
Внесение изменений на уровне системы: Проверьте наличие обновлённых конфигураций BIOS или микропрограммного обеспечения, которые могли бы повлиять на работу системы в целом и графического адаптера в частности.
После выполнения вышеуказанных рекомендаций, внимательно мониторьте систему и постарайтесь зафиксировать любые изменения в поведении фликеринга экрана. В случае успешного уменьшения проблемы это может указать на эффективное решение, учитывающее специфические условия и конфигурацию вашей аппаратной и программной среды.