Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.87
Petrolion
24 / 24 / 7
Регистрация: 02.02.2016
Сообщений: 124
#1

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

06.06.2016, 14:42. Просмотров 3035. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2016, 14:42     Битовые утечки при записи данных на диск
Посмотрите здесь:

Как заставить ресурс работать без записи на диск? C++ Builder
C++ Напишите функции записи данных в файл, чтения данных из файла
Visual C++ Утечки памяти
C++ Builder Утечки памяти...
Утечки памяти C++
C++ Ошибка при записи данных в файл
C++ Builder Составить программу для ввода данных о студентах, проживающих в общежитии, и записи этих данных в файл
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
avgoor
840 / 482 / 107
Регистрация: 05.12.2015
Сообщений: 1,375
11.06.2016, 22:15     Битовые утечки при записи данных на диск #41
Цитата Сообщение от Renji Посмотреть сообщение
Поставить QtCreator с mingw и проверить ошибку в нем.
Ничего не даст, т.к. если проблема аппаратная - ошибка может спрятаться и вылезти потом в другом месте.
Цитата Сообщение от Renji Посмотреть сообщение
Загрузиться с лайв-CD Дебиана, sudo apt-get install qt-sdk в консольке, опять-же проверить все в QtCreator. Сразу уточняю, лайв ставит новый софт в оперативку, на хард он ничего не пишет.
Опять же. Если проблема не исчезнет - это гарантированный результат, если исчезнет - это может ничего не значить.
Evg
Эксперт CАвтор FAQ
17304 / 5552 / 347
Регистрация: 30.03.2009
Сообщений: 15,112
Записей в блоге: 26
12.06.2016, 00:10     Битовые утечки при записи данных на диск #42
Ещё одно наблюдение. В логах из поста #28 дефектными оказались адреса

Код
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 минуту
Да и тему для порядку надо бы куда-нибудь в низкоуровневое программирование переместить
avgoor
840 / 482 / 107
Регистрация: 05.12.2015
Сообщений: 1,375
12.06.2016, 03:01     Битовые утечки при записи данных на диск #43
Цитата Сообщение от Evg Посмотреть сообщение
При этом закономерность по адресам наблюдается именно в младших 12 битах
В 13-ти. Причем если 13-й бит=1 то 24-й бит - устанавливается, а если 13-й бит=0 - то 24-й - гасится.
Evg
Эксперт CАвтор FAQ
17304 / 5552 / 347
Регистрация: 30.03.2009
Сообщений: 15,112
Записей в блоге: 26
12.06.2016, 12:34     Битовые утечки при записи данных на диск #44
Даже вон как. Т.е. может быть какая-нибудь ситуация, что на уровне физического проектирования (т.е. транзисторы, конденсаторы) при определённых динамических условиях (типа большой трафик в память на фоне вытеснения записи из конкретного места кэша) и при наличии некоторых статических условий (определённая комбинация бит в шине, передающей адрес или просто значение в регистре) сигнал с какой-то линии одной шины перебивает сигнал на линии другой шины. Такое может быть в том числе и в процессоре в момент выставления заявки на запись в память
avgoor
840 / 482 / 107
Регистрация: 05.12.2015
Сообщений: 1,375
12.06.2016, 13:44     Битовые утечки при записи данных на диск #45
Цитата Сообщение от Evg Посмотреть сообщение
сигнал с какой-то линии одной шины перебивает сигнал на линии другой шины.
Все-таки, мне имхается, что проблема в микрокоде. Если б что-то перебивало на физическом уровне оно б зависело только от конкретных (может соседних? но не зная разводки не сказать) битов. Да и сама система кэша/памяти не может давать такие артефакты (ошибка только при 0x918 или при 0x928, была б зависимость от одного бита, другие были бы рандомными).
Evg
Эксперт CАвтор FAQ
17304 / 5552 / 347
Регистрация: 30.03.2009
Сообщений: 15,112
Записей в блоге: 26
12.06.2016, 13:51     Битовые утечки при записи данных на диск #46
Цитата Сообщение от avgoor Посмотреть сообщение
Все-таки, мне имхается, что проблема в микрокоде
Скорее всего в этом случае ошибка бы повторялась стабильно

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

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

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

Не по теме:

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

Evg
Эксперт CАвтор FAQ
17304 / 5552 / 347
Регистрация: 30.03.2009
Сообщений: 15,112
Записей в блоге: 26
12.06.2016, 14:03     Битовые утечки при записи данных на диск #48
Цитата Сообщение от avgoor Посмотреть сообщение
Слабо верится, что у амдшников случайно получилось создать активный ПАВ-фильтр
Это может попросту быть бракованный экземпляр. Или он поломался в процессе работы. Типа в каком-то конденсаторе было постоянно немного большее напряжение, чем положено, и в конце-концов его пробило. Да мало ли чего там может быть
avgoor
840 / 482 / 107
Регистрация: 05.12.2015
Сообщений: 1,375
12.06.2016, 14:09     Битовые утечки при записи данных на диск #49
UPD: Типичное описание ошибки в микрокоде какое-то такое:
Если через одну команду от MOV EAX [PTR] стоит стоит XOR ECX [PTR] и при этом адрес в ESP делится без остатка на 42, может сброситься какой-то флаг.
Что очень похоже на поведение системы ТС.

Добавлено через 3 минуты
Цитата Сообщение от Evg Посмотреть сообщение
Это может попросту быть бракованный экземпляр
Может, конечно, но очень маловероятно с такими симптомами.
Petrolion
24 / 24 / 7
Регистрация: 02.02.2016
Сообщений: 124
12.06.2016, 19:15  [ТС]     Битовые утечки при записи данных на диск #50
Был чуть занят, но пока решил по совету Renji попробовать под Live-CD Debian откомпилить и запустить код.
Правда С линуксами знаком настолько поверхностно, что просто не пугаюсь их, но и знаниями не обладаю.
Насколько понял, conio.h и Windows.h необходимо убрать (и все с ним связанное).
Но как корректно тормознуть процесс? Как получить номер ядра и зафиксить процесс на конкретном ядре проца?
Уже скачал 8.4 версию KDE и GNOM. Какой интерфейс лучше грузить?
nonedark2008
820 / 578 / 111
Регистрация: 28.07.2012
Сообщений: 1,543
12.06.2016, 19:21     Битовые утечки при записи данных на диск #51
Цитата Сообщение от Petrolion Посмотреть сообщение
Как получить номер ядра и зафиксить процесс на конкретном ядре проца?
Гугл №1
Гугл №2
Evg
Эксперт CАвтор FAQ
17304 / 5552 / 347
Регистрация: 30.03.2009
Сообщений: 15,112
Записей в блоге: 26
12.06.2016, 19:27     Битовые утечки при записи данных на диск #52
Цитата Сообщение от Petrolion Посмотреть сообщение
Но как корректно тормознуть процесс?
Запускаешь программу в консоли, клавишами ctrl-c прибиваешь

Можно, конечно, и под линуксом смотреть. Но если gcc построит немного другой код и ошибка перестанет проявляться, то твою проблему это всё равно не решит.
Renji
1753 / 1180 / 274
Регистрация: 05.06.2014
Сообщений: 3,398
12.06.2016, 19:34     Битовые утечки при записи данных на диск #53
Цитата Сообщение от Petrolion Посмотреть сообщение
Уже скачал 8.4 версию KDE и GNOM. Какой интерфейс лучше грузить?
Лично мне нравится Mate и при переходе на него с Винды никаких проблем возникнуть не должно. Ну, разве что системное меню и часики теперь будут вверху, а не внизу. А вот современный третий GNOME настоятельно не рекомендую - именно под маты в адрес третьего Гнома и появился Mate (форк старого-доброго второго Гнома).
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
13.06.2016, 12:51     Битовые утечки при записи данных на диск #54
Что то странное происходит, уже дошли до другой ОС и даже до выбора DE, которая не нужна для проверки. Вроде уже должно быть понятно, что ошибка не программная, по крайней мере не того уровня, на котором вы ищите.
Petrolion
24 / 24 / 7
Регистрация: 02.02.2016
Сообщений: 124
13.06.2016, 15:35  [ТС]     Битовые утечки при записи данных на диск #55
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/pool/upda...deb8u1_all.deb 404 Not Found [IP: 212.211.132.32 80]

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

E: Failed to fetch http://http.debian.net/debian/pool/m...b8u3_amd64.deb 404 Not Found

E: Failed to fetch http://http.debian.net/debian/pool/m....8-2_amd64.deb 404 Not Found

E: Failed to fetch http://http.debian.net/debian/pool/m...sg-7_amd64.deb 404 Not Found

E: Failed to fetch http://http.debian.net/debian/pool/m...b8u3_amd64.deb 404 Not Found

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

Где нужно выпрямить руки?
Renji
1753 / 1180 / 274
Регистрация: 05.06.2014
Сообщений: 3,398
13.06.2016, 20:03     Битовые утечки при записи данных на диск #56
Цитата Сообщение от Petrolion Посмотреть сообщение
Где нужно выпрямить руки?
Лайв просит старые версии программ (какие были в момент выхода 8.4), репозиторий пытается отдать новые (какие сейчас в 8.5).
Выполнить sudo apt-get update;sudo apt-get upgrade (качает обновления) или брать 8.5 лайв. 8.5 лайв только сейчас проверил, работает.

Добавлено через 8 минут
UPD И да, проверил как QtCreator работает под Гномом - ну работать то он работает, но Гном как-то странно работает с окнами запущенных программ. Почему-то их удается найти только через alt+tab, а не через список открытых окон вверху (еще раз убеждаюсь что правильно с Гнома свалил).
vxg
Модератор
3023 / 1825 / 190
Регистрация: 13.01.2012
Сообщений: 6,925
14.06.2016, 13:57     Битовые утечки при записи данных на диск #57
Petrolion, у меня ваш код из поста Битовые утечки при записи данных на диск крашит выбрасывая исключение std::bad_alloc видимо машина хилая)
Petrolion
24 / 24 / 7
Регистрация: 02.02.2016
Сообщений: 124
14.06.2016, 14:17  [ТС]     Битовые утечки при записи данных на диск #58
vxg, в релизе поставьте платформу x64. В коде 8 гиг оперативы съедается. Чтобы уменьшить - строчку int n = 1<<30; измените на значение поменьше. Например int n = 1<<29; (4 гига) или int n = 1<<28; (2 гига).
vxg
Модератор
3023 / 1825 / 190
Регистрация: 13.01.2012
Сообщений: 6,925
14.06.2016, 14:25     Битовые утечки при записи данных на диск #59
Petrolion, я собираю через mingw64 g++ так как ваша сборка зависит от DLL студии. у меня 4 оперативы и 4 подкачка. видимо все отдать не может) попробую уменьшить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2016, 14:28     Битовые утечки при записи данных на диск
Еще ссылки по теме:

C++ Builder Избежать утечки памяти при преобразовании строки в массив символов
C++ Утечки памяти при использовании new/delete для двумерных массивов
Утечки при использовании порта завершения и соккетов C++
Битовые операции с разными типа данных C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17304 / 5552 / 347
Регистрация: 30.03.2009
Сообщений: 15,112
Записей в блоге: 26
14.06.2016, 14:28     Битовые утечки при записи данных на диск #60
Цитата Сообщение от Petrolion Посмотреть сообщение
В коде 8 гиг оперативы съедается
Сократи код. Может проблема проявляется задолго до 8 гигов. Типа того, что если поставить полгига, то тоже проявится
Yandex
Объявления
14.06.2016, 14:28     Битовые утечки при записи данных на диск
Ответ Создать тему
Опции темы

Текущее время: 22:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru