解决 Samba 服务器上的高 iowait 问题

解决 Samba 服务器上的高 iowait 问题

我们有一个集中式文件缓存,一组 Web 服务器用它来存储“重量级”页面。每个 Web 服务器都使用 Samba 来挂载这个共享区域。

我们的服务器上有大量 iowait,我想知道我们可以采取哪些步骤来构建更高效的集中缓存?我们已经将 memcache 用作某些对象的首行缓存,并且可能只是为此投入更多内存,但我感兴趣的是找出可以使用哪些技术来加速基于文件的缓存。所有服务器都运行最新版本的 Ubuntu。

服务器使用带有 LVM 的 ext3 文件系统。也许其他文件系统对于此类活动来说性能会更好?我们使用 Samba 多年,只是因为每个人都熟悉它,而且我们在 NFS 维护方面遇到了麻烦(例如拒绝卸载)。也许有更好的技术……

答案1

检查分配给该卷的 io 调度程序(在内核文档中称为 io 电梯)。

$ cat /sys/block/sda/queue/scheduler 
noop anticipatory [deadline] cfq 

对于大多数 RedHat 和 Fedora 发行版,默认是 CFQ 调度程序。恕我直言,这不是 iobound 服务器进程的最佳选择。我推荐 deadline 调度程序

$ echo "deadline" > /sys/block/sda/queue/scheduler

改变这一点,或者添加

elevator=deadline

到您的启动参数以使其永久生效。

高 iowait 时间也可能由过度预读导致,这对您的工作负载来说可能是不必要的。RedHat 和 Fedora 系统的默认值为 128k

$ cat /sys/block/sda/queue/read_ahead_kb 
128

尝试将较低的值回显到该文件并查看是否可以减少 iowait 时间。

另外,请检查底层磁盘或阵列。如果它已降级或正在重建,您的 iowait 时间将飙升,因为底层磁盘子系统在重建自身时会窃取 io 带宽

答案2

服务器上较高的 IOWait% 意味着您需要更快的磁盘/更多的内存用于磁盘缓存。

看看你的“iostat -x 5”统计数据 - 你的磁盘是否已饱和?根据你的应用程序语义,文件服务器上的更多内存可能对你有好处。

如果服务器存储和检索页面之间存在较长的延迟,则需要更快的磁盘。

检查 free 的输出以查看您有多少内存以及它用于什么用途。

答案3

由于 Samba 是通过网络访问的,因此我认为您的网络首先是瓶颈。链接是否针对通过网络的文件/数据包的类型和大小进行了优化?

您能否监控这些链接以了解它们的利用率?

如果网络似乎不是瓶颈,那么您可以查看以下提示本指南稍微优化一下你的 Samba 配置。

编辑

您提到了 LVM,它们是什么类型的磁盘?普通的现成 7200RPM IDE 驱动器?如果真的是 IO 等待,那么是的,您需要更快的磁盘。这可能就像 SATA 10k 驱动器一样简单,甚至可以进入高性能 raid。

答案4

另一个选择是使用反向代理缓存解决方案,如 Squid 或 varnish,而不必通过不同的层来获取相同的数据。只需考虑一下,因为这样的解决方案将针对提供网页进行优化(而不是更通用的文件服务解决方案)。

相关内容