按设备/ inode顺序读取文件?

Pau*_*tas 3 performance readfile

我对读取磁盘上的大量文件的有效方法感兴趣.我想知道我是否按设备对文件进行排序,然后通过inode我会对自然文件读取速度有所提高.

mor*_*ehu 5

通过从旋转存储中读取物理顺序的文件,可以大大提高速度.如果有多个进程或线程争用I/O,操作系统I/O调度机制只能执行任何实际工作,因为它们没有关于您计划将来读取哪些文件的信息.因此,除了简单的预读之外,它们通常对您没有任何帮助.

此外,Linux通过以哈希表顺序而不是物理顺序将目录条目返回到用户空间来恶化目录扫描期间的访问模式.幸运的是,Linux还提供系统调用来确定文件的物理位置,以及文件是否存储在旋转设备上,这样您就可以恢复一些损失.例如,请参阅我几年前提交给dpkg的补丁:

http://lists.debian.org/debian-dpkg/2009/11/msg00002.html

此修补程序未包含旋转设备的测试,因为此功能直到2012年才添加到Linux:

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ef00f59c95fe6e002e7c6e3663cdea65e253f4cc

我还经常运行一个修补版本的mutt,它会按照物理顺序扫描Maildirs,通常可以提高5x-10x的速度.

请注意,inode很小,需要大量预取和缓存,因此在阅读之前打开文件以获取其物理位置非常值得花费.确实,tar,rsync,cp和PostgreSQL等常用工具不使用这些技术,而简单的事实是,这会使它们变得不必要地变慢.