Як зробити чорний список правильного неправильного сектору оперативної пам’яті відповідно до індикації помилок MemTest86 +?


28

MemTest86 + (версія, що входить до Ubuntu 13.04) говорить

Failing address: 002f796c48 -    759.5 MB

Що потрібно вказати в memmapпараметрі ядра, щоб обійти цю область?

Я спробував запустити, memtester 770MBі він говорить, що все в порядку, тому не здається, що вказівки MemTest означають помилку в 759,5-м Мб від початку.

Як інтерпретувати цей конфігурацію MemTest для налаштування memmap?

Зараз у мене немає грошей на придбання нової оперативної пам’яті, і помилка, здається, є одиничною, тому, сподіваюся, я можу просто її перемогти.


FWIW, ядро ​​позначатиме певні сторінки як "зарезервовані", якщо воно виявляє поганий сегмент, але здатне відновитись. Чи показує вихід "free -m" потужностей двох для підсумків? Я згадую це як спосіб пояснення, чому пам’ятник не може бачити погану ОЗУ, але memtest86 + може.
Братчлі

Насправді не схожі на сили двох: i.stack.imgur.com/l86L1.png
Іван

На час виявлення помилки (якщо у вас навіть є ecc ram), як правило, вже пізно. Також безкоштовно-я ніколи не повідомляє про рівну силу двох, оскільки біос і ядро ​​резервують деякий баран.
psusi

1
Я мрію купити ноутбук ECC, але ніколи не можу знайти жодних пропозицій, схоже, їх немає.
Іван

Схоже, ядро ​​також printk's, коли воно знаходить погану сторінку (рядок 264-265).
Братчлі

Відповіді:


26

пам'ятка

Існує цей підручник під назвою: Bad Memory HowTo, який обговорює відключення пам'яті через ядро, використовуючи memmapаргумент для ядра. Відповідно до того, як у вас є два варіанти, коли мова йде про memmap:

  • Вимкніть все після поганої пам’яті - (mem=###M option)
  • Вимкніть лише пам'ять про погану пам'ять - (memmap=#M$###M option)

З першим варіантом, якщо запит повідомляє, що в 600 М є погана пам'ять, ви можете відключити ОЗУ з цієї точки аж до кінця ОЗУ за допомогою цього:

 mem=595M

Якщо в 802M і 807M є погана оперативна пам'ять, ви можете відключити 10-метровай розділ оперативної пам’яті, починаючи з 800M так:

memmap=10M$800M

ПРИМІТКА. Це буде в чорному списку через 10М після базової адреси 800М. Після цього слід запустити, memtest86+щоб підтвердити правильність цього аргументу.

BadRAM

Для Ubuntu доступний патч під назвою BadRam. Це дуже добре висвітлено у цій публікації під назвою: BadRAM на сайті спільноти Ubuntu.

Після застосування патча до ядра, використовуючи дані на цій сторінці, ви вносите зміни в налаштування Grub2:

уривок із цього сайту для Grub2

Конфігураційний файл GRUB2 в Natty має рядок для налаштування виключень поганих операційних ядер. Отже, я припускаю, що це кращий спосіб відображення розділу пам'яті, який відображає помилки. Лінія, яку я встановила, була

GRUB_BADRAM = "0x7DDF0000,0xffffc000"

Пропонований спосіб на кожному веб-сайті, який я міг знайти, - це встановити це запуск memtest86 і нехай він показує вам налаштування BadRAM. memtest86 дав мені сторінку речей, які я мав би ввести. Я міг бачити, що всі адреси були в одному 16-блоковому блоці, тому я просто хотів відобразити цей блок 16K поза дією. Ось як я створив правильний запис.

Перший параметр простий. Це основна адреса поганої пам'яті. У моєму випадку я міг бачити, що всі погані адреси були більшими за 0x7DDF0000 і менше 0x7DDF4000. Отже, я взяв початок блоку 16K як свою вихідну адресу.

Другий параметр - маска. Ви ставите 1, де діапазон адрес, який ви хочете, має однакові значення, і 0, де він буде змінюватися. Це означає, що вам потрібно вибрати діапазон адрес таким чином, щоб змінюватись лише біти низького порядку. Дивлячись на мою адресу, перша частина маски проста. Ви хочете почати з 0xffff. Для наступного клювання я поясню з бітовими картами. Я хочу в діапазоні від 0000 до 0011. Отже, маска для badram буде 1100 або шістнадцятковою c. На останніх 3 гризенах потрібно мати всі 0 у масці, оскільки ми хочемо, щоб весь діапазон був відображений. Отже, ми отримуємо загальний результат 0xffffc000.

Після встановлення цього рядка в / etc / default / grub, я запустив sudo update-grub і перезавантажився, і моя погана пам'ять більше не використовувалася. Немає потрібних патчів ядра для відображення поганої пам'яті за допомогою цього методу.

Слідування №1

Переглядаючи сторінку вікіпедії для memtest86 +, у ній зазначено:

уривок зі сторінки вікіпедії Memtest86

Починаючи з Memtest86 2.3 та Memtest86 + 1.60, програма може вивести список поганих RAM-областей у форматі, очікуваному патчем BadRAM для ядра Linux; використовуючи цю інформацію, система Linux може надійно використовувати модуль оперативної пам’яті, навіть якщо вона має кілька поганих бітів. Grub2 здатний подавати цю саму інформацію до незапарваного ядра, не заперечуючи потреби в патчі BadRAM.

Також я натрапив на цю сторінку Gentoo, яка вказала memmap=...шестнадцяткову адресу, щоб ви могли вказати її так:

memmap=5M$0x2f796c48

5M - це лише здогадка, очевидно, що ви можете налаштувати її нижче або вище залежно від того, скільки оперативної пам’яті навколо цього регіону ви хочете / потрібно опустити.

Нарешті, ви можете також вказати розмір у шістнадцятковій формі:

memmap=0x10000$0x2f796c48

Ігнорував би вихід 64 КБ за адресою 0x2f796c48.

Список літератури


"800M - 804M" повинен бути "800M - 810M" Я припускаю ...
Хоке Лагінг

Це може бути, але те, що я написав, теж добре, хоча це викидає більше пам’яті, ніж 4М між 800М до 810М.
slm

1
1. Я знаю про memmapваріант, але питання стосується того, як інтерпретувати memtest86 + вихід. Я наводив конкретний приклад виходу memtest86 + і прошу допомогу в налаштуванні memmap відповідно в цьому конкретному випадку. 2. "Ви повинні запустити memtest86 + після цього, щоб підтвердити правильність цього аргументу." - memtest86 + працює перед ядром ОС, тому я серйозно сумніваюся, що memmapпараметр ядра Linux може вплинути на нього.
Іван

@Ivan, 1. Я подумав, що це очевидно, з огляду на приклади, які я включив, але вам потрібно буде сказати щось на кшталт: memmap=5M$759Mдля вашого конкретного випадку, дані memtest86 + не вдається на рівні 759,5 Мб. 2. Я мав на увазі, що ви також повинні передавати memmap=...параметр memtest86 +. Це було неперевірене / непідтверджене мною, але щось, що ви, можливо, зможете зробити із memtest86 +.
slm

1
Добре, дякую. Я не був впевнений, що означає "002f796c48 - 759,5 МБ" (можливо, це може бути 759,5 мега після адреси 002f796c48 чи щось подібне), і я ніколи не підозрював, що можу передати параметри ядра Linux в MemTest86 + (я думав, що це саме по собі нічого робити з Linux).
Іван

14

Memtest86 + (я використовував 4.20) може виводити формат badram безпосередньо.

  1. Натисніть "c", щоб перейти до діалогу налаштування діалог конфігурації memtest

  2. Потім "4" для "Режим повідомлення про помилки"

    діалог режиму повідомлення про помилки сповіщення

  3. Потім "3" для "Шаблони BadRAM"

Вихід зміниться від списку окремих відмов тесту до серії badram = рядків, кожен з яких містить ще один новий поганий сектор. Оскільки рядки додаються та з’єднуються сусідніми сегментами, ви можете просто запустити тест без голову протягом ночі та використовувати остаточний друкований рядок (хоча якщо у вас дійсно поганий тьмяний сигнал, менш точний формат "5 мегів навколо цієї точки", ймовірно, буде трохи коротшим ).

Кінцевий результат:

Memtest86 + показує вихід Badram


4
Тепер, якщо мені не довелося копіювати це вручну, а замість цього передати його GRUB без повторного введення помилок, це було б фантастично.
Ehtesh Choudhury

8
Що я зробив - сфотографувати його (телефон камери), завантажити його в GIMP, => відтінки сірого => інвертувати => контраст / гамма, потім передати його tesseract ${IMG} stdout.. потім перевірити та виправити рядок перед тим, як вставляти в / etc / default / grub ... Напевно, це знадобилося стільки, скільки вручну
введено

3
Однозначно веселіше, ніж робити це вручну
літаючі вівці
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.