Обновить

MemForge2: загрузочная флешка, которая за минуту говорит — какую планку памяти менять

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели20K
Всего голосов 65: ↑63 и ↓2+73
Комментарии71

Комментарии 71

ЗакрепленныеЗакреплённые комментарии

Простите если не сразу отвечаю, я обязательно читаю все и работаю над исправлениями. Программа совсем сырая, и по хорошему надо было пол годика самому еше потестить. Мне самому много что в ней не нравится, например визуал, но я один, и скорость работы не очень быстрая. Обшими усилиями сделаем нормальную прогу.

схоронил

вот такой вайбкодинг я поддерживаю!

Спасибо.

Так какие кейсы Вам интересны в issues? У меня есть заведомо неисправный комплект ОЗУ, в котором одна плашка сама по себе даже комп до POST экрана не доведет, а вторая полностью исправна. Иногда BIOS вторую плашку видит и говорит, что памяти 16, но доступно будет 8. Что тестить, что сообщать, будет ли от проги какой-то полноценный дамп для анализа сырых данных, помимо log и json?

у меня веселее было. память прекрасно работала во 2м слоте, а в 1м как у вас - глухо висло на подсчёте ОЗУ, ниже описал подробнее.

Все интересно, сейчас гоняю 200 планок ddr3 дали на проверку.

Интересные возможности! Эх, такое бы лет на 10 пораньше.

Однако, не всë так хорошо. По моему опыту, для детекта с надёжностью хотя бы 90% (хотя бы сам факт наличия битой памяти) нужно не менее 15 минут тестов. Для более скоростной памяти может и быстрее. За минуту тоже бывает попадается, но это примерно половина из реально неисправных.

Ещë добавляет ложку дëгтя возможность словить ситуацию, что одна планка работает одна, но не работает в паре с другой такой же (не говоря о разных), и даже по слотам отличаться может - в одном ок, во втором ошибки. При этом другая планка работает во всех слотах. И всякие комбинации подобных случаев. Тут без бубна сложно бывает.

Нужно конечно программу погонять на сотне-другой битых и не битых модулей памяти, тогда можно говорить о надежности инструмента. Это нужно дать на вооружение сервисникам, аникейщикам и админам. Я уже отошел от этих дел, и нет доступа к большому парку ПК, на которых можно было бы погонять софт.

Спасибо. Да случаи бывают такие, что даже нет понимания - почему? В любом случае направление интересное, хотя задача та еще, не будь у меня доступа к различным конфигурациям врядли собрал бы даже просто каркас программы.

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

Выставлять руками по наихудшей? по идее большинство материнок должны справляться сами... или я что-то путаю. Мне просто с таймингами возиться в BIOS'е почти не приходилось вроде.... Или вообще их не трогал, только частоты....

т.к. я в дуал каналы или ставил полностью из одной партии или чаще всего при апгреде совсем не похожие, разные производители, объём, иногда частоты (сбрасывается в биосе до минимальной автоматом обычно) - т.е. речи о дуал канале просто не идёт или внимания на него никто не обращает...

по возможности конечно предпочитал менять сразу полностью, но последние лет 10 такой возможности обычно нет.

Вооот. мой случай как раз ;-)

Еще и тесты все, хоть на 3 часа проходит в "своём" слоте...

Ниже подробности описал - до сих пор кому рассказывал - говорят тест должен показывать был битую планку или материнка с памятью просто несовместимая и повезло что вообще заработало. При этом такой случай на 8+ компов один (одинаковые мать-проц-память были), т.е. о несовместимости говорить сложно.

Что не рекомендованная производителем - понятно, брали то что подешевле не из полного хлама (самсунг, хиникс, патриот, крусиал или кингстон без изысков, кингмакс и его аналоги избегали к счастью)

Интересно, почему биосописатели не встроят расширенеый тест памяти, подобные данному, в платы. Было бы довольно удобно, часто есть картинка платы, можно подсвечивать модуль. А на плате с подсветкой - даже физически.

Разработчики матплат и так куски биоса отключают, ещё на тест тратиться, это же надо флеш биоса брать большего объема, удорожание.

Видимо исходят из того что они делают матплату, а не стенд для проверки памяти

По моему у них там картинки битмапом лежат, памяти давно много.

ага, и управление мышью прикрутили!
<картинка: "Тьфу, срамота" :)>

В продвинутых ноутбуках обычно есть встроенный тест памяти (аналог мемтеста или похожее) и другие. Но конкретную планку не показывают. Скорее сделано из соображения - обнаружили неисправность - отдаëм в сервис. А сам тест разве что убедиться в исправности (если исправно), например, перед продажей в магазине или приëмке после ремонта.

Памяти стало слишком много чтобы так её тестировать. Лучше полагаться на выявление ошибок ECC

Место на флешке биоса жестко лимитировано. Вендорам выгоднее засунуть туда красивую графику со свистелками, чем реально полезные диагностические утилиты

Большинству это просто не нужно. При покупке потребитель должен или купить готовый комп или собирать исходя из рекомендаций к материнке (совместимые память и проц всегда есть на сайте). По моей статистике (более 350 собранных компов на работе за 25 лет) глючная память начиная с DDR1 встречалась мне раза 2 всего, битую планку приносили на разобраться что с компом - виснет всего 1 раз (а это еще штук 50 компов можно плюсануть по знакомым). Вот с SIMM помню чехарда страшная была - подбирали планки под каждый комп индивидуально, особенно глючили на "брендовых" компах, но память не битая была, просто несовместимая. DIMM'ы первые валяются пачкой - может и дохлые есть, не помню особо. Может везёт так. БП, материнки - куча дохлых, а вот процов и памяти почти не было. ЖК моники - БП в нескольких ремониторовали после вспухания кондеров, БП и материнки кондеры пухли, после грозы материнки дохлые видел (одну оживили сняв микруху сетевой карты), просто материнки дохли, иногда по 3 из 8 в течении пары мес, ни до этого лет 5, ни после уже то же лет 5 эти материнки не дохли - возможно какое-то слабое место было, которого не оказалось на остальных той же парти.... Или внешние факторы, которые пропали. Один проц сожгли частично вытащив и так оставили - там вся начинка сдохла тогда (P4), одним (целерон на 370м сокете) повернув на 90 градусов спалили материнку по питанию полностью, сам проц и начинка целы!

Так что память, если не брать скоростную (а я про офисные компы в основном или около офисные - нельзя назвать комп игровым если от офисного его отличает наличие видеокарты и чуть более мощный БП. достаточно живучая штука если брать период DDR1-3. Что там с 4-5 покажет время, да и нет у нас такой сейчас в работе пока.

Так что это будет лишь удорожание материнок, которое большинству не очень нужно.

А еще под тесты памяти вроде раньше специализированные стенды были (не знаю как сейчас).

Вот смотрите - POST карта - штука вроде как не очень сложная, не очень дорогая, можно бы и в материнку встроить? А вот почти не делают это. Частично её функции в BIOS запихнули, на отсутствие памяти например он попищит. А так что бы код ошибки выдавался на экране - пару материнок таких может видел, из очень дорогих серий. Их не покупали - излишнее удорожание за функционал, который нужен может раз в 10 лет будет.... Так что заглохло это.

Если я правильно понял, то сейчас утилита поддерживает DDR3 и DDR4. Скажите, есть-ли в планах поддержка DDR2 ? И ещё интересна поддержка различных серверных типов памяти (ECC и registered).

Также не очень понятно куда можно отправлять отчёты о проверенной памяти.

Спасибо за вопросы.

DDR2 — пока не поддерживается. Технически возможно.
Ecc должно работать как есть. MCA-снимок ловит исправленные single-bit ECC errors из банка контроллера, что собственно и есть та самая «невидимая» проблема которую обычные pattern-тесты пропускают. Не валидировано на ECC-системе, но логика покрывает.

Registered (RDIMM) — не тестировал.

а еще были RIMM ;-) причём кажется в обычной материнке, просто не повезло человеку купить такой раритет.... я её видел. офисный комп.

DDR2 сейчас думаю доживают вместе с материнками последние годы - им около 15-18 лет уже большинству, так что вряд ли будет сильно востребовано...

А где используется еще - обычно не так страшно лишний час на тесты потратить...

Сервера... то же случай не очень частый. Я бы на месте авторов и о необходимости DDR3 задумался - это материнки в основном с 1-2 поколением Corei3 при том что сейчас какое там в производстве? 15 вроде?

А вот DDR5 для новых уже можно подумать - как раз массовость появится....

О, вот это полезняшка! Несколько раз сталкивался с такой проблемой и решал методом научного тыка-вытыка. Спасибо.

Оно ещё и шевелится...
Оно ещё и шевелится...

Что я вижу?

В конце что-то будет или просто вся эта мешанина остановится в случае отсутствия проблем?

Спасибо за фото. Похоже не просто язык — там разрушается именно динамический текст (статика типа “MEMFORGE v0.4” и заголовков таблицы рендерится чисто, а живые поля BW / температура / state ядер плывут). Чтобы починить, поможете прислать:

  1. Файл memforge2.log с USB после прогона (должен лежать в корне флешки)

  2. Файл report.json оттуда же

  3. Модель материнки + CPU + сколько планок RAM

  4. Если меняли quantai.ini — особенно EnableAA= в секции [Display]

Можно завести issue: https://github.com/Paradoxdov/memforge/issues — там удобнее файлы прикладывать.

Разобрался по вашему фото, спасибо за репорт — нашлось два бага:

  1. Layout не помещался на вашем экране (это пофиксил). Тестов в v0.4 стало 14 (добавил L3 Cache Stress и Stride BW), а карточек на 1440p в один столбец уже не влезает — нижние ядра обрезались, метка прогресса [N/14] залезала на CPU08, колонка “MB/s” обрезалась до “MB/”. У меня был автоматический probe который должен был переключать на 2-колоночный layout, но для 1440p он считал что “21 пиксель в запасе — норм”, и фактически на этих 21 пикселях рендерилось ещё ~50 px служебной графики (label Общий прогресс, разделители панелей). Свежий бинарник форсит 2-колоночный layout при ≥13 тестах на любом экране ниже 4K:

1280*1024 экран, никаких 1440.

но сам режим 1024*768 скорее всего.

quantai.ini не применяется: клал в корень флешки и рядом с loader.efi
менял язык в нём, по [L] - меняется.

еще картинки
быстрый тест [2]
быстрый тест [2]
подробности
подробности

О, спасибо за уточнение! Я по фото подумал что у вас 1440p, а оказалось 1024×768 — но это в плюс, у меня в свежем бинарнике как раз есть жёсткое правило: при 14 тестах и высоте экрана <1600 px форсить 2-колоночный layout. На 1024×768 теперь точно сработает.

И на втором скрине у вас всё рендерится чисто: кириллица, WARN-экран, footer — всё ОК. Значит “каша символов” на первом скрине была тем же самым layout overflow (текст карточек писался поверх текста ядер, два слоя глифов наложились → визуально похоже на испорченный шрифт). Так что layout-фикс лечит обе проблемы одним махом, отдельной баги шрифта тут нет.

Кстати — у вас сработал cold/warm boot delta: программа сравнила текущий прогон с прошлым по NVRAM и поймала рост температуры +15 °C. Это та самая фича которую в статье я честно отметил как “пока не подтверждена на реальном кейсе”, так что ваш скрин — её первая боевая валидация. Спасибо за это отдельно.

Про quantai.ini который не применяется — отдельный баг, пофиксил параллельно с layout. Почти наверняка у вас Notepad на Windows сохранил файл с UTF-8 BOM (три байта EF BB BF в начале), мой парсер на них спотыкался и тихо игнорил всё содержимое. Новый бинарник:

  • Тихо пропускает UTF-8 BOM

  • Явно ругается на UTF-16 (“⚠ UNSUPPORTED, save as ANSI / UTF-8 without BOM”) вместо тихого игнора

  • Логирует [INI opened as 'quantai.ini' + [INI] read N bytes чтобы было видно что файл реально прочитался

  • Пробует разные регистры имени (на всякий случай)

Свежий бинарник в Release (тот же URL):

https://github.com/Paradoxdov/memforge/releases/download/v0.4/MemForge2.efi

Или весь bundle: https://github.com/Paradoxdov/memforge/releases/tag/v0.4

Если после обновления [INI] строки в логе всё ещё говорят “not found” или “UNSUPPORTED” — пришлите memforge2.log, гляну ещё. И если получится — киньте сам quantai.ini который вы клали (можно прямо в issue: https://github.com/Paradoxdov/memforge/issues/new), посмотрю в hex что там Notepad натворил.

ИМХО такие вещи как технические тесты, да еще редко применимые - можно и в 1024х768 жёстко загонять или по желанию что-то из растянутых вариантов - но там их к сожалению много, редко кто сильно обидится

но первый - пока еще достаточно часто 17" исп-я в качестве моника для тестового стенда где компы быстро тестят.

делять для кучи разрешений.... не излишняя ли сложность? или современные моники не тянут если разрешение не кратно родному?

@igrblkv, спасибо огромное за дотошный репорт — благодаря вашему логу нашлось 4 разных бага которые я бы сам никогда не выловил:

  1. INI-парсер тихо терял Language= и любой string-value ключ если в строке был inline комментарий типа Language=ru ; ru или en. Это было в моём же дефолтном INI — то есть Language= никогда не работало из конфига ни у кого, я просто не замечал потому что default и no-config совпадали. У вас в логе видно [INI] lang=en хотя стояло ru — это оно.

  2. JSON output показывал мусор в hex полях ("serial":"0000006F0000..." вместо "6F27BF00"). Известный gnu-efi SPrint quirk, был workaround в одном месте кода, в другом — забыл применить.

  3. Cold/warm boot delta печатал ?d вместо чисел — %+d gnu-efi не понимает.

  4. False-positive ⚠ temp rose 26°C в HIST когда предыдущий прогон был коротким (у вас 7 секунд vs текущий 35 минут — peaks несравнимы).

Всё пофикшено в v0.4.1, выпустил отдельный Release:

https://github.com/Paradoxdov/memforge/releases/tag/v0.4.1

Да, с русским языком в Биосе сложно. Спасибо что прислали буду смотреть, почему.

Честно говоря больше интересовала техническая часть, вывод информации надо будет смотреть что убрать, действительно много лишнего.

Толковый проект, спасибо !

Божечки.... Это же какое спасение для меня....(Да, много просто чтобы потестить 2 планки ОЗУ на работоспособность), спасибо.

Это поможет идентифицировать сбойную планку и при разгоне памяти ?

Да, находит сама. После теста выводит:
Параметры тестов не меняются под разгон — алгоритмы (March-C-, TRRespass, Butterfly) одинаково агрессивные на любой частоте. Это сознательно: на OC ошибки появляются раньше (margin меньше), но это свойство самой памяти, а не нашей настройки. Никаких “tuned порогов” под штатные тайминги нет, поэтому ложных срабатываний на OC тоже нет.

А вот было бы круто, если бы оно само пробовало чуть чуть разгонять память, менять тайминги, и проверять стабильность. Даже если бы на прогоны тестов ушло несколько дней, но с автосохранением и возможностью продолжить в любой момент.

Это кстати очень интересная тема, но только для отдельного проекта. Я к сожалению уже завален, основная работа + 2 проекта, тестер памяти не мой основной это для души :) Если кто то подхватит эту тему, то она многим интересна, и я уверен что выполнима.

Разгон памяти сейчас же через BIOS идёт? Или программно можно влезть после старта?

У интел есть Динамик Тюнинг - не пойдёт?
У АМД - не в курсе, но думаю то же уже что-то имеется.

С разгоном всё плохо обычно. Люди разгоняют при комнатной температуре в 20-25 градусов и забыв о разгоне начинают паниковать когда комп летом при +30-32 начинает глючить или вообще перестаёт работать...

Стоит останавливаться на предыдущей ступеньке еще. Т.е. гонится до какой-то частоты, стоит хотя бы немного назад открутить ближе к штатной...

Ну и не забывать что деградация чипов будет выше при разгоне заметно. У знакомых память дохла именно при разгоне. У меня компы офисные - память почти вся жива (99+%) А сейчас там всё стало заметно мельче, диффузия при повышении температуры растёт...

Из интереса попробовал запустить на dell r730 с 1152Гб ddr4(18 по 64Гб), но увидело только 512Гб. Есть какие-то ограничения на максимальный объем?

Если это двухпроцессорник - то память второго не видна будет.
NUMA, interleaving и вот это вот всё.

Спасибо за репорт, нашёл и сразу два бага которые в вашем случае красиво умножились в “512 GB”:

  1. SMBIOS Type 17 — Extended Size триггерился на неправильный маркер.** По спеке SMBIOS любая планка больше 32 GB имеет в поле Size значение 0x7FFF — это маркер “настоящий размер в Extended Size DWORD по offset 0x1C”. Я ошибочно триггерил Extended Size на 0xFFFF (что вообще-то значит “unknown”). На R730 каждая 64 GB планка имеет Size=0x7FFF → у меня попадала в else-ветку → size_mb = 0x7FFF = 32767 MB ≈ 32 GB. Каждая 64-гиговая планка молча уполовинивалась до 32 GB.

  2. MAX_DIMMS=16.** R730 имеет 24 DIMM-слота, у вас 18 заполнено. Я тупо смотрел первые 16, остальные 2 игнорировал. Поднял до 32 (с запасом на dual-socket DDR5 Xeon SP / EPYC).

Математика сошлась: 16 видимых × 32 GB (вместо 64) = 512 GB. Точно ваше число.

Бонусом теперь в логе будет явный warning [SMBIOS] ⚠ more than 32 DIMMs present если кто-то найдёт ещё более экзотическую систему с >32 планками.

Свежий бинарник в Release (тот же URL):
https://github.com/Paradoxdov/memforge/releases/download/v0.4/MemForge2.efi

Если запустите ещё раз — должно показать все 1152 GB. Если интересно — пришлите memforge2.log после прогона, гляну как iMC на R730 раскидал interleave + что MCA скажет на таком объёме. Это нетривиальный кейс, у меня самого такого железа нет под рукой.

Огромное спасибо.

Могу попросить запустить на HP Proliant'е 05 или 06 - много ECC планок разных производителей (все слоты заполнены), пишите только заранее какие отчёты нужны - у нас только один день на обслуживание в неделю и не каждую.

Ну на таких кол-вах можно и половину вытащить на время теста?

Думаю случай очень редкий и автору смысла нет его учитывать скорее всего. Всего не охватишь.

О, уменя как раз есть в чулане старенький десктоп, который грузится через раз, попробую непременно, но он иногда просто пищит несколько раз при включении ошибкой памяти, тут, вероятно, он грузитсья с флешки и не начнёт?

У меня вот какой дилетантский вопрос, совершенно безотносительно памяти. Допустим, я хочу поисследовать одиночные инструкции процессора (там латентность, пропускная способность), либо, скажем глубину предсказателя переходов, пенальти от промахов и т.д.. Я в общем умею это делать и на запущенной ОС, но она мне несколько мешает своими потоками и от прогона к прогону значения "плавают", что ожидаемо и в результате я гоняю тесты несколько раз и смотрю на мнимальные значения. А тут у нас в руках программа, которая грузится без ОС вообще, что хорошего я могу в ней сделать помимо теста памяти? Вот, к примеру, могу ли я навайбкодить исходник, который будет выполнять AVX2 инструкции и смотреть значения RDPMC до выполнения этих инструкций и после?

Про писк** — попробовать стоит, но есть две возможности:

  1. BIOS пищит и зависает на POST — тогда никакой код вообще не запустится, ни наш, ни Windows, ни любой другой. Тестер тут бесполезен — машина не доходит до этапа загрузки USB.

  2. BIOS пищит, но продолжает грузиться (warning а не halt) — тогда наш тестер запустится и скорее всего точнее POST-а покажет где проблема. POST делает быстрый checksum-проход (пара секунд), мы — паттерн-тесты по всему диапазону + per-chip mapping через SPD. Часто POST говорит “memory error” а планку называет неправильную или вообще не называет.

Так что — суйте флешку и пробуйте. Хуже точно не сделаете.

Про микробенчмарки — отличная идея, UEFI для этого реально хорошее место. Не “вместо OS”, а как раз потому что:

  • Нет preemption — никакой scheduler не выдернет вас в середине burst-а

  • Нет TLB shootdown’ов от других процессов

  • Кэш не загрязняется чужими данными

  • Все x86 инструкции доступны (UEFI работает в ring 0 на 99% firmware)

  • MSR-ы пишутся и читаются напрямую через rdmsr/wrmsr

  • Можно поднять CPU в максимальный turbo через HWP и зафиксировать там

  • Timer-прерывания есть, но их частота известная и фиксированная

В MemForge2 уже есть fundation который вам пригодится — гляньте исходник, можно форкнуть и переделать под бенчмарки:

  • rdmsr_safe/wrmsr_safe — обёртки над rdmsr/wrmsr (но “safe” только по названию, на неподдерживаемом MSR замораживает — гардите по g_cpu_vendor)

  • rdtsc_now() + калибровка g_tsc_freq_hz — для перевода циклов в наносекунды

  • try_enable_max_perf() — лифт через IA32_HWP_REQUEST (MSR 0x774) до max-perf P-state, чтобы CPU не сбрасывал частоту

  • MP Services dispatch — пинит код на конкретное логическое ядро (для измерения вне HT-помех)

  • RAPL-сэмплер — параллельно меряет энергию на инструкцию

Для RDPMC + AVX2 конкретно: да, всё работает. Нужно:

  1. Включить CR4.PCE (bit 8) чтобы rdpmc был доступен (CR4 пишется в UEFI без помех)

  2. Запрограммировать IA32_PERFEVTSEL0 (MSR 0x186) — например event=0xC7 umask=0x10 = “FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE” для счёта AVX2 single-precision ops

  3. Включить counter через IA32_PERF_GLOBAL_CTRL (MSR 0x38F) bit 0 = 1

  4. rdpmc → AVX2 burst → rdpmc → разница = retired ops

  5. Параллельно rdtsc для циклов → cycles/op = латентность или throughput (зависит от того есть ли inter-dependency)

Для бранч-предиктора: event 0xC4 umask 0x00 = “BR_INST_RETIRED.ALL_BRANCHES”, umask 0x20 = mispredicts. Гоняете контролируемую последовательность branches с длинной историей, считаете mispredict rate — получаете effective depth.

Для cache miss penalty: event 0x2E umask 0x41 = “LONGEST_LAT_CACHE.MISS”. Можно clflush строку, mfence, rdtsc, доступ, rdtsc — для микро-измерений с гранулярностью одного цикла без OS-noise.

Caveat: некоторые firmware выключают PMU перед запуском EFI app-ов (через IA32_PERF_GLOBAL_CTRL = 0) и оставляют MSR locked через IA32_PERF_CAPABILITIES. Проверяйте сначала чтение MSR 0x38D — если возвращает ненулевые значения, скорее всего PMU доступен. На современных Intel (Skylake+) — почти всегда работает.

Если вайбкодите свою UEFI-апку — берите gnu-efi (как у нас) или EDK2, проще gnu-efi, один файл, make собирает напрямую в .efi. Можете отрезать всё из MemForge2 кроме инициализации + MP services + MSR-обёрток и получить чистый stub для микробенчмарков.

Лицензия MIT — форкайте, ломайте, переделывайте. Если получится что-то интересное — киньте ссылку.

Да вы издеваетесь, вы и на комментарии отвечаете копипастой ллм

Да не, тут норм, в комменте есть "зёрна", я просто сам поленился чутка. Думаю, что я таки даже выполню это упражнение, но не Си, а на Расте, там с uefi-rs вроде не всё так уж сложно.

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

Оказывается чтобы ИИ начал приносить реальную пользу, нужно просто забрать у него клавиатуру и заставить дебажить битую оперативку в подвале сервис-центра)

Этот текст — про MemForge2, UEFI-приложение, чтобы диагностика памяти занимала минуту, а не полчаса. Открытый код, готовый бинарник, флешка на FAT32 — больше ничего не нужно.

Это не про написание текста, это про ии-слоп вместо статьи.

Что интересно в issues:

memforge2.log + report.json с реального железа — особенно где утилита ошиблась (только что нашли AMD Tctl +49°C на Renoir по фидбэку), повисла, или нашла что-то нетривиальное. .json — это и есть структурированный сырой дамп: физ. адрес каждой ошибки, DRAM-coord (банка/ряд/столбец), снапшот t°/W/VID/throttle на момент сбоя, MCA-bank до/после, полный SPD с таймингами, BW-trend. Полный raw-дамп памяти (16+ ГБ на FAT32) не выгрузить — приходится доверять json.

По вашему кейсу:

  • Планка без POST — невидима для MemForge, диагностируется только подстановкой + POST-кодами на плате.

  • Планка “BIOS видит 16, доступно 8” — ровно та задача, под которую писалось. Прогон даст SPD-серийник для гарантии, March-C-/RowHammer/Bit Fade покажут какая половина теряет биты, TestOnlyDimm=N в quantai.ini изолирует тест физическим диапазоном одной планки (идеально на не-interleaved, “на канал” на dual-channel десктопах), MCA-diff поймает тихие ECC-сбои.

Прогоните и пришлите memforge2.log + report.json (обе вместе / только живая) — лучший воспроизводимый тест-кейс.

Да, я не писатель, цель — поделиться инструментом, а не статьёй. Цель статьи - может кому будет полезно, все остальное вторично. Еще позавчера не было планов что то публиковать, на эмоциях выложил, в планах было тупо сделать для себя прогу и все.

да всё норм, нейрослоп отработал, процесс пошёл, я даже простенький .efi собрал уже, вот только qemu чё-то упирается и пока не хочет его подхватывать, а чистую флешку мне лень искать.

А, нет, просто в параметрах накосячил, вот как-то так работает:

qemu-system-x86_64 ^
	-nodefaults ^
    -vga virtio ^
	-device virtio-gpu,max_outputs=1 ^
	-display sdl,gl=on ^
	-m 1024M ^
	-drive if=pflash,unit=0,format=raw,readonly=on,file=OVMF_CODE.fd ^
	-drive if=pflash,unit=1,format=raw,file=OVMF_VARS.fd ^
	-drive file=fat:rw:C:\uefi-test,format=raw,media=disk ^
	-kernel C:\uefi-test\hello_world.efi ^
	-serial stdio

И да, можно на Расте всё сделать.

Приветствую! У меня вот такая картинка. Версия ПО 0.4.15. Монитор Nec PA241w (максимально умеет 1920х1200), подключен по DVI к Asus EAH4350 SILENT-DI-512MD2. С этим можно что-то сделать?

Это явно не 1920*1200, скорее 1024*768, 1366*800 или что-то подобное, если не меньше. Посмотрите какое разрешение используется в меню монитора, если он умеет, конечно.

Спасибо за ответ.
Безусловно, монитор в данном режиме не работает на маскималках. В данном режиме имеет 1280x720@60Hz (проверено через меню монитора).
Если могу еще какие полезные данные предоставить, буду только рад. Пока, пойду на гите скачаю свежую сборку)

Еще одно. Сейчас стоит одна планка памяти и программа определяет корректно. Хотел бы узнать, что имеется ввиду под "покрытие", которое 7675МБ из 8192МБ, или 93,6% от объема модуля? Это проблема с модулем или это то, что резервирует БИОС? Изначально думал это выделено под встройку, но, воткнул дискретку и обозначение не изменилось.

Изначально думал это выделено под встройку, но, воткнул дискретку и обозначение не изменилось.

Что встройке, что дискретке требуется окно в памяти для загрузки-выгрузки в свою локальную память.

Попробуйте в БИОСе поискать Мемори Ремап, Абове 4Г декодинг, РесайзБАР и прочие опции - они как-раз выносят отображаемую память всяких устройств вне диапазона физической.

Но зарезервировано системой или БИОСом всё равно останется, мегабайт 200, плюс-минус, обычно.

Отключил в биосе Memory Remap. Теперь доступно еще меньше) 6779МБ из 8192. В общем, пока не понимаю, что показывает данный параметр.

Т.е. отключили использование памяти за пределами физической.

Включайте обратно и ищите остальные пункты про память, они, обычно, все рядом.

Пример:

вся зарезервированная аппаратно память
вся зарезервированная аппаратно память
и разбор картинки выше
и разбор картинки выше

Здравствуйте! igrblkv ответил правильно — это нормально, не проблема с планкой. Объясню подробнее именно про “покрытие” в моей проге:

“Покрытие 7675 МБ из 8192 МБ” означает сколько физически адресуемой памяти прога смогла протестить. Из объявленных BIOS’ом 8 ГБ примерно 500 МБ занято другими вещами до того как мы вообще начали:

Microcode / SMM / firmware runtime services (~30-50 МБ) Memory-mapped I/O окна для устройств (даже встройка Intel UHD Graphics 770 у вас отдаёт сюда часть, плюс PCIe config space, плюс legacy 640K-1M) ACPI tables, GOP framebuffer, BIOS reserved Эти регионы физически не являются обычной DRAM, доступной приложению — туда нельзя записать байт и прочитать его обратно, там сидят регистры устройств или firmware. Любой UEFI-app, не только мой, увидит примерно 93-99% от заявленного объёма. У вас 93.6% — нормально для платформы LGA1151 с iGPU + dGPU + Resize BAR. Битая планка тут ни при чём — у вас её бы прога нашла как ошибки в адресах, а не как недосчитанные мегабайты.

Про “встройку”: на современных Intel/AMD APU/iGPU физически не выделяет себе DRAM статически — она запрашивает память динамически через UMA (Unified Memory Architecture), забирает только когда нужно для текстур/буфера кадра. Поэтому подключение дискретки не освобождает фиксированный кусок — встройка и раньше “не держала” эти 500 МБ постоянно.

Добрый день! Пофиксили, убрал лишнее.

Спасибо. Версия 0.4.20:
подключение через DVI (1280x720)

Подключение через D-Sub (1024x768):

Я так понимаю, в первом случае, особо ничего уже не поделать)

Не подскажете, что все-таки показывает параметр "покрытие"? Получается ли, что зарезервированное биосом память не тестится?

Про «покрытие».

В данном случае из 16 гигов было доступно и протестировано где-то в районе 10-12 гигов, что не помешало найти 10 ошибок за 20 минут.
Или я совсем тупой и 800Мб х8 - это вообще 6 гигов тестировалось всего???

Если память аппаратно зарезервирована - она не может тестироваться, т.к. всё что в неё запишется попадёт в то устройство, которое отображает свою память в этот участок ОЗУ. И если в случае с видеокартой это приведёт к артефактам на картинке, то с другими железками последствия могут быть и сильно хуже.

Простите если не сразу отвечаю, я обязательно читаю все и работаю над исправлениями. Программа совсем сырая, и по хорошему надо было пол годика самому еше потестить. Мне самому много что в ней не нравится, например визуал, но я один, и скорость работы не очень быстрая. Обшими усилиями сделаем нормальную прогу.

В копилку отдам:

столкнулся с ситуацией на DDR2, когда мем-тест планки проходят обе

если 1я стоит в слоте 1, 2я в слоте 2 (планки одного производителя и одной партии) - комп грузится и работает нормально, мем-тест зелёный.

а если их поменять местами, те 1я в слот 2, 2я в 1й - ВСЁ. комп виснет на моменте подсчёт ОЗУ на старте BIOS'а. Виновата была 2я, если её поменять на любую другую или убрать - 1я или 1я+2я любая - всё работает

если память заменить на любую другую исправную - всё работает.

если 2ю ставим 1й - комп виснет. независимо есть что-то во 2м слоте или нет и что там за планка (пробовал разные ставить).

В общем очень странная планка, которая отказывалась работать в 1м слоте материнке. К сожалению пожалел тогда времени и в другой такой же материнке тестить не стал (компы у нас обычно сериями по 8+ шт одинаковых покупают). Цель была - запустить без сбоев как можно быстрее. В тот раз просто пометил что такой-то комп память местами не менять, а потом уже забылось.

К сожалению сейчас вообще не помню в каком это компе - лет 10 всё работает, не трогаю, компов много, соотв. искать долго. Может и списали уже среди совсем старых.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации