每当我从 Samba 服务器读取大型文件时,传输速率约为 40 MB/秒。如果我再次读取同一个文件,速度会突然提高到 70 MB/秒。
为什么我第一次没有达到 70 MB/秒?磁盘性能很容易达到 95 MB/秒。Samba 是否必须将整个文件缓存在 RAM 中才能获得性能?
当我将文件写入服务器时,每次我都会获得 95+ MB/秒的速度,差别很大。
我尝试设置一些套接字选项(TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=65535 SO_RCVBUF=65535),但它们似乎没有太大帮助。
那么,关于如何提高 Samba 的读取性能有什么建议吗?
笔记:磁盘为 2x1TB Samsung Spinpoint F1 7200 RPM,配置为软件 RAID 1。
更新:看来客户端与此问题的关系与服务器一样大,甚至更大。我使用的是我信赖的旧版 Total Commander,但如今它似乎太旧了。当我使用 Windows 资源管理器复制文件时,即使是未缓存的文件也会读取得相当快。感谢您的帮助。
答案1
到目前为止,所有答案都与磁盘有关,而不是与 RAID 配置有关。也许本指南的第 19 个问题和第 4 个问题可以帮助您:软件 RAID 指南。
另一件事是网络方面。你有脚趾你的 NIC 上是否启用了?
最后一件事:您是否检查过瓶颈不在客户端?可能是您的 FTP 客户端在 RAM 中保存的数据比 CIFS 服务中保存的数据多。这也许是 FTP 速度更快的原因之一。
答案2
首先,这些 TCP 套接字选项是针对 2.4 内核的,而在 Samba 邮件列表中,开发人员曾反复表示它们在 2.6 内核上没有意义。
除此之外,您的数字有些不对劲。RAID1(镜像)配置中的 2 个 SATA 驱动器不可能为您提供 95MB/s 的写入速度,而且我非常怀疑您也看不到这么高的读取速度。除非在驱动器的最外层轨道上。您如何对 RAID 卷进行基准测试?请记住,dd 不是文件系统基准测试。
如果您的网卡是消费级的,那么千兆速度也会占用大量的 CPU 周期。因此,如果您的系统中有一个较慢的 CPU,请不要排除 CPU 是瓶颈的可能性。
还要记住,这里服务器和客户端的磁盘和 CPU 都必须能够维持您想要实现的速度,所以不要只将服务器视为瓶颈的根源,因为它很可能出现在客户端。
答案3
1.尝试增加预读
# /sbin/blockdev --getra /dev/sdb
256
# /sbin/blockdev --setra 16384 /dev/sdb
2.尝试更改 IO 调度程序,并找到最适合您工作负载的调度程序
# cat /sys/block/hda/queue/scheduler
noop [anticipatory] deadline cfq
echo deadline > /sys/block/hda/queue/scheduler
答案4
Linux 磁盘缓存是第二次读取速度更快的原因,更不用说可能涉及的任何 H/W 磁盘缓存。
为了提高读取性能:使用磁盘条带化,增加 RAM,转到磁盘的下一级硬件接口(用 SAS 或 FC4 替换 SATA),使用更快的磁盘(15K RPM 而不是 10K),向 RAID 缓存添加 RAM。
70MB/s 的改进成本会比较高,但你应该能够提高首次读取速度。