У меня есть процесс, который основан на обнаружении создания файла на сервере NFS.
Обычно он работает нормально, но в последнее время было несколько мелких сбоев из-за кеширования и Операция переименования NFS.
Мы дошли до расследования lookupcache
на сервере NFS:
lookupcache = mode Определяет, как ядро управляет своим кешем записей каталога для данной точки монтирования. mode может быть одним из всех, none, pos или положительным. Эта опция поддерживается в ядрах 2.6.28 и новее.
Клиент Linux NFS кэширует результаты всех запросов NFS LOOKUP. Если запрошенная запись каталога существует на сервере, результат считается положительным. Если запрошенная запись каталога не существует на сервере, результат считается отрицательным.
Если этот параметр не указан или указано все, клиент предполагает, что оба типа записей кэша каталога действительны до истечения срока действия кэшированных атрибутов их родительского каталога.
Теперь моя проблема - я не действительно хочу глобально отключить lookupcache
- и я думаю, что мне пришлось бы это сделать из-за характера этого процесса (он попадает в файлы во многих местах по всему нашему пространству NFS)
Есть способ я могу программно сделать недействительным кэш поиска и принудительно выполнить ПРОСМОТР? An ioctl
или другой системный вызов в идеале. Что я в идеале поиск - это то, что задокументировано как надежный подход - я видел признаки того, что 'opendir; closedir 'вызовет кеш-недействительность, но я не могу отследить источник этой информации.