【问题标题】: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 软件包。
您可以使用该工具来
- 分析软件的正常运行
- 编辑访问的文件的 lsit(由预读检测)
然后您可以使用该文件列表调用 readahead(它会按 磁盘顺序对文件进行排序,因此吞吐量将最大化并最小化搜索时间)
不幸的是,我已经有一段时间没有使用这些了,所以我希望你能google到相应的包
这似乎是我现在发现的:
sudo apt-get install readahead-fedora
祝你好运
【解决方案2】:
如果您的文件是静态的,我同意将它们打包,然后将其放入 RAM 磁盘中。直接从 TAR 文件中读取可能会更快,但您可以对其进行测试。
edit:: 代替 TAR,您也可以尝试创建 squashfs 卷。
如果您不想这样做,或者仍然需要更高的性能,那么:
- 将您的数据放在 SSD 上。
- 开始调查一些 FS 性能测试,从 EXT4、XFS 等开始...