【问题标题】:How to speed up reading of a fixed set of small files on linux?如何加快 linux 上一组固定小文件的读取速度?
【发布时间】:2011-09-17 20:04:28
【问题描述】:

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

我的第二个最佳想法是连接文件并使用它。但这不是微不足道的。

有没有更好的解决方案?

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

【问题讨论】:

    标签: linux filesystems ramdisk


    【解决方案1】:

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

    在有足够可用空间的磁盘上,最简单的方法是改为读取 tar 存档。

    除此之外,还有/曾经有一个用于“预读”的 debian 软件包。

    您可以使用该工具来

    1. 分析软件的正常运行
    2. 编辑访问的文件的 lsit(由预读检测)

    然后您可以使用该文件列表调用 readahead(它会按 磁盘顺序对文件进行排序,因此吞吐量将最大化并最小化搜索时间)

    不幸的是,我已经有一段时间没有使用这些了,所以我希望你能google到相应的包

    这似乎是我现在发现的:

    sudo apt-get install readahead-fedora
    

    祝你好运

    【讨论】:

      【解决方案2】:

      如果您的文件是静态的,我同意将它们打包,然后将其放入 RAM 磁盘中。直接从 TAR 文件中读取可能会更快,但您可以对其进行测试。

      edit:: 代替 TAR,您也可以尝试创建 squashfs 卷。

      如果您不想这样做,或者仍然需要更高的性能,那么:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-07
        • 1970-01-01
        • 2014-09-03
        • 2015-11-07
        • 2018-03-26
        相关资源
        最近更新 更多