Linux:将来自CIFS的文件读取缓存在内存中吗?

时间:2011-05-15 13:37:21

标签: linux filesystems kernel buffer cifs

我正在为linux编写一个流媒体服务器,它从CIFS挂载和发送中读取文件 他们在一个插座上。理想情况下,linux会将文件缓存在内存中,以便随后 读取会更快。是这样的吗?我可以告诉内核缓存吗? 网络读取?

编辑:这些文件会有多次读取但没有写入。

谢谢!

更新:我在CIFS卷上测试了这个,使用fadvise POSIX_FADV_WILLNEED在本地缓存文件(在命令行上使用linux-ftools)。事实证明,需要以读写模式安装卷才能使其正常工作。在只读模式下,fadvise似乎被忽略了。这必须与samba oplock机制有关。

1 个答案:

答案 0 :(得分:3)

遵循CIFS中通常的缓存一致性规则[1],是的,内核CIFS客户端将缓存文件数据。

[1]粗略地说,CIFS原则上是未缓存的,但通过采用oplock,客户端可以更积极地缓存数据。有关CIFS锁定的说明,请参阅例如http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/locking.html的Samba手册。如果客户端以只读模式打开文件,那么我怀疑客户端将使用2级oplock,并且由于没有发生冲突的访问,多个客户端应该能够为相同的文件具有2级oplock。只有当某些客户端请求对文件进行写访问时,oplock才会被破坏。