Монтируем без использования noac. У меня есть файл, который я добавляю каждые 20 минут. Затем он будет прочитан с помощью mmap примерно 5000 раз в минуту. Мы отображаем только пару блоков на каждое чтение. Излишне говорить, что noac просто убивает производительность доступа, поэтому мы его не используем.
Я добавляю данные в конец файла с помощью монтирования с noac и читаю с монтирования без noac. Монтировки, которые читают, не видят новые данные.
Я хочу знать, есть ли функция, которую я могу вызвать из c, чтобы обновить атрибуты пути и всех его файлов.
РЕДАКТИРОВАТЬ: Я должен добавить, что мы не можем монтировать и размонтировать, поскольку в каждой системе работает 16 серверов, и они постоянно обращаются к файлам. Что ж ... может быть, мы могли бы монтировать и размонтировать, если бы каждый сервер использовал свое собственное монтирование. По возможности я бы хотел этого избежать.
Спасибо!
Хммм ... попробуйте смонтировать файловую систему NFS с опцией «синхронизация».
И посмотрите этот отрывок из справочной страницы: (man 5 nfs)
Опция монтирования синхронизации.
Клиент NFS обрабатывает параметр монтирования синхронизации иначе, чем некоторые другие файловые системы (см. В разделе mount (8) описание общих параметров синхронизации и асинхронного монтирования). Если ни синхронизация, ни асинхронность не указаны (или если указан параметр async), клиент NFS откладывает отправку записи приложения на сервер до тех пор, пока не произойдет какое-либо из этих событий:
Memory pressure forces reclamation of system memory resources.
An application flushes file data explicitly with sync(2), msync(2), or fsync(3).
An application closes a file with close(2).
The file is locked/unlocked via fcntl(2).
Другими словами, при нормальных обстоятельствах данные, записанные приложением, могут не сразу появиться на сервере, на котором размещен файл.
Если для точки монтирования указана опция синхронизации, любой системный вызов, записывающий данные в файлы в этой точке монтирования, вызывает сброс этих данных на сервер до того, как системный вызов вернет управление в пространство пользователя. Это обеспечивает большую согласованность кэша данных между клиентами, но со значительной потерей производительности.
Приложения могут использовать флаг открытия O_SYNC, чтобы заставить приложение записывать отдельные файлы сразу на сервер без использования опции монтирования синхронизации.