Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135

Битовые утечки при записи данных на диск

06.06.2016, 14:42. Показов 8128. Ответов 119
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня форумчане!
Сорри если оффтоп но... Пишу в консольке на C++ (MSVCE 2010) различные движки по расчетам и тут столкнулся с опасной проблемой.
При записи на диск искажаются данные на один бит, где то один раз на 109 - 1011 данных. Бит просто "теряется" (был 1 стал 0 или наоборот) , соответственно данные уже не верны, что приводит к нулю все проделанную работу.
Из исследованного:
Бит теряется при записи как в поток текстового значения переменных (типа fileout << a[i] << endl;)
Так и при записи в двоичном виде (типа fileout.write(reinterpret_cast<char*>(a),size*sizeof(a[0]));)
Замечено, что данные в памяти верные, т.к. были пойманы моменты при повторном выводе из того же массива все данные были записаны корректно.
Ошибка не зависит от винчестера на который данные были записаны (были записи на 3 различных винта, один из которых рейд массив).
Чаще всего теряется один из старших битов (типа 24-й бит в unsigned long или 24-й в unsigned long long). Других потерянных бит не замечено.
Термин "потерянный" возможно применяю в данном случае не верно. Т.к. заметно искажение только при его инвертировании. Соответственно если был сбой и он вместо 1 записал сбойную 1 - этого я не найду.
Система молчит про контроль целостности данных. Винт тоже. У винтов и рейда все показатели в порядке (блоки не сыпятся, SMART в порядке).

Сталкивался ли кто с подобным? В чем может быть проблема?

В ближайшем будущем хочу переустановить систему и MSVCE 2013. Но не уверен, что система виновата.
Кто что подскажет?
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.06.2016, 14:42
Ответы с готовыми решениями:

ClientDataSet, Blob утечки памяти при записи в файл
столкнулся с такой ситуацией, есть ClientdataSet в котором есть блоб поле, которое я записываю процедурой ниже: Procedure...

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

При закачке игры на жесткий диск пишет "Ошибка при записи на диск"
БЕДА В СЕМЬЕ! В системе 2 жестких диска: первый - 250гб(разбит на 2 раздела), второй - 1тб Так вот, при попытке установить на жесткий...

119
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
11.06.2016, 22:15
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Renji Посмотреть сообщение
Поставить QtCreator с mingw и проверить ошибку в нем.
Ничего не даст, т.к. если проблема аппаратная - ошибка может спрятаться и вылезти потом в другом месте.
Цитата Сообщение от Renji Посмотреть сообщение
Загрузиться с лайв-CD Дебиана, sudo apt-get install qt-sdk в консольке, опять-же проверить все в QtCreator. Сразу уточняю, лайв ставит новый софт в оперативку, на хард он ничего не пишет.
Опять же. Если проблема не исчезнет - это гарантированный результат, если исчезнет - это может ничего не значить.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.06.2016, 00:10
Ещё одно наблюдение. В логах из поста #28 дефектными оказались адреса

Code
1
2
3
4
00000002C4DEA928   Value: 32a4551d must be: 33a4551d
00000002BA107918   Value: 334a8f1b must be: 324a8f1b
000000019EA69918   Value: 0ddcd31b must be: 0cdcd31b
00000001A27BC928   Value: 0c57791d must be: 0d57791d
концовки адресов весьма похожи. Там, где адрес заканчивается на 928, имеем незаконно взведённый 24-й бит, там, где адрес заканчивается на 918, имеем незаконно погашенный 24-й бит. Было бы интересно посмотреть ещё на парочку логов от той программы, сохранится ли там подобная тенденция

Добавлено через 2 минуты
Сразу не заметил лог в 34-м посте (из-за названия Test.zip). Там сия тенденция повторяется

Добавлено через 4 минуты
Зря ты работаешь в большим исходником программы. Его наоборот надо сокращать. В идеале до минимума (т.е. один цикл записи и один цикл проверки)

То, что имеем в печати виртуальные адреса, принципиально ничего не портит. Они отображаются на физические адреса с точностью до страницы (4 килобайт). Т.е. младшие 12 бит виртуального адреса будут совпадать с младшими 12 битами физического адреса

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

Добавлено через 11 минут
Если культурно сократишь тест (выкинешь все conio.h), то его можно будет компилировать не только микрософтовским компилятором. Исправить тест в общем-то сможет любой, но проверить можешь только ты, а потому будет лучше, если ты выложишь нормально сокращённый пример, который скомпилируется в любом компиляторе. А потом тебе народ выдаст бинарники, а ты уже будешь смотреть, что из них падает, а что нет. Посмотрев на код падающих и не падающих бинарников в общем-то тоже можно будет увидеть какие-то закономерности

Добавлено через 1 минуту
Да и тему для порядку надо бы куда-нибудь в низкоуровневое программирование переместить
1
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
12.06.2016, 03:01
Цитата Сообщение от Evg Посмотреть сообщение
При этом закономерность по адресам наблюдается именно в младших 12 битах
В 13-ти. Причем если 13-й бит=1 то 24-й бит - устанавливается, а если 13-й бит=0 - то 24-й - гасится.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.06.2016, 12:34
Даже вон как. Т.е. может быть какая-нибудь ситуация, что на уровне физического проектирования (т.е. транзисторы, конденсаторы) при определённых динамических условиях (типа большой трафик в память на фоне вытеснения записи из конкретного места кэша) и при наличии некоторых статических условий (определённая комбинация бит в шине, передающей адрес или просто значение в регистре) сигнал с какой-то линии одной шины перебивает сигнал на линии другой шины. Такое может быть в том числе и в процессоре в момент выставления заявки на запись в память
1
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
12.06.2016, 13:44
Цитата Сообщение от Evg Посмотреть сообщение
сигнал с какой-то линии одной шины перебивает сигнал на линии другой шины.
Все-таки, мне имхается, что проблема в микрокоде. Если б что-то перебивало на физическом уровне оно б зависело только от конкретных (может соседних? но не зная разводки не сказать) битов. Да и сама система кэша/памяти не может давать такие артефакты (ошибка только при 0x918 или при 0x928, была б зависимость от одного бита, другие были бы рандомными).
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.06.2016, 13:51
Цитата Сообщение от avgoor Посмотреть сообщение
Все-таки, мне имхается, что проблема в микрокоде
Скорее всего в этом случае ошибка бы повторялась стабильно

Цитата Сообщение от avgoor Посмотреть сообщение
Да и сама система кэша/памяти не может давать такие артефакты (ошибка только при 0x918 или при 0x928, была б зависимость от одного бита, другие были бы рандомными)
Ты пытаешься смотреть с уровня логического дизайна, а такие ошибки касаются физического дизайна. Т.е. где и какие элементы расставлены на кристалле, как они расположены друг относительно друга, как друг на друга влияют электромагнитные поля, генерируемые проводниками и т.п.

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

Предметным решением вопроса было бы постепенная замена комплектующих. При условии, что конечной целью является всё-таки построение работающей системы, а не желание схватить за яйца микрософтеров или интеловцев
1
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
12.06.2016, 13:57
Цитата Сообщение от Evg Посмотреть сообщение
Ты пытаешься смотреть с уровня логического дизайна, а такие ошибки касаются физического дизайна. Т.е. где и какие элементы расставлены на кристалле, как они расположены друг относительно друга, как друг на друга влияют электромагнитные поля, генерируемые проводниками и т.п.
...
Цитата Сообщение от avgoor Посмотреть сообщение
(может соседних? но не зная разводки не сказать
Слабо верится, что у амдшников случайно получилось создать активный ПАВ-фильтр (Ну, или на стоячей ЭМ волне) с такими свойствами.
Цитата Сообщение от Evg Посмотреть сообщение
В любом случае мы тут можем только гадать, тем более при постановке диагноза по телефону.
Цитата Сообщение от Evg Посмотреть сообщение
Предметным решением вопроса было бы постепенная замена комплектующих.
+1.

Не по теме:

Можно скинуться ТС-у на новый проц, старый отправить в АМД и забиться на соточку пиво о результатах диагностики:D

1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.06.2016, 14:03
Цитата Сообщение от avgoor Посмотреть сообщение
Слабо верится, что у амдшников случайно получилось создать активный ПАВ-фильтр
Это может попросту быть бракованный экземпляр. Или он поломался в процессе работы. Типа в каком-то конденсаторе было постоянно немного большее напряжение, чем положено, и в конце-концов его пробило. Да мало ли чего там может быть
1
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
12.06.2016, 14:09
UPD: Типичное описание ошибки в микрокоде какое-то такое:
Если через одну команду от MOV EAX [PTR] стоит стоит XOR ECX [PTR] и при этом адрес в ESP делится без остатка на 42, может сброситься какой-то флаг.
Что очень похоже на поведение системы ТС.

Добавлено через 3 минуты
Цитата Сообщение от Evg Посмотреть сообщение
Это может попросту быть бракованный экземпляр
Может, конечно, но очень маловероятно с такими симптомами.
1
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
12.06.2016, 19:15  [ТС]
Был чуть занят, но пока решил по совету Renji попробовать под Live-CD Debian откомпилить и запустить код.
Правда С линуксами знаком настолько поверхностно, что просто не пугаюсь их, но и знаниями не обладаю.
Насколько понял, conio.h и Windows.h необходимо убрать (и все с ним связанное).
Но как корректно тормознуть процесс? Как получить номер ядра и зафиксить процесс на конкретном ядре проца?
Уже скачал 8.4 версию KDE и GNOM. Какой интерфейс лучше грузить?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
12.06.2016, 19:21
Цитата Сообщение от Petrolion Посмотреть сообщение
Как получить номер ядра и зафиксить процесс на конкретном ядре проца?
Гугл №1
Гугл №2
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.06.2016, 19:27
Цитата Сообщение от Petrolion Посмотреть сообщение
Но как корректно тормознуть процесс?
Запускаешь программу в консоли, клавишами ctrl-c прибиваешь

Можно, конечно, и под линуксом смотреть. Но если gcc построит немного другой код и ошибка перестанет проявляться, то твою проблему это всё равно не решит.
1
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
12.06.2016, 19:34
Цитата Сообщение от Petrolion Посмотреть сообщение
Уже скачал 8.4 версию KDE и GNOM. Какой интерфейс лучше грузить?
Лично мне нравится Mate и при переходе на него с Винды никаких проблем возникнуть не должно. Ну, разве что системное меню и часики теперь будут вверху, а не внизу. А вот современный третий GNOME настоятельно не рекомендую - именно под маты в адрес третьего Гнома и появился Mate (форк старого-доброго второго Гнома).
1
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
13.06.2016, 12:51
Что то странное происходит, уже дошли до другой ОС и даже до выбора DE, которая не нужна для проверки. Вроде уже должно быть понятно, что ошибка не программная, по крайней мере не того уровня, на котором вы ищите.
1
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
13.06.2016, 15:35  [ТС]
Toshkarik, сейчас речь идет о смене системы как платформы под которым работает код. Чтобы понять, то ли это битая система, то ли совокупность MS Windows + нестабильное железо. Т.к. при проверке самого железа без MS Win ошибок не возникает.
Renji, mate почему-то не захотел грузиться вообще (sha1 проверен). Гном загрузился. (сейчас под ним) Но вот QT-creator не нашел всех файлов для инсталляции:
Кликните здесь для просмотра всего текста
Err http://http.debian.net/debian/ jessie/main mysql-common all 5.5.47-0+deb8u1
404 Not Found
Err http://http.debian.net/debian/ jessie/main libsvn1 amd64 1.8.10-6+deb8u3
404 Not Found
Err http://http.debian.net/debian/ jessie/main libbotan-1.10-0 amd64 1.10.8-2
404 Not Found
Err http://http.debian.net/debian/ jessie/main qtcreator amd64 3.2.1+dfsg-7
404 Not Found
Err http://security.debian.org/ jessie/updates/main mysql-common all 5.5.47-0+deb8u1
404 Not Found [IP: 212.211.132.32 80]
Err http://http.debian.net/debian/ jessie/main subversion amd64 1.8.10-6+deb8u3
404 Not Found
Err http://security.debian.org/ jessie/updates/main libmysqlclient18 amd64 5.5.47-0+deb8u1
404 Not Found [IP: 212.211.132.32 80]
E: Failed to fetch http://security.debian.org/poo... u1_all.deb 404 Not Found [IP: 212.211.132.32 80]

E: Failed to fetch http://security.debian.org/poo... _amd64.deb 404 Not Found [IP: 212.211.132.32 80]

E: Failed to fetch http://http.debian.net/debian/... _amd64.deb 404 Not Found

E: Failed to fetch http://http.debian.net/debian/... _amd64.deb 404 Not Found

E: Failed to fetch http://http.debian.net/debian/... _amd64.deb 404 Not Found

E: Failed to fetch http://http.debian.net/debian/... _amd64.deb 404 Not Found

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

Где нужно выпрямить руки?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
13.06.2016, 20:03
Цитата Сообщение от Petrolion Посмотреть сообщение
Где нужно выпрямить руки?
Лайв просит старые версии программ (какие были в момент выхода 8.4), репозиторий пытается отдать новые (какие сейчас в 8.5).
Выполнить sudo apt-get update;sudo apt-get upgrade (качает обновления) или брать 8.5 лайв. 8.5 лайв только сейчас проверил, работает.

Добавлено через 8 минут
UPD И да, проверил как QtCreator работает под Гномом - ну работать то он работает, но Гном как-то странно работает с окнами запущенных программ. Почему-то их удается найти только через alt+tab, а не через список открытых окон вверху (еще раз убеждаюсь что правильно с Гнома свалил).
1
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,468
14.06.2016, 13:57
Petrolion, у меня ваш код из поста Битовые утечки при записи данных на диск крашит выбрасывая исключение std::bad_alloc видимо машина хилая)
1
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
14.06.2016, 14:17  [ТС]
vxg, в релизе поставьте платформу x64. В коде 8 гиг оперативы съедается. Чтобы уменьшить - строчку int n = 1<<30; измените на значение поменьше. Например int n = 1<<29; (4 гига) или int n = 1<<28; (2 гига).
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,468
14.06.2016, 14:25
Petrolion, я собираю через mingw64 g++ так как ваша сборка зависит от DLL студии. у меня 4 оперативы и 4 подкачка. видимо все отдать не может) попробую уменьшить
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
14.06.2016, 14:28
Цитата Сообщение от Petrolion Посмотреть сообщение
В коде 8 гиг оперативы съедается
Сократи код. Может проблема проявляется задолго до 8 гигов. Типа того, что если поставить полгига, то тоже проявится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.06.2016, 14:28

При закачке игры на жесткий диск пишет "Ошибка при записи на диск"
В системе 2 жестких диска. Так вот, при попытке установить на жесткий диск игры со стима пишет &quot;Ошибка при записи на диск&quot;,...

Измерить скорость чтения и записи данных на диск
Определить скорости чтения и записи блока данных доступных для чтения и записи логических дисков. Провести 4 эксперимента (для чтения) -...

Ошибка при записи на диск
Здравствуйте, у меня возникла проблема с жесткими дисками. Многим известна игровая платформа Steam. Недавно я обновлял одну из своих...

Ошибки при записи на DVD диск
Помогите, пожалуйста, разобраться со следующей ситуацией. Занимался записью iso-образов на DVD диск, для записи использовал программу...

Жесткий диск тормозит при записи на него
У меня есть старый компьютер с процессором Celeron 1700 MHz. Выпуска начала 2000-х. Это мой первый компьютер, сейчас он используется для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Администрация Хабра удаляет новые алгоритмы, которые не западно ориентированной философии кода, без уведомлений и объяснений.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru