Linux:从 CIFS 读取的文件是否会缓存在内存中?

标签 linux filesystems kernel buffer cifs

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

编辑:这些文件将被多次读取,但不会写入。

谢谢!

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

最佳答案

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

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

关于Linux:从 CIFS 读取的文件是否会缓存在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6008710/

相关文章:

java - Linux Java 进程重定向

matlab - 如何获取 MATLAB 中特定目录中所有目录名称和/或所有文件的列表?

unix - 哪些文件控制您网站的可见性?

linux - 检查虚拟内存地址的有效性

linux - 补丁对差异文件过于严格

linux - 降序排序非常小的数字

linux - 令人困惑的 Makefile

c++ - 如何在minifilter中的IRP_Create上获取复制文件的源路径

linux - 禁用 Linux 调度程序来测量特定机器代码指令的功耗

linux-kernel - printk - 显示在消息日志中但不显示在任何内核日志级别的终端中