我正在为一个小型网络服务器群规划新的共享存储基础设施。因此,我对许多 NAS 文件系统进行了大量测试。通过这样做,我得到了一些意想不到的结果,想知道这里是否有人可以证实这一点。
简而言之:对于小文件写入,Samba 比 NFS 和 GlusterFS 快得多。
我做了以下事情:我运行了一个简单的“rsync 基准测试”,其中包含大量文件,以比较小文件的写入性能。为了更容易重现,我刚刚用当前 wordpress tar.gz 的内容重新运行了它。
- GlusterFS 复制2个:32-35秒,CPU 负载过高
- GlusterFS 单机:14-16秒,CPU 负载过高
- GlusterFS + NFS 客户端:16-19秒,CPU 负载过高
- NFS 内核服务器 + NFS 客户端(同步):32-36秒,非常低的 CPU 负载
- NFS 内核服务器 + NFS 客户端(异步):3-4秒,非常低的 CPU 负载
- 桑巴:4-7秒,中等 CPU 负载
- 直接磁盘:< 1第二
我绝对不是 Samba 专家(我想我最后一次接触的是 Samba 2.x),所以我没有在这里优化任何东西 - 只是开箱即用的配置(debian/squeeze 包)。我唯一添加的是“sync always = yes”,它应该在写入后强制同步(但看到那些结果......)。没有它,测试速度会快 1-2 秒左右。
所有测试都在同一台机器上运行(自行安装的 NAS 出口),因此没有网络延迟 - 纯粹的协议性能。
侧节点:我使用 ext4 和 xfs 作为文件系统。以上结果均使用 ext4。xfs 的性能提高了 40%(时间更短)。机器是 EC2 m1.small 实例。NAS 导出位于 EBS 卷上,源(提取的 tar)位于临时磁盘上。
那么我们开始吧:有人能向我解释为什么 Samba 速度这么快吗?
另外:在同步模式下,内核服务器的 NFS 性能真的那么糟糕吗(比 GlusterFS NFS 服务器的性能还要差)?有没有什么办法可以调整它?
谢谢,L
答案1
我们广泛使用 Samba,我发现它在几乎所有情况下都比 NFS 更快(我只说几乎,因为我还没有对它们进行足够的比较)。
从我捕获的几个数据包来看,SMB 协议可能比较繁琐,但最新版本的 Samba 实现了 SMB2,它既可以用一个数据包发出多个命令,也可以在等待最后一个命令的 ACK 返回时发出多个命令。这大大提高了它的速度,至少在我看来是如此,而且我知道我第一次看到速度差异时也感到很震惊 -解决网络速度问题——古老的疑问