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

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

服务器共享文件系统到〜10台客户机。

获取目录列表通常很慢,有时候甚至在本地读取文件的绝对path。

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

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

  • 有一个特别适合这种情况的文件系统(例如ext4,xfs,btrfs,…)吗?
  • 我们应该使用什么样的RAIDconfiguration(例如sw和hw,RAID级别等)?
  • 怎么样的文件共享设置(技术[如NFS与竞争],configuration,…)?

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

  • 获得所有要求(延迟,带宽,冗余,可靠性,安全性,所需function…)
  • 分析当前的系统。 如果没有,则创buildtesting环境。 了解所有组件如何工作。 了解当前和预期的负载。
  • 为生产和testing系统添加系统监控(带图)。 至less监视CPU使用率,networking使用情况和磁盘I / O使用情况。
  • 创buildtesting服务器并加载testing。 使用合成基准进行负载testing不仅需要使用微基准testing。

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

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

有一个特别适合这种情况的文件系统(例如ext4,xfs,btrfs,…)吗?

在安全性方面,我认为ext4是最好的select。 在阅读性能方面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

文件系统为数以百万计的小文件

我们应该使用什么样的RAIDconfiguration(例如sw和hw,RAID级别等)?

你需要:

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

每个RAID级别,有可能做并行操作将是不错的select,例如RAID 10(Linux软件突袭)有很多调整选项。

怎么样的文件共享设置(技术[如NFS与竞争],configuration,…)?

我不能在这里给你号码,文件共享也是相当广泛的术语。 在处理大量文件(而不是FTPS – 因为每次传输的TLS协商需要一定的时间)之前,我对FTP有很好的使用经验,所以更好地传输stream量。 在处理小文件时,似乎协议的灵活性(可以做什么)和协议开销(需要多less时间,数据包中的空间)之间的最佳划分。