
Тестирование памяти видеокарт AMD с помощью скриптов direct-mem-test и dmgg
При поиске неисправностей видеокарт Nvidia большую помощь оказывает набор сервисных утилит MODS (Modular Diagnostic Software), в особенности программа MATS, позволяющая производить поиск неисправных чипов видеопамяти.
Для видеокарт AMD при решении проблем с видеопамятью можно использовать программу tserver, а также скрипт direct-mem-test.py, написанный Василием Галкиным (репозиторий на Github под названием galkinvv) и/или скрипт dmgg.py от разработчика под ником crimfell.
В данной статье рассматривается практическое использование скриптов direct-mem-test.py и dmgg.py на примере видеокарт AMD Radeon с немного «ужаренной» видеопамятью.
Что такое скрипт для проверки видеопамяти и зачем он нужен?
Скрипт представляет собой набор команд для операционной системы Linux, с помощью которого производится тестирование работы VRAM у видеокарт.
Последовательность команд, выполняемая в соответствии со скриптом direct-mem-test (dmgg.py) позволяет провести тестирование видеокарт от любого производителя, включая AMD и Nvidia. Тем не менее, для видеокарт Nvidia все же лучше использовать программу MATS, так как она имеет улучшенный функционал в сравнении со скриптами.
Скрипт direct-mem-test.py доступен на Github, а dmgg.py – на форуме vlab (там требуется регистрация и особый статус пользователя). Кроме того, оба скрипта можно скачать на Google-диске:
Чтобы использовать функционал любого скрипта, нужно вставить его исходный код в файл, например, с названием direct-mem-test.py, сделать его исполняемым, после чего можно запускать проверку видеокарт.
Скриншот части страницы с исходным кодом скрипта direct-mem-test:
Информация, полученная в результате выполнения диагностических скриптов, может помочь в поиске неисправных банок памяти на видеокарте. Обычно они выходят из строя из-за перегрева, которому подвергаются видеокарты с сильно загрязненной системой охлаждения или при нещадном майнинге. О наличии проблем с видеопамятью или контроллером памяти в GPU обычно свидетельствуют вертикальные артефакты на экране дисплея, подключенного к проблемной видеокарте. При этом операционная система Windows в диспетчере устройств выдает ошибку 43.
Убитая майнингом при высокой температуре VRAM на видеокарте AMD Radeon RX 470 с 8GB памяти выдает «веселую» картинку даже при инициализации компьютера:
Как использовать скрипт проверки микросхем памяти видеокарт?
Для запуска скрипта direct-mem-test можно использовать любой дистрибутив Linux, например, xubuntu 18.04. Они работают на компьютере, работающем как в консольном, так и графическом режиме.
При проверке полуживых видеокарт нужно использовать консольный режим работы, так как наличие проблем с памятью/GPU обычно не позволяет воспользоваться графическим окружением. При этом, если в системе имеется неисправная видеокарта, загрузка останавливается на каком-то из этапов, при этом сохраняется возможность работать в терминале. В этом случае перед использованием скрипта нужно настроить BIOS материнской платы так, чтобы основной при загрузке компьютера была встроенная в процессор, либо другая, заведомо исправная видеокарта.
После загрузки системы нужно узнать, какое адресное пространство памяти выделено для нее операционной системой.
Для этого (после загрузки системы и входа в нее) в терминале вводят команду:
lspci -v
а затем находят адрес, соответствующий наибольшему PCI-E BAR (Base Address Register) ремонтируемой видеокарты. При поиске информации о нужной видеокарте в консольном режиме (в терминале) можно воспользоваться кнопками PageUp-PageDown вместе с нажатой кнопкой Shift.
Пример информации о видеокарте, отображаемой по команде lspci с ключом v:
06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (rev ef) (prog-if 00 [VGA controller]) Subsystem: ASUSTeK Computer Inc. Ellesmere [Radeon RX 470/480/570/580] Flags: bus master, fast devsel, latency 0, IRQ 41 Memory at b0000000 (64-bit, prefetchable) [size=256M] Memory at 50000000 (64-bit, prefetchable) [size=2M] I/O ports at 9000 [size=256] Memory at 50200000 (32-bit, non-prefetchable) [size=256K] Expansion ROM at 50240000 [disabled] [size=128K] Capabilities: <access denied> Kernel driver in use: amdgpu Kernel modules: amdgpu
В данном случае отображена информация о видеокарте AMD Radeon RX 574, которой присвоен шестой номер шины PCI-E с 64-битным адресным пространством с адресом b0000000 (для size=256M).
Чтобы запустить проверку этой памяти скриптом direct-mem-test.py, из каталога, в котором он находится, выполняют команду
sudo python3 ./direct-mem-test.py b0000000 10
где 10 – это объём тестируемой видеопамяти, мегабайт.
Для проверки обычно достаточно нескольких мегабайт, чем больше памяти тестируется, тем дольше происходит проверка.
По окончанию проверки скрипт выдаст информацию о сбойных байтах, а также адреса, в которых возникает ошибка (эти данные можно использовать для поиска неисправной микросхемы), например:
sudo ./direct-mem-test.py b0000000 10 first error detected at 0x0 \xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff patterns sorted by error count: ... Address diffs: 0x224 0x1 0x1f2 0xba 0xa3 0x3c 0x117 0x25 0x10d 0x19 0x2ba 0x2f 0x64 0x393 0xb7 0x176 0x36e 0x1d9 0x3c First address for 0b10111011: 0x17 Address diffs: 0x7d 0x14d 0x8e 0x139 0xcc 0x3c 0x45 0x24 0xe0 0x3b 0x89 0xd2 0xf9 0x17 0x3e 0x13c 0x15f 0xee 0x1f First address for noerr_big+: 0x0 Address diffs: First address for total: 0x0 Address diffs: 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x1 Total bytes tested: 4*2621440 rand total errors count: 10444500 - every 1.003950404519125 OK: 41260 Bit error numbers: 5241983, 5245280, 5241629, 5240126, 5242356, 5243139, 5242201, 5243584 max-avg= 3134.5714285718277 different errors patterns count: 255 Before errors, following passed: [] Traceback (most recent call last): File "./direct-mem-test.py", line 121, in <module> run_test() File "./direct-mem-test.py", line 117, in run_test verify_no_errors_with_data(bytes(random.getrandbits(8) for i in range(len(phys_arr))), "rand") File "./direct-mem-test.py", line 97, in verify_no_errors_with_data raise Exception("ERRORS found in test " + test_name) Exception: ERRORS found in test rand
Теперь можно найти неисправную микросхему, воспользовавшись информацией об адресах, в которых найдены проблемы.
Число 1.003950404519125 из строки
rand total errors count: 10444500 – every 1.003950404519125 OK: 41260
соответствует количеству неисправных банок памяти. Оно равно количеству чипов VRAM видеокарты, деленному на это число (в данном случае 8/1=8 банок/каналов памяти).
На исправной видеокарте скрипт выдаст сообщение:
Before errors, following passed: ['rand']
Более удобный функционал имеет скрипт dmgg.py.
Проверка видеокарт с помощью скрипта dmgg.py
Кроме direct-mem-test.py, при проверке можно использовать более совершенный скрипт dmgg.py от программиста Crimfell, который может достоверно отображать количество сбойных микросхем памяти, а также давать ориентировочную (требующую проверки) информацию об их номерах (указывать на неисправный канал памяти).
Запуск скрипта dmgg.py выполняется аналогично direct-mem-test.py, только в командной строке меняется его название, а также добавляется цифра, обозначающая количество микросхем памяти, установленных на видеокарте, например: sudo python3 ./dmgg.py b0000000 2 8
где 2 – это объём проверяющихся мегабайт памяти, а 8 – количество микросхем памяти, распаянной на плате видеокарты.
Пример информации, которую выдает скрипт dmgg.py при проверке видеокарты AMD Radeon RX478 с одной проблемной банкой памяти (седьмая или восьмая):
Possible GPU address: e0000000 f0000000 c0000000 d0000000 a0000000 b0000000 80000000 90000000 60000000 70000000 40000000 50000000 number of chips is set to: 8 This test is working to detect bad chips. Warning it can give wrong faulty chip number ; only the amount of faulty chips will be good count the chips counter-clockwise from right to left with pcie near you chip 7 and/or 8 is faulty at address: 543424 number of faulty chips= 1 Total bytes tested: 4*524288 Total errors count: 32 - every 63550.06060606061 OK: 2097120 Usage: python3 ./dmmg.py b0000000 1 16 Script file dmmg.py is on root of the USB if you need to edit ; run lspci -v to find address of your ati card default is b0000000 1 is 1MB of memory 16 is the number of memory chips from the card
С большой степенью вероятности неисправны микросхемы памяти 7 и/или 8, их можно найти согласно нумерации, приведенной на изображениях ниже (счет идет против часовой стрелки, начиная от микросхемы, которая расположена ближе всего к слоту PCI-E).
Расположение чипов памяти на платах видеокарт Nvidia:
Расположение чипов памяти на платах видеокарт AMD:
Если видеокарта полностью исправна, скрипт выдает сообщение No faulty chips found, а также другую полезную информацию:
Текстовая информация, отображаемая об исправной видеокарте скриптом dmmg.py:
Possible GPU address: e0000000 f0000000 c0000000 d0000000 a0000000 b0000000 80000000 90000000 60000000 70000000 40000000 50000000 number of chips is set to: 8 This test is working to detect bad chips. Warning it can give wrong faulty chip number ; only the amount of faulty chips will be good count the chips counter-clockwise from right to left with pcie near you No faulty chips found number of faulty chips= 0 Total bytes tested: 4*2097152 Total errors count: 0 - every 8388608.0 OK: 8388608 Usage: python3 ./dmmg.py b0000000 1 16 Script file dmmg.py is on root of the USB if you need to edit ; run lspci -v to find address of your ati card default is b0000000 1 is 1MB of memory 16 is the number of memory chips from the card
Заключение
Скрипты для проверки видеокарт AMD могут значительно облегчить процесс поиска неисправностей, связанных с микросхемами памяти.
Их использование весомо сужает направление поиска проблемной микросхемы (или микросхем), а также дает возможность достоверно оценить состояние VRAM б/у видеокарт.

