Linux: будет ли кеширование файлов из CIFS кэшироваться в памяти? - PullRequest
2 голосов
/ 15 мая 2011

Я пишу потоковый сервер для Linux, который читает файлы из монтируемых файлов CIFS и отправляет их через сокет.В идеале, Linux будет кэшировать файл в памяти, чтобы последующее чтение было быстрее.Это тот случай?Могу ли я сказать ядру кэшировать сетевые чтения?

Редактировать: в этих файлах будет несколько операций чтения, но без записи.

Спасибо!

Обновление: I 'мы проверили это на томе CIFS, используя fadvise POSIX_FADV_WILLNEED для локального кэширования файла (используя linux-ftools в командной строке).Оказывается, что том должен быть смонтирован в режиме чтения-записи, чтобы это работало.В режиме только для чтения, fadvise, кажется, игнорируется.Это должно быть как-то связано с механизмом блокировки самбы.

1 Ответ

3 голосов
/ 15 мая 2011

В соответствии с обычными правилами когерентности кэша [1] в CIFS, да, клиент CIFS ядра будет кэшировать данные файла.

[1] Грубо говоря, CIFS в принципе не кэшируется, но, взяв блокировку, клиент может более агрессивно кэшировать данные.Объяснение блокировки CIFS см., Например, в руководстве Samba по адресу http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/locking.html.Если клиент (ы) открывают файлы в режиме только для чтения, то я подозреваю, что клиент будет использовать блокировки 2 уровня, и, поскольку нет конфликтующего доступа, несколько клиентов должны иметь возможность блокировки 2 уровня для тех же файлов.Только когда некоторые клиентские запросы запрашивают доступ к файлам для записи, эти блокировки будут прерваны.

...