LINUX.ORG.RU

Пишутся ли в файл данные, если они не меняют содержимое файла?

 ,


0

2

Здравствуйте

В поставленном нам оборудовании применятся Linux RT

В оборудовании для хранения файлов используется микросхема 4GB eMMC Flash.

Я создаю для оборудования программные модули на языке Си(Си++)

Для работы с файлами применяю функции open,write

Файл не закрываю после работы с ним

Каждые 20 мс делаю запись в файл 256 кБайт начиная с начала файла.

Данные в основном не меняются и записываются те же данные.

Вопрос такой: Linux или драйвер eMMC Flash самостоятельно отслеживает изменения и принимает решение о необходимости записи?

И еще вопрос учитывается ли особенность eMMC Flash при записи , а именно ограниченное количество циклов стирания на блок(до 3000-10000). Т.е. в какие сроки я доломаю микросхему eMMC Flash 4Gb при записи 256 кБайт 50 раз в секунду?

В eMMC выравнивание износа вроде как не завозят. Для этого f2fs придумали, чтобы сбоку подпереть.

Radjah ★★★★★
()

А внешний накопитель использовать невозможно? При такой интенсивности записи за 30-40 суток ресурс (10000 циклов) будет исчерпан. Может я ошибся в подсчетах?

ivama
()

Точно не знаю, но подозреваю что данные не сравниваются. Я бы это реализовал в той проге которая делает write(), ведь несложно же.

Касательно износа: зачем делать именно каждые 20мс сразу на флешку запись? Там есть требование что бы при внезапном отключении питания сохранился строго последний снимок данных?

Если уж нужен именно файл (что тоже не факт - кто его читает то потом?), можно сделать tmpfs и хранить файл в нём. А на флешку скидывать бекап раз в 10 минут например. Но конечно надо уточнить зачем это всё.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от ivama

Ошибся, 10000/50 это 200 секунд а вовсе не 30 суток.

firkax ★★★★★
()

Если не делаешь fsync после write и файл открыт без O_SYNC, то маловероятно что реально пишутся на диск, вне зависимости от того, разные они или нет. С большой вероятностью они будут реально записаны после закрытия файла (close или завершением процесса) или при принудительном fsync.

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

Кроме того, скидывание буферов на диск зависит от настроек относящихся к дисковому кэшу в ядре.

eMMC не отслеживает изменения, если сказано ей erase-write то так и будет, вне зависимости от содержимого.

Как вариант, чтобы гарантировать остутствие записи при обновлении данных проще всего использовать файл в tmpfs, который копировать на eMMC только когда действительно нужно сохранить данные на eMMC - при завершении работы процесса или с заданной периодичностью. В таком случае в процессе работы гарантированно не будет никакой непредвиденной физической записи на eMMC.

Если в процессе работы доступ к данным со стороны не требуется, то почему бы вообще не использовать буфер в памяти, а в файл записывать его только когда нужно?

Stanson ★★★★★
()

От программы редактора зависит, наверное.

drl
()

Вопрос такой: Linux или драйвер eMMC Flash самостоятельно отслеживает изменения и принимает решение о необходимости записи?

Это от фс зависит тоже, наверное.

drl
()

Каждые 20 мс делаю запись в файл 256 кБайт начиная с начала файла.

Данные добавляются к предыдущим?

drl
()
Ответ на: комментарий от Radjah

Не знаю как работает emmc, но f2fs не делает значительного выравнивание износа, она лишь чтобы контроллер меньше тупил, вроде бы.

drl
()
Ответ на: комментарий от Stanson

После write выполняется fdatasync

Итого: fseek,write,fdatasync

Файл не закрывается. Я предполагаю что таким образом не будет затрагиваться зона разметки файлов (например таблица FAT).

Это все крутится на ПЛК , куда нет возможности воткнуть флэшку.

Запись нужна действительно для случая когда резко пропадет питание.

После восстановления питания происходит чтение из файла.

ASybcom
() автор топика

Каждые 20 мс делаю запись в файл 256 кБайт начиная с начала файла.

Фигасе. А потом удивляемся когда ракеты падают

DumLemming ★★★
()
Ответ на: комментарий от Radjah

Если там всё как в MMC-карточках, то (хоть какой-то) wear leveling, насколько мне известно, есть. Занимается им контроллер, который с некоторых пор в одном корпусе с накопителем. F2FS и ему подобные - для совсем-совсем голых чипов (через MTD).

token_polyak ★★★★★
()
Последнее исправление: token_polyak (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.