磁盘 IO 导致 Xen/CentOS 客户机负载过高

磁盘 IO 导致 Xen/CentOS 客户机负载过高

背景

我在使用基于 xen 的服务器时遇到了严重问题,这是在客户分区上。这是一个半虚拟化的 CentOS 5.5。我不确定它是否与硬件或软件有关,或者两者之间(驱动程序)。

基本信息

更新控制器固件(这是最后一步)

Smart Array 6i in Slot 0
   Hardware Revision: Rev B
   Firmware Version: 2.84

更新内核

Linux domU 2.6.18-194.32.1.el5xen #1 SMP Wed Jan 5 19:32:33 EST 2011 i686 i686 i386 GNU/Linux

问题在于磁盘写入速度。

基线表现是

  • dom0 ~30MB/s
  • domU ~4MB/s(小文件)
  • domU ~1.5MB/s(大文件)

以下数字是在通过网络复制大文件时从顶部获取的。

如果我再次复制该文件,速度会相对于平均负载下降。因此,第二次复制的速度是第一次的一半。

此后需要一些时间来冷却。平均负载会缓慢下降,直到再次可用。ls /大约需要 30 秒。

top - 13:26:44 up 13 days, 21:44,  2 users,  load average: 7.03, 5.08, 3.15
Tasks: 134 total,   2 running, 132 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.1%sy,  0.0%ni, 25.3%id, 74.5%wa,  0.0%hi,  0.0%si,  0.1%st
Mem:   1048752k total,  1041460k used,     7292k free,     3116k buffers
Swap:  2129912k total,       40k used,  2129872k free,   904740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1506 root      10  -5     0    0    0 S  0.3  0.0   0:03.94 cifsd
    1 root      15   0  2172  644  556 S  0.0  0.1   0:00.08 init

同时,主机的平均负载约为 0.5,并且随着时间的推移保持稳定。等待时间约为 50%

服务器硬件是双 xeon、3gb RAM、170gb scsi 320 10k rpm,通过网络复制文件应该不会有任何问题。

disk = [ "tap:aio:/vm/domU.img,xvda,w" ]

我也在日志中看到这些

INFO: task syslogd:1350 blocked for more than 120 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
syslogd       D 00062E4F  2208  1350      1          1353  1312 (NOTLB)
       c0ef0ed0 00000286 6e71a411 00062e4f c0ef0f18 00000009 c0f20000 6e738bfd
       00062e4f 0001e7ec c0f2010c c181a724 c1abd200 00000000 ffffffff c0ef0ecc
       c041a180 00000000 c0ef0ed8 c03d6a50 00000000 00000000 c03d6a00 00000000
Call Trace:
 [<c041a180>] __wake_up+0x2a/0x3d
 [<ee06a1ea>] log_wait_commit+0x80/0xc7 [jbd]
 [<c043128b>] autoremove_wake_function+0x0/0x2d
 [<ee065661>] journal_stop+0x195/0x1ba [jbd]
 [<c0490a32>] __writeback_single_inode+0x1a3/0x2af
 [<c04568ea>] do_writepages+0x2b/0x32
 [<c045239b>] __filemap_fdatawrite_range+0x66/0x72
 [<c04910ce>] sync_inode+0x19/0x24
 [<ee09b007>] ext3_sync_file+0xaf/0xc4 [ext3]
 [<c047426f>] do_fsync+0x41/0x83
 [<c04742ce>] __do_fsync+0x1d/0x2b
 [<c0405413>] syscall_call+0x7/0xb
 =======================

我已尝试按照建议禁用 irqbalanced这里但似乎并没有什么区别。

更新:

domU# cat /sys/block/xvda/queue/scheduler
[noop] anticipatory deadline cfq

从磁盘复制文件/将文件复制到磁盘会导致负载保持 < 4。后续复制会导致负载增加。通过网络复制文件会导致第一次运行负载 > 4,后续复制会导致服务器几乎完全停止运行,需要时间冷却,它永远不会停机,只需给它 10-15 分钟即可恢复。但服务器这样做确实不切实际。

网络流量本身不会造成任何问题,例如运行 iperf 不会产生任何可测量的影响。报告的带宽 > 1gbit。

dom0 上的写入性能正常

dom0# dd if=/dev/zero of=./test1024M bs=1024k count=1024 conv=fsync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 34.9725 seconds, 30.7 MB/s

domU 上的写入性能较差

domU# dd if=/dev/zero of=./test1024M bs=1024k count=1024 conv=fsync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 622.163 seconds, 1.7 MB/s

这相当于约 95% 的性能损失。

读取性能良好

dom0# hdparm -tT /dev/cciss/c0d0p1

/dev/cciss/c0d0p1:
 Timing cached reads:   3352 MB in  2.00 seconds = 1676.70 MB/sec
 Timing buffered disk reads:  100 MB in  2.59 seconds =  38.57 MB/sec

domU# hdparm -tT /dev/xvda

/dev/xvda:
 Timing cached reads:   3144 MB in  2.00 seconds = 1571.51 MB/sec
 Timing buffered disk reads:  120 MB in  3.03 seconds =  39.67 MB/sec

更新:

所以看起来这毕竟是硬件问题。但直到运行 xen 时才出现。电池无法正常充电,这导致缓存被禁用。这与运行密集 IO 的 VM 相结合导致等待时间过长。

现在,在升级固件后,一切都没有改变,但自从固件升级以来,电池现在充电正常。电池充满电后,写入速度现在是可以接受的,对于小文件来说,写入速度超过了 dom0,不知道为什么会发生这种情况。

domU# dd if=/dev/zero of=./test1024M bs=1024k count=1024 conv=fsync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 39.1087 seconds, 27.5 MB/s

答案1

我认为这是由于您的主机上使用的旧 xen 版本 (CentOS 5.5)。我强烈建议您使用 SLES 10 或 11。11 内置了 XEN 4.x。

我的 CentOS 5 DomU 在 SLES 10 Dom0 上运行,没有遇到任何性能问题。

相关内容