优化Linux文件系统以读取~500M的小文件

优化Linux文件系统以读取~500M的小文件

我们发现文件系统存在性能问题,其中包含约 500 M 个相对较小(通常为数十 kb)的文件和约 150 K 个目录。文件访问主要是读取,写入相当少。文件大多存储在散列目录层次结构中,每个目录约有 30K 个文件,但在某些情况下,一个目录中的文件最多可达 500 K。

该服务器将文件系统共享给大约 10 台客户端机器。

获取目录列表通常很慢,有时也会通过绝对路径读取文件,即使是在本地。

这是一台运行 Ubuntu 12.04.4(内核:3.8.0 / x86_64)的物理服务器,我们在硬件 RAID-6 卷上使用 ext4。

在这种情况下,推荐的文件系统设置是什么?

  • 是否有特别适合这种情况的文件系统(例如 ext4、xfs、btrfs 等)?
  • 我们应该使用哪种 RAID 配置(例如软件与硬件、RAID 级别等)?
  • 文件共享设置怎么样(技术[例如 NFS 与竞争]、配置……)?

答案1

当你遇到这样的问题时,你必须:

  • 获得所有要求(延迟、带宽、冗余、可靠性、安全性、所需功能......)
  • 分析当前系统。如果没有,请创建测试环境。了解所有组件的工作原理。了解当前和预期的负载。
  • 为生产系统和测试系统添加系统监控(带图表)。至少监控 CPU 使用率、网络使用率和磁盘 I/O 使用率。
  • 创建测试服务器并对其进行负载测试。使用综合基准测试而不是微基准测试进行负载测试。

使用具有最新稳定内核的最新操作系统的稳定版本。

答案2

在这种情况下,推荐的文件系统设置是什么?

是否有特别适合这种情况的文件系统(例如 ext4、xfs、btrfs 等)?

我认为从安全性角度来说 ext4 是最佳选择。从读取性能角度来说,RaiserFS(/4) 可能会更好:

https://unix.stackexchange.com/questions/28756/what-is-the-most-high-performance-linux-filesystem-for-storing-a-lot-of-small-fi

http://www.phoronix.com/scan.php?page=article&item=linux_39_fs&num=1

适用于数百万小文件的文件系统

我们应该使用哪种 RAID 配置(例如软件与硬件、RAID 级别等)?

你需要:

  • 缩短延迟/访问时间
  • 减少读/写次数(noatime、nodiratime、realtime、barrier=0)

每个 RAID 级别,只要有可能进行并行操作,都是不错的选择,例如 RAID 10(Linux 软件 raid)就有很多调整选项。

文件共享设置怎么样(技术[例如 NFS 与竞争]、配置……)?

我无法在这里给出数字,文件共享也是一个相当广泛的术语。在处理大量文件时,我使用 FTP 的经验非常好(不是 FTPS - 因为每次传输都要协商 TLS 需要时间),最好使用隧道传输流量。在处理小文件时,似乎最好在协议的灵活性(您可以做什么)和协议开销(需要多少时间、数据包中的空间)之间进行划分。

相关内容