Возможно ли обнаружить битовые ошибки в памяти в программном обеспечении?

Нам с другом было любопытно, можно ли определить уровень ионизирующего излучения, глядя на количество однобитовых ошибок в памяти. Я провел небольшое исследование и думаю, что большинство ошибок обнаруживаются и исправляются на аппаратном уровне. Есть ли способ обнаружить ошибки в программном обеспечении (скажем, в коде C на ПК)?


person Jack Rogers    schedule 16.08.2011    source источник
comment
Удачи с этим. Вы должны прочитать это xkcd.com/378   -  person Federico klez Culloca    schedule 17.08.2011
comment
Очевидно, Windows может: *** Неисправность оборудования / Позвоните поставщику оборудования для поддержки / NMI: Проверка четности / Ошибка четности памяти / *** Система остановилась ***   -  person Omri Barel    schedule 17.08.2011
comment
Вот действительно интересная история об одном перевернутом бите в памяти: космические лучи/" rel="nofollow noreferrer">web.archive.org/web/20101106122613/http://blog.ksplice.com/2010/   -  person Adam Rosenfield    schedule 17.08.2011


Ответы (3)


Я уверен, что это зависит от архитектуры, на которой вы работаете, но я почти уверен, что в ближайшее время вы не обнаружите в своей памяти ни одной битовой ошибки. Большинство, если не все контроллеры оперативной памяти, должны были реализовать некоторую форму защиты ECC для защиты от редких проблем с битами, которые имеют микросхемы ОЗУ. Память DDR, например, ОЧЕНЬ надежна по сравнению с дерьмовыми носителями, такими как флэш-память, для которых требуется ТРЕБУЕТСЯ количество битов защиты ECC (где-то от 8 до 16 или около того), прежде чем они гарантируют функциональность. Пока у вас есть определенное количество битовых ошибок, плохие биты будут исправлены и, вероятно, не будут зарегистрированы еще до того, как они достигнут уровня программного обеспечения ЦП.

Неявное (незарегистрированное) повреждение данных из-за чего-то такого простого, как ошибка в одном бите, считается огромным «нет-нет» в индустрии хранения, поэтому производитель вашей памяти, вероятно, сделал все возможное, чтобы ваше приложение не увидело это, не говоря уже о том, чтобы заставить вас Смирись с этим!

В любом случае, одним из распространенных способов обнаружения проблем с памятью любого типа является запуск простых циклов сравнения записи в адресном пространстве. Запишите 0 во всю свою память и прочитайте ее обратно, чтобы обнаружить застрявшие строки данных «1», запишите-прочитайте-сравните F с памятью, чтобы обнаружить застрявшие строки данных «0», и запустите рампу данных, чтобы помочь обнаружить проблемы с адресацией. Ширина полосы данных должна регулироваться в соответствии с размером адреса. (например, 0x00, 0x01, 0x02... или 0x0000, 0x0001, 0x0002 и т. д.). Вы можете легко делать такие вещи, используя инструменты для тестирования производительности хранилища, такие как Iometer или аналогичные, хотя это может быть так же легко написать самостоятельно.

person Lncn    schedule 17.08.2011

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

Если вы все же решите продолжить, то очевидный способ проверки — выделить часть памяти, записать в нее значения и прочитать их обратно. Вы хотите следовать достаточно предсказуемым шаблонам, чтобы можно было определить ожидаемое значение без чтения из другой памяти (по крайней мере, если вы хотите изолировать ошибку, а не просто определить, что произошло что-то плохое).

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

person Jerry Coffin    schedule 16.08.2011
comment
Проводить тесты на разных высотах кажется излишним — можно просто поставить все компьютеры в ряд, а источник радия — в один конец ряда. - person Crashworks; 17.08.2011
comment
@Crashworks: я полагаю, это зависит от того, где вы живете. Для меня подъем на высоту быстрее и проще — от моего дома (около 7000 футов) до вершины Пайкс-Пик (14110 футов) меньше часа. - person Jerry Coffin; 17.08.2011
comment
Я думаю, что это хорошее экономическое обоснование использования цеппелинов для модульного тестирования. - person Crashworks; 17.08.2011

Если ошибки настолько часты, что у вас есть шанс их обнаружить, у вас уже будут большие проблемы - ничего не сработает. Или, по крайней мере, вы бы чувствовали, что снова используете Win95. Я подозреваю, что вам понадобится целый центр обработки данных, чтобы иметь возможность измерить такую ​​​​ошибку.

person R.. GitHub STOP HELPING ICE    schedule 16.08.2011