Linux:读取文件需要多少磁盘IO?如何最小化?

Linux:读取文件需要多少磁盘IO?如何最小化?,第1张

概述根据Facebook的Haystack上的这个 paper: “Because of how the NAS appliances manage directory metadata, placing thousands of files in a directory was extremely inefficient as the directory’s blockmap was too large 根据Facebook的haystack上的这个 paper:

Because of how the NAS appliances manage directory Metadata,placing
thousands of files in a directory was extremely inefficIEnt as the
directory’s blockmap was too large to be cached effectively by the
appliance. Consequently it was common to incur more than 10 disk
operations to retrIEve a single image. After reducing directory sizes
to hundreds of images per directory,the resulting system would still
generally incur 3 disk operations to fetch an image: one to read the
directory Metadata into memory,a second to load the inode into
memory,and a third to read the file contents.

我假设了文件系统目录元数据& *** 作系统总是将inode缓存在RAM中,读取文件通常只需要1个磁盘IO.

这篇文章中列出的“多个磁盘IO是读取单个文件”的问题是NAS设备特有的,还是linux也有同样的问题?

我打算运行一个linux服务器来提供图像.我可以通过任何方式最小化磁盘IO的数量 – 理想情况下确保 *** 作系统缓存所有目录& RAM中的inode数据和每个文件读取只需要不超过1个磁盘IO?

解决方法 linux有同样的“问题”. Here是我两年前发表的一篇论文,其中的效果在linux上显示.多个IO可以来自多个来源:

>在文件路径的每个目录级别上进行目录查找.可能需要读取目录inode和一个或多个目录条目块
>文件的inode

在正常的IO模式中,缓存非常有效,并且inode,目录和数据块以减少搜索的方式分配.但是,正常查找方法(实际上由所有文件系统共享)对于高度随机化的流量是不利的.

以下是一些想法:

1)与文件系统相关的缓存有帮助.大缓存将吸收大部分读取.但是,如果要在计算机中放置多个磁盘,则磁盘到RAM的比率会限制缓存的数量.

2)不要使用数百万个小文件.将它们聚合到更大的文件并将文件名和偏移量存储在文件中.

3)将元数据放置或缓存在SSD上.

4)当然使用的文件系统没有完全无政府的磁盘目录格式. readdir不应超过线性时间,并且理想情况下直接访问文件只是对数时间.

保持目录较小(小于1000左右)应该没有多大帮助,因为您需要更多需要缓存的目录.

总结

以上是内存溢出为你收集整理的Linux:读取文件需要多少磁盘I / O?如何最小化?全部内容,希望文章能够帮你解决Linux:读取文件需要多少磁盘I / O?如何最小化?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1045443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存