我们正在为一些将缓存几天的小文件准备一个缓存存储服务器(因此硬盘的读取量将多于写入量)。所有文件都相当小,大约 100 到 500KB,但我们有很多文件,因此我们可以用它完全填满 12TB。该服务器有一个 1Gbit 连接,我希望我们能充分利用它,因为我们有 4 个硬盘,读取速度应该是 250Mb/s(31.25MB/s)
该服务器运行在 Ubuntu Server 14.04LTS 上
我想知道人们的建议是什么:
- 我们应该使用什么文件系统?
- 我们应该将硬盘合并到一个大目录中吗?
- 所有文件是否都应放在同一目录中?(我们谈论的是大约 25,000,000 个文件)
答案1
读取速度应为 250Mb/s (31.25MB/s)
首先,非常使用 4 个 7200 rpm 硬盘和随机读取访问模式不太可能达到此性能水平。即使您的磁盘能够读取较大的块大小 ~ 16-64 KB,7.2k 磁盘每秒的最大 I/O 操作数也约为 100(非顺序访问)。根据我的经验,如果您做对了所有事情,您最终可能会看到 ~10-20 MB/s。
我们应该将硬盘合并到一个大目录中吗?
md
您显然会受益于、或 RAID0 的硬件 RAID 控制器提供的条带化功能dmraid
。请注意,在此操作模式下,您将丢失所有数据一旦有一个磁盘发生故障。
如果您有读写请求在平行下(即使写入的百分比与读取相比相当低),您仍将受益于 RAID 控制器的写回功能。考虑购买带有 BBU 的控制器以获得更好的操作一致性(没有 BBU 的控制器在断电时会丢失其缓存的内容,并可能破坏您的文件系统)。
所有文件是否都应放在同一目录中?(我们谈论的是大约 25,000,000 个文件)
当然不是。许多文件系统在单个目录中有大量文件(>50,000)时性能不佳。出于可移植性原因,请避免这种情况。如果您绝对必须这样做,请查看已知在这些条件下表现良好的文件系统。
我们应该使用什么文件系统?
视情况而定。用现代的软件测试你的负载,看看是否效率低下。你还可能发现自己在寻找可调参数和调整,以减少每个文件访问的磁盘寻道次数(例如安装noatime
)。
最后,您可能需要将使用的磁盘数量增加一倍,以提高性能并在 RAID10 设置中引入冗余。