我们发现文件系统存在性能问题,其中包含约 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) 可能会更好:
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 需要时间),最好使用隧道传输流量。在处理小文件时,似乎最好在协议的灵活性(您可以做什么)和协议开销(需要多少时间、数据包中的空间)之间进行划分。