Linux:读取文件需要多少磁盘I / O?如何最小化?
根据Facebook的Haystack上的这个
paper:
我假设了文件系统目录元数据&操作系统总是将inode缓存在RAM中,读取文件通常只需要1个磁盘IO. 这篇文章中列出的“多个磁盘IO是读取单个文件”的问题是NAS设备特有的,还是Linux也有同样的问题? 我打算运行一个Linux服务器来提供图像.我可以通过任何方式最小化磁盘IO的数量 – 理想情况下确保操作系统缓存所有目录& RAM中的inode数据和每个文件读取只需要不超过1个磁盘IO? 解决方法
Linux有同样的“问题”.
Here是我两年前发表的一篇论文,其中的效果在Linux上显示.多个IO可以来自多个来源:
>在文件路径的每个目录级别上进行目录查找.可能需要读取目录inode和一个或多个目录条目块 在正常的IO模式中,缓存非常有效,并且inode,目录和数据块以减少搜索的方式分配.但是,正常查找方法(实际上由所有文件系统共享)对于高度随机化的流量是不利的. 以下是一些想法: 1)与文件系统相关的缓存有帮助.大缓存将吸收大部分读取.但是,如果要在计算机中放置多个磁盘,则磁盘到RAM的比率会限制缓存的数量. 2)不要使用数百万个小文件.将它们聚合到更大的文件并将文件名和偏移量存储在文件中. 3)将元数据放置或缓存在SSD上. 4)当然使用的文件系统没有完全无政府的磁盘目录格式. readdir不应超过线性时间,并且理想情况下直接访问文件只是对数时间. 保持目录较小(小于1000左右)应该没有多大帮助,因为您需要更多需要缓存的目录. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |