我最近在一台 ubuntu 桌面上设置了一个 samba 服务器,为另外四台 ubuntu 桌面提供共享目录。它们位于千兆位 LAN 中。它的性能很差,我感觉磁盘和网络都没有饱和。我怀疑我一定可以做一些调整。
Samba 服务器为几十个包含大文件(每个大约 100MB)的目录提供服务。然后我在每台客户端机器上运行四个作业,密集读取这些文件。所以总共有 16 个作业。这些作业的 CPU 使用率应该接近 100%。但是,使用此 Samba 设置,它们的 CPU 使用率非常突发,而且在许多情况下非常低。以下是来自服务器的 iostat -x 5 输出。
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 5.60 1.20 148.00 0.60 19532.00 7.20 262.98 9.74 65.91 65.71 113.33 6.73 100.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.60 0.00 3.20 23.40 0.00 72.80
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 4.40 2.80 165.00 0.60 21676.00 13.60 261.95 9.24 56.11 55.98 92.00 6.04 100.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.30 0.00 2.51 24.71 0.00 72.48
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 3.40 1.80 149.40 0.40 19120.00 8.80 255.39 9.22 61.09 60.92 128.00 6.68 100.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.30 0.00 2.34 27.67 0.00 69.69
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 3.00 0.00 135.60 0.00 17572.80 0.00 259.19 12.07 86.05 86.05 0.00 7.37 100.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.55 0.00 2.81 22.01 0.00 74.64
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 145.40 0.00 18588.00 0.00 255.68 12.12 85.74 85.74 0.00 6.88 100.08
avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 2.79 22.49 0.00 74.46
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 134.20 0.00 17074.40 0.00 254.46 12.42 92.88 92.88 0.00 7.45 100.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.50 0.00 2.77 25.21 0.00 71.51
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 1.20 0.00 141.20 0.00 18042.40 0.00 255.56 12.12 85.68 85.68 0.00 7.08 100.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 2.89 22.40 0.00 74.46
因此磁盘读取吞吐量仅不到 20MB/s。我认为磁盘至少可以实现 50-60MB/s 的读取吞吐量。我该如何进一步调试?这可能是网络问题吗?或者是 samba 设置问题?
编辑:我注意到 iostat 中的 %util 数字已经是 100%,而 %iowait 超过 20%。所以这意味着磁盘已经饱和?但只实现了 20MB/s 的读取吞吐量?我该如何解释 iostat 数字并正确优化我的系统?
答案1
我认为这更多的是一个预期问题,而不是实际问题。假设这台台式机上有一块消费级 SATA 硬盘,同时运行 16 个作业,我认为 20MB/s 的速度是相当不错的。
查看 iostat 输出,您可以看到大约有 150 个读取 IOP,这就是您从 7200 RPM SATA 驱动器中获得的全部数据。