首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件系统:内核调用与缓存

问文件系统:内核调用与缓存
EN

Stack Overflow用户
提问于 2017-04-16 13:36:59
回答 1查看 154关注 0票数 1

为了教育目的,我想写一个档案经理。我计划把软件分成后端和前端。后端将执行这样的文件系统缓存:

  1. 用户双击前面的目录/foo/bar。
  2. 后端从路径/foo/bar 的前端接收文件列表查询。
    • 使用/foo/bar从磁盘上使用readdir()读取文件项
    • 将条目存储在数据缓存服务器(Redis)中。
    • 将结果返回到前端。

​

  1. 前端显示/foo/bar中的文件列表

当用户下一次想从/foo/bar中列出文件时,后端将从数据缓存服务器返回条目,而不是通过内核调用执行磁盘I/O操作,前提是/foo/bar中的文件自上次查询以来没有变化--我可以使用inotify之类的方法来监视该查询。

现在,我的问题如下:

  1. 这个体系结构有意义吗?还是Linux内核/文件系统/等等已经负责缓存?
  2. 在处理大量文件时,与Redis服务器通信的开销值得吗?与列出目录内容的磁盘I/O相比,这是否值得呢?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-17 04:45:49

  1. 这个体系结构有意义吗?还是Linux内核/文件系统/等等已经负责缓存?

Linux确实在某种程度上负责缓存,它主要与在内存中加载文件有关(这些文件不是写到内存中的)。另外,依赖于LINUX来缓存您的目录,这意味着您失去了对要缓存的内容的控制。此外,LINUX缓存取决于许多因素,因为它的目标主要是确保数据一致性,而不是读取性能。

因此,从磁盘卸载一些工作是有意义的。

  1. 在处理大量文件时,与Redis服务器通信的开销值得吗?与列出目录内容的磁盘I/O相比,这是否值得呢?

这就提出了更多的问题。是位于单独机器或本地机器上的磁盘,也是位于Redis服务器的位置。它是集群环境还是简单的服务器?

如果Redis和磁盘位于同一台&单机上,那么无论终端位置如何,您都必须承担网络成本。当您在机器内时,RAM总是胜过磁盘I/O,无论是读还是写。

有关更多信息,请参见此answer

每个人都应该知道的数字 L1缓存引用0.5ns分支错误预测5 ns L2缓存引用7 ns Mutex锁/解锁100 ns (25)主存参考100 ns压缩1K字节与Zippy10 000 ns (3,000)通过1 Gbps网络发送2K字节20,000 ns顺序从同一数据中心500,000 ns内的内存250,000 ns循环中读取1 MB磁盘查找10,000,000 ns顺序从网络读取1 MB 10,000,000 ns (20,000,000)发送数据包CA->荷兰->CA 150,000,000 ns

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43437843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档