Можно ли обнаружить битовые ошибки в памяти в программном обеспечении? - PullRequest
4 голосов
/ 17 августа 2011

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

Ответы [ 3 ]

5 голосов
/ 17 августа 2011

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

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

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

3 голосов
/ 17 августа 2011

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

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

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

0 голосов
/ 17 августа 2011

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

...