2

我正在为 linux 编写一个流服务器,它从 CIFS 挂载中读取文件并通过套接字发送它们。理想情况下,linux 会将文件缓存在内存中,以便后续读取更快。是这样吗?我可以告诉内核缓存网络读取吗?

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

谢谢!

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

4

1 回答 1

3

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

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

于 2011-05-15T13:53:30.360 回答