|
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
|
|
Битовые утечки при записи данных на диск06.06.2016, 14:42. Показов 8457. Ответов 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
|
|
| 06.06.2016, 14:42 | |
|
Ответы с готовыми решениями:
119
ClientDataSet, Blob утечки памяти при записи в файл При записи файлов на диск, комптютер выдал ошибку, что данный диск не может дальше использоваться
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|||
| 15.06.2016, 12:11 | |||
|
Добавлено через 1 минуту
1
|
|||
|
|
|
| 15.06.2016, 12:32 | |
Сообщение было отмечено HighPredator как решение
Решение
Правильный подход должен выглядеть так
1. Минимизируем текст и переписываем его на Си. Т.е. в идеале оставляем только цикл записи и цикл проверки. Все внешние функции по минимуму (в идеале malloc и printf вместо new и cout) 2. Из-под компилятора получаем ассемблерный файл. Далее учимся этот файл скармливать компилятору. В итоге мы получили текст программы на ассемблере, в котором зафиксирована требуемая последовательность операций, которая предположительно приводит к возникновению ошибки. Таким образом мы максимально отрезались от конкретной версии компилятора и конкретных его опций. Правда минимальная зависимость всё-таки остаётся (в виде вызовов функций malloc и printf), но скорее всего это роли не играет. В любом случае короткий ассемблерный фрагмент могут посмотреть специалисты на предмет того, мало ли тут есть ошибка в коде (и тогда виноватым следует назначить MSVC) 3. Далее зафиксированный ассемблерным текстом подаёшь в другие windows-компиляторы (ну мало ли там особенности с вызовами функций или передаче управления в main). С большой вероятностью на воспроизводимость ошибки это не повлияет, т.к. вероятнее всего для воспроизведения ошибки актуальной является именно последовательность команд 4. Дальше уже можно проводить эксперименты более мелкого уровня. Отдавать этот ассемблерный текст людям, запускать его под другими ОС и т.п. В каждой ОС могут быть свои особенности работы со страницами памяти. Из того, что под другой ОС ошибка не воспроизводится по прежнему никак не следует, что другая ОС работает лучше. Проблема может быть в динамической ситуации, которая наводится особенностями работы со страницами памяти в исходной ОС (типа того, что виртуальные страницы в определённом порядке отобразились на физические страницы)
3
|
|
|
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
|
||
| 15.06.2016, 12:36 [ТС] | ||
|
0
|
||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 15.06.2016, 12:41 | |
|
Petrolion, ну у них там плохо все с микрокодами, фиксы были только критические. Вроде, в 10 с этим дела обстоят получше.
1
|
|
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 15.06.2016, 12:47 | ||
|
Добавлено через 53 секунды Например: https://support.microsoft.com/en-us/kb/2818604
1
|
||
|
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
|
|
| 15.06.2016, 12:52 [ТС] | |
|
Evg,
1. На голом С не работал, но сделаю. (Не помню в MSVS есть ли чистый С) 2. Не пробовал получать ассемблерный код, но думаю тоже справлюсь. Но вот осилить этот массив кода потом - тут вера в себя уже не так крепка. 3. Пробовал свой код на другой машине. Правда с уменьшением размера памяти. Работало без проблем. Из чего сделал догадку, что чисто MSVC возможно не при чем. 4. Это уже слишком большое изыскание. Я и так злоупотребил вниманием сообщества. Если выясниться что виновата система (не в чистом виде, а в силу покоробленности какой то части ее кода) и лечится это простой ее переустановкой. Думаю этого будет уже достаточно для меня (и возможно как мой опыт для других), что не стоит терять недели на поиск багов. Достаточно потерять день на полную переустановку всего. Искать, что именно скривило в системе, не буду (я не на зарплате бетатестера Microsoft). Но это тоже опыт. Надеюсь кому-нибудь он может пригодиться.
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||
| 15.06.2016, 12:52 | ||
|
И я не увидел связь процитированной части с Вашим сообщением.
1
|
||
|
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
|
|
| 15.06.2016, 12:54 [ТС] | |
|
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 15.06.2016, 13:15 | |
|
avgoor, я к тому, что в окнах до 10, обновление микрокода редко происходили. Только если прям что то серьезное, ну или может быть просто для галочки. Недавно был случай с 8.1 на моей машине. Процессор не новый, sandy-bridge-e, 3930k. В BIOS микрокод был ревизии 0x705, винда обновила его до 0x70D. В то время, как последняя ревизия была 0x710. Причем датирована началом 13 года вроде.
1
|
|
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|||
| 15.06.2016, 13:18 | |||
|
А вообще. У меня была только одна видяшка radeon. После нее я поклялся, что больше никогда... Аналогично был только один процессор AMD, после которого, ну вы поняли... Добавлено через 1 минуту Toshkarik, ЕМНИП, у intel есть даже утилитка для обновления микрокода, а где его искать для AMD я не знаю.
1
|
|||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||
| 15.06.2016, 13:28 | ||
|
1
|
||
|
|
|||
| 15.06.2016, 13:50 | |||
|
1
|
|||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
|
||
| 15.06.2016, 14:04 | ||
|
Добавлено через 48 секунд мне кажется что система с такой изюминкой должна периодически выпадать в синий экран
2
|
||
|
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
|
||||||
| 15.06.2016, 15:19 [ТС] | ||||||
|
6 часов работы под Дебианом и ни одного сбоя. (На ночь еще поставлю)
Вернулся на Винду. "облегчил" код: Кликните здесь для просмотра всего текста
добавил промежуточное построение кода ассемблера с исходником в ремарках (в приаттаченном архиве). Запустил приложение и вуаля. За 10 минут такого насмотрелся... (пара кусков ниже) Кликните здесь для просмотра всего текста
Array at addres (3FF70040).
Table asc ready. Read:0 Error at adr(3668B928). Value: 20CE371D must be: 21CE371D 1 Error at adr(3668B928). Value: 20CE371D must be: 21CE371D Table clear ready. Read:01 Table bit ready. Read:0 Error at adr(3668B928). Value: FEFFFFFF must be: FFFFFFFF 1 Error at adr(3668B928). Value: FEFFFFFF must be: FFFFFFFF Table asc2 ready. Read:0 Error at adr(3668B928). Value: 20CE371D must be: 21CE371D 1 Error at adr(3668B928). Value: 20CE371D must be: 21CE371D Array at addres (3FF70040). Table asc ready. Read:0 Error at adr(720A8928). Value: 842711D must be: 942711D 1 Error at adr(720A8928). Value: 842711D must be: 942711D Table clear ready. Read:01 Table bit ready. Read:0 Error at adr(720A8928). Value: FEFFFFFF must be: FFFFFFFF 1 Error at adr(720A8928). Value: FEFFFFFF must be: FFFFFFFF Table asc2 ready. Read:01 Array at addres (3FF70040). ....CUT...... Array at addres (3FF70040). Table asc ready. Read:01 Table clear ready. Read:01 Table bit ready. Read:0 Error at adr(39C48928). Value: FEFFFFFF must be: FFFFFFFF 1 Error at adr(39C48928). Value: FEFFFFFF must be: FFFFFFFF Table asc2 ready. Read:01 Array at addres (3FF70040). Table asc ready. Read:01 Table clear ready. Read:01 Table bit ready. Read:01 Table asc2 ready. Read:01 Array at addres (3FF70040). Table asc ready. Read:0 Error at adr(9F281918). Value: FE6231B must be: EE6231B 1 Error at adr(9F281918). Value: FE6231B must be: EE6231B Table clear ready. Read:01 Table bit ready. Read:01 Table asc2 ready. Read:0 Error at adr(9F281918). Value: FE6231B must be: EE6231B 1 Error at adr(9F281918). Value: FE6231B must be: EE6231B Array at addres (3FF70040). Table asc ready. Read:01 Table clear ready. Read:01 Table bit ready. Read:01 Table asc2 ready. Read:01 Array at addres (3FF70040). Table asc ready. Read:0 Error at adr(627E2928). Value: 2650E51D must be: 2750E51D 1 Error at adr(627E2928). Value: 2650E51D must be: 2750E51D Table clear ready. Read:01 Table bit ready. Read:01 Table asc2 ready. Read:01 Array at addres (3FF70040). Table asc ready. Read:01 Table clear ready. Read:01 Table bit ready. Read:01 Table asc2 ready. Read:01 Array at addres (3FF70040). Table asc ready. Read:01 Table clear ready. Read:0 Error at adr(A0B51918). Value: 1000000 must be: 0 1 Error at adr(A0B51918). Value: 1000000 must be: 0 Table bit ready. Read:01 Table asc2 ready. Read:01 Array at addres (3FF70040). Table asc ready. Read:0 Error at adr(804DB928). Value: A0AD71D must be: B0AD71D 1 Error at adr(804DB928). Value: A0AD71D must be: B0AD71D Table clear ready. Read:01 Table bit ready. Read:01 Table asc2 ready. Read:01 Error at adr(804DB928). Value: A0AD71D must be: B0AD71D Array at addres (3FF70040). Впервые сработала ошибка появления бита при обнулении... Начал собирать вещички... (инфу которую нужно перенести в новую систему). Да, не скрою, что BSOD-ы бывают. Ну это же винда, и даже не сервер. Например, если оставляю программы считать на несколько дней, то в течении 5-6 дней обязательно винда повалится. (На прошлой работе у нас даже сервера под Windows Server не работали дольше 1-2 месяцев подряд. А вот "последний из могикан" Novel работал почти 600 дней кряду и то его руками просто валили. Линуксы пахали до года, но тоже не по своей воле их перегружали.)
0
|
||||||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
|
|
| 15.06.2016, 15:27 | |
|
Petrolion, сделайте сборку с <<28 а то у меня не запуститься и мы так и будем сравнивать теплое с мягким
1
|
|
|
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
|
|
| 15.06.2016, 15:31 [ТС] | |
|
vxg, а можете собрать код при
n=1<<30 ?А то, боюсь, 2 гига не то что я хотел бы поймать. И почему exe (хоть и упакованный) такой огромный?
0
|
|
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
|
||
| 15.06.2016, 15:35 | ||
|
Petrolion, пересобрать я могу хоть << 300 Но на той машине на которой проходит тест в отличие от вашей не стоит 1024 гигабайт оперативной памяти а лишь 4 и приложение тупо вылетает с исключением если пробовать запуск с <<30 а при запуске с << 29 лагает так что жесть просто (идет постоянный своп просто убивающий жесткий) поэтому и говорю про << 28
Добавлено через 41 секунду
1
|
||
|
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
|
|
| 15.06.2016, 15:41 [ТС] | |
|
Я хотел вашу сборку для <<30 прогнать у себя.
А для << 28 во вложении файл. Но если не стоит распространяемого пакета для поддержки MSVC2010, то его ставить отсюда x64, а отсюда x86. Без пакета поддержки, к сожалению не работает.
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 15.06.2016, 16:13 | |
|
Не могли бы Вы скинуть исходник, из которого был сгенерирован тот асм. листинг?
Добавлено через 4 минуты Извиняюсь, не увидел сразу. Нашел.
1
|
|
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,472
|
|
| 15.06.2016, 16:52 | |
|
Petrolion, интересно как вы думаете ловить ошибку при долгом тесте если код не останавливается при ее определении а пашет дальше с отключенным логом в файл?
Добавлено через 27 секунд немигая смотреть на черный экран? зашбсь
1
|
|
| 15.06.2016, 16:52 | |
|
При закачке игры на жесткий диск пишет "Ошибка при записи на диск" Измерить скорость чтения и записи данных на диск Ошибка при записи на диск Ошибки при записи на DVD диск Жесткий диск тормозит при записи на него Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|