如何加快在linux上读取一组固定的小文件?

时间:2011-06-18 15:54:01

标签: linux filesystems ramdisk

我有100'000个1kb文件。一个读取它们的程序 - 它真的很慢。 我提高性能的最佳想法是将它们放在ramdisk上。 但这是一个脆弱的解决方案,每次重启都需要再次设置ramdisk。 (文件复制速度也很慢)

我的第二个最好的想法是连接文件并使用它。但这并非无足轻重。

有更好的解决方案吗?

注意:我需要避免程序中的依赖,甚至是Boost。

2 个答案:

答案 0 :(得分:2)

您可以通过将文件存储在磁盘上来进行优化。

在具有充足空闲空间的磁盘上,最简单的方法是读取tar存档。

除此之外,还有/曾经是'readahead'的debian软件包。

您可以使用该工具

  1. 描述正常运行的软件
  2. 编辑所访问文件的lsit(由readahead检测)
  3. 然后,您可以使用该文件列表调用readahead(它将按磁盘顺序对文件进行排序,以便最大化吞吐量并最小化搜索时间)

    不幸的是,自从我使用这些产品已经有一段时间了,所以我希望你可以谷歌到解决方案

    这就是我现在似乎发现的:

    sudo apt-get install readahead-fedora
    
    祝你好运

答案 1 :(得分:1)

如果您的文件是静态的,我同意将它们放在一起,然后将其放在RAM磁盘中。可能更快直接从TAR文件中读取,但您可以测试它。

编辑:: 而不是TAR,您也可以尝试创建squashfs卷。

如果您不想这样做,或者仍然需要更多表现,那么:

  1. 将您的数据放在SSD上。
  2. 开始调查一些FS性能测试,从EXT4,XFS等开始...