Відповіді:
Відповідь "так", і це робиться прозоро (за умови, що у вас є пам'ять ECC для виявлення помилок, а версія вашого ядра становить щонайменше 2.6.30, щоб продовжувати безпечно працювати).
В основному, ваша пам'ять перевіряється при кожному прочитанні з процесора та періодично очищається *, щоб перевірити на відповідність кодам виправлення помилок (ECC). Якщо сталася помилка, ви отримуєте виняток машинного перевірки, який потім реєструється та захоплюється mcelog ( http://www.mcelog.org/ ).
Якщо ваша помилка була виправлена, вона збільшує лічильник "протікаючого відра", що призводить до того, що фізичний DIMM, який не надто часто може бути прозоро замінений на інший. Таким чином, сторінка вашої пам’яті скопіюється в нове місце, ваша адреса віртуальної пам’яті оновлюється, щоб вказувати на нову сторінку, а стара сторінка позначається ОС як більше не використовується.
Це називається "нестабільне замовлення" в Linux (а вибуття сторінки пам'яті на Solaris, я не знаю про інші ОС).
Якщо ваша помилка не була виправлена, трапляється те, що називається "жорстким складанням", тобто ваша сторінка пам'яті видаляється із звичайного управління пам'яттю операційної системи, і ваш додаток вбивається (Примітка: деяким комерційним сигналом SIGBUS, який підказує, де помилка трапилася, але це досить рідко, щоб не хвилюватись і намагатися її вловити). Якщо сторінка вашої пам’яті відображена з файлу та очищена, ОС також може прозоро перезавантажити її в іншому фізичному місці, а не вбивати процес.
Ви можете прочитати більше на mcelog, є безліч варіантів конфігурації, ви можете отримати інші способи поведінки, які можна запустити, параметри та інші підказки щодо того, що читати та як переконатися, що mcelog працює у вашій системі.
* Прокручування, або "Патрульне очищення", полягає у читанні пам'яті, перевірці її на помилку ECC та перезаписі виправлених слів пам'яті, коли виявлена помилка. Термін «патрульний обчислювач» використовується протиставленням запису неправильних даних про помилки читання в пам'яті, що іноді називають «витребуванням попиту». Вичищення - це апаратна процедура, яку можна ввімкнути, як правило, через BIOS.
Це насправді погана ідея. Пам'ять не може бути надійно перевірена за допомогою швидкого розгортання. Ось чому програмне забезпечення, наприклад memtest86, використовує кілька тестів з різними бітовими малюнками для тестування пам'яті. Рішення:
Перевірте пам'ять з memtest86 , бажано, довгий тест, залиште його протягом ночі, це займе багато часу.
Якщо виявлена погана пам'ять, використовуйте memmap
параметр ядра, щоб змусити ядро не використовувати цю пам'ять:
memmap = nn [KMG] $ ss [KMG] [KNL, ACPI] Позначити конкретну пам'ять як зарезервовану. Область пам'яті, яка буде використовуватися, від ss до ss + nn. Приклад: Виключіть пам'ять із 0x18690000-0x1869ffff memmap = 64K $ 0x18690000 або memmap = 0x10000 $ 0x18690000
Крім того, ви можете використовувати пам'ять ECC, яка виправить 1-бітні помилки та автоматично виявить 2-бітні помилки у вашій пам'яті (і ви отримаєте повідомлення з ядра про нерегульовані проблеми з пам'яттю, якщо вони трапляться)
Повідомлення та відповідь неправильно зрозуміли питання. Прокручування пам’яті призначена для запобігання виправленим однобітовим помилкам від перетворення у непоправні подвійні помилки. Прокручувач - це лише вся фізична пам'ять (змушує кеш пропускати це) періодично. Якщо є якісь одні бітові помилки, вони будуть виправлені (і виправлення має переписати правильне значення за допомогою порівняння та заміни), очистивши таким чином помилку.
В іншому випадку, якщо в слові, в якому вже є одна помилка, трапиться друга помилка, все слово буде невиправленим, і ОС доведеться зробити щось кардинальне.
Вимивання важливо, оскільки без нього пам'ять, яку читають, але не записують (як кодові сторінки), можуть накопичувати помилки з часом.
Якщо у вас є пам'ять ECC, ви можете ознайомитись детальніше з https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edac . (Я вважаю "sdram_scrub_rate" особливо цікавим.)
(Якщо це посилання в якийсь момент перерветься (воно справді не повинно), я б запропонував завантажити відповідну документацію для Linux і знайти "скраб".