LINUX.ORG.RU

отменить кеширование записи и чтения данных из файла в примонтированом разделe файловой сисиемы

 


0

3

суть проблемы. сделал девайс который через usb прикидывается usb mass storage, система его автомонтирует и все бы нечего.. но. девай является не хранилищем данных, а массивом датчиком и регистров управления интерфейс которых реализован как файлы. запись еще как то работает, а вот чтение нет, при обращении к файлу на чтение происходит однократное чтение из девайса, далее фс решает что если она не писала в файл то и читать с девайса - трата времени, и берет данные из кеша. пробывал при монтировании передавать флаги , ничего не помогает. есть вариан нагородить через fuse, но мне кажется должен быть в ядре способ объяснить как работать с разделом.


echo 3 > /proc/sys/vm/drop_caches

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

спасибо, это наверно както заработает. но мне нужно именно изменить политку для раздела - открывать файлы будут процессы которые я не контролинрую, например например текстовый редактор, нужно чтобы работало как /sys, fuse позволяет это сделать но это деать тоже самый функционал только без кеширования, вобщем странненько, должен быть способ..

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

Лучше бы на HID всё сделал ИМХО, оно для этого гораздо лучше подходит, чем подобное костыляние.

Radjah ★★★★★
()

прикидывается usb mass storage

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

Вот и обновляй время модификации эмулируемого файла на устройстве, когда обновились данные с датчика.

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

mount -o sync не работает, это была первая идея, есть позреня что это на запись только влияет.

klen_s
() автор топика
Ответ на: комментарий от gag

Вот и обновляй время модификации эмулируемого файла на устройстве, когда обновились данные с датчика.

как? чтобы fs узнала обновление даты она должна прочитать атрибуты файла из девайса, но она это не будет делать потому что думает чтто она едиственная кто может что то отмодифицировать, так не подет, единственный способ - изменить поведение fs. HID мне не нужен, ни к чему он не приспособлен кроме мышек джойстиков и кнопочек.

klen_s
() автор топика
Ответ на: комментарий от klen_s

Можно перед каждым чтением размонтировать/примонтировать ФС (особенно, если к ФС обращается только одна пользовательская программа).

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

но она это не будет делать потому что думает чтто она едиственная кто может что то отмодифицировать

Эмулировать NFS. Или 9p.

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

Сделай LD_PRELOAD враппер, если статических бинарей нет.

anonymous
()

Вероятно способа отключить кэш чтения для конкретного девайса не получится. Для всех девайсов сойдет ?

Deleted
()
Ответ на: комментарий от anonymous

man mount

sync

All I/O to the filesystem should be done synchronously. In the case of media with a limited number of write cycles (e.g. some flash drives), sync may cause life-cycle shortening.

UPD: Хотя, может, из-за кеша эти I/O не будут сгенерированы вообще.

gag ★★★★★
()
Последнее исправление: gag (всего исправлений: 1)

Что за файловая система, самописная? Что за устройство mass-storage, самописное? Если самописные, откуда вопросы про кеширование? Или ты сам не знаешь с чем работаешь?

anonymous
()
Ответ на: комментарий от gag

Мимо:
man 2 mount

MS_SYNCHRONOUS
Make writes on this filesystem synchronous (as though the O_SYNC flag to open(2) was specified for all file opens to this filesystem).

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

все самописное на девайсе, реализован fat, интерфейс usb mass storage, проблема не в девайсе а в драйвере fs на хосте(linux)

klen_s
() автор топика
Ответ на: комментарий от klen_s

реализован fat

Зачем? Данными с ядром обмениваются без таких костылей все.

anonymous
()
Ответ на: комментарий от klen_s

реализован fat, ... проблема ... в драйвере fs

Первая информация по делу. Выделил где проблема.

anonymous
()
Ответ на: комментарий от klen_s

Нет проблемы в драйвере, он следует стандарту.

FAT не может монтироваться однoвременно несколькими серверами. Если ФС примонтирована, но ваше устройство меняет данные на лету — оно не соответствует ни FAT, ни USB Mass Storage. Ваше устройство не должно трогать содержимое ФС, когда она примонтирована хостом.

То, чего вы хотите — невозможно. Маскимум, что можно сделать — это установить периодичность сброса кэша. Вы и сам нагуглите, как это делается.

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

Да тут вообще не в ФС проблема, тут забивание гвоздей микроскопом изначально.

Radjah ★★★★★
()

суть проблемы. сделал девайс который через usb прикидывается usb mass storage

Файловая система ставит в соответствие файлам их смещения относительно начала устройства.

/mnt/sensor_file лежит по смещению sensor_offset в /dev/you_device.

Напиши то же самое в виде драйвера на fuse, который при записи/чтении файла будет писать/читать по смещениям, а на заголовки и метаданные fat32 забей.

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

Вполне возможно. В исходники я, признаться, не полез.

Qasta
()

Не нужно «есть с ножа», но если деваться некуда, то примерно так:

  • обязательно open() с O_DIRECT (ну и с аналогичными флажками в mustdie);
  • в девайте эмулируйте файл максимального размера и при чтении выдавайте инфу блоками подходящего фиксированного размера по степени 2 игнорируя старшие разряды смещения.
  • соответственно приложение должно «просто читать» файл этими блоками последовательно и переходить к началу когда упрется в «конец» псевдо-файла.

Эта схемa будет работать везде.

Но чтобы работало из «любого текстового редактора» придется сделать свою либу, которая отследит обращение к «вашему» файлу и все сделает правильно, а потом посредством LD_PRELOAD подменять read(), readv() и mmap().

Deleted
()
Ответ на: комментарий от klen_s

Даже в сраном пхп есть clearstatcache(); перед чтением файлов. Обязуй читающую строну просить фс сбрасывать кеши и все будет пучком.

deep-purple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.