我们使用 kvm 进行虚拟化,磁盘映像存储为逻辑卷。逻辑卷存储在由 Intel DCS3500 SSD 组成的一组软件 RAID1 (mdadm) 阵列上(每个阵列都是卷组中的一个物理卷)。
如果我在该卷组内创建一个逻辑卷并使用 fio 确定 IOPS,则随机写入 4KB 块时我会获得大约 40K IOPS。很好。iostat 显示两个 SSD 的利用率都达到 100% 左右。如果我创建一个使用相同逻辑卷进行存储的虚拟机并运行相同的 fio 命令,我最初会获得 20K IOPS(很好),但 30 秒左右后会下降到 7-8K。奇怪的是,iostat 现在显示一个 SSD 的使用率为 100%,而另一个仅为 45%。
以下是随时间变化的图表(由虚拟机管理程序上的 iostat -x 2 完成)
如您所见,起初瓶颈似乎是 sdn,但随后 sdm 开始做一些拖累阵列的事情,现在 sdn 只有一半繁忙。
但是,无论出于什么原因,这种情况只有在 VM 内部运行测试时才会发生。如果我从虚拟机管理程序运行它,一切都正常,性能至少 2 分钟内不会下降。虚拟磁盘驱动程序、ide 或 virtio 的选择不会影响结果。
有人遇到过这样的问题吗?根本原因是什么?如何提高性能?
编辑:根据要求提供更多信息(无论出于什么原因,我一开始并没有想到这一点)
OS: CentOS 6.4
Kernel: 2.6.32-358.el6.x86_64
mdadm --detail /dev/md104
/dev/md104:
Version : 1.2
Creation Time : Mon Feb 3 20:02:02 2014
Raid Level : raid1
Array Size : 468720320 (447.01 GiB 479.97 GB)
Used Dev Size : 468720320 (447.01 GiB 479.97 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Wed Feb 26 14:50:36 2014
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : xxx:104 (local to host xxx)
UUID : aaaaaaaa:bbbbbbbb:cccccccc:dddddddd
Events : 28
Number Major Minor RaidDevice State
0 8 192 0 active sync /dev/sdm
1 8 208 1 active sync /dev/sdn
我已将 uid 和主机名清空。