我正在为我的实验室设置一个小型 Linux 集群。目前我们有一个用于作业提交的登录节点和3个计算节点,它们通过千兆位LAN连接(遗憾的是没有无限带宽)。
起初我只是简单地使用 NFS 为集群用户导出共享存储(主文件夹)。但很快我们发现 NFS 在实际负载下表现不佳。
事实证明,我的集群用户在共享存储中读写 GB 的小图片文件(一个小于 100KB)是很常见的。 NFS 对于小文件 IO 的性能非常差。
我对小文件写入的NFS/CIFS/SSHFS性能进行了简单的测试。在每个文件系统上解压 20000 个小文件(总共约 600MB)的时间为:
- CIFS:25~30秒
- SSHFS:45~55秒
- NFS(v3/v4): 太慢了,我没等(估计10分钟)
与 NFS 相比,CIFS/SSHFS 的性能非常好。但在计算机集群场景中,对 Linux 主文件夹使用 CIFS/SSHFS 并不是一般做法(并且 CIFS 并不是真正符合 posix 的文件系统)。
您对小文件负载的网络文件系统选择有何看法?我应该用其他集群/分布式文件系统替换 NFS 吗?或者有没有办法针对小文件优化 NFS?
答案1
如果您有足够大的设置,我会推荐 IBM Spectrum Scale(以前称为 GPFS),但考虑到您的操作规模,我建议您使用 ZFS,但需要做一些调整:将 atime 设置为关闭。如果您并不真正关心记录文件的访问时间,ZFS 将在您的场景中表现良好。