Usamos o kvm para virtualização, as imagens do disco são armazenadas como volumes lógicos. Os volumes lógicos são armazenados em um conjunto de matrizes RAID1 (mdadm) de software compostas de SSDs Intel DCS3500 (cada matriz é um volume físico no grupo de volumes).
Se eu criar um volume lógico dentro desse grupo de volumes e usar fio para determinar a IOPS, obtenho cerca de 40 mil IOPS para blocos de gravação aleatória de 4KB. Ótimo. iostat mostra ambos os SSDs utilizados para cerca de 100%. Se eu criar uma máquina virtual que use o mesmo volume lógico para armazenamento e executar o mesmo comando fio, recebo inicialmente 20K IOPS (ótimo), mas depois de 30s ou mais ele cai para 7-8K. O estranho é que o iostat agora mostra um SSD usado em 100%, enquanto o outro está apenas em 45%.
Aqui estão os gráficos ao longo do tempo (feitos por iostat -x 2 no hypervisor)
Como você pode ver, no início o gargalo parece ser sdn, mas o sdm começa a fazer algo que arrasta o array e agora o sdn está apenas meio ocupado.
No entanto, por alguma razão, isso só acontece se o teste for executado dentro da VM. Se eu executar o hipervisor, tudo está OK e o desempenho não cai por pelo menos 2 minutos. A escolha do driver de disco virtual, ide ou virtio não afeta o resultado.
Alguém já encontrou um problema desses? Qual é a causa subjacente? Como faço para aumentar o desempenho?
EDIT: Mais informações, conforme solicitado (por qualquer motivo eu não pensei nisso em primeiro lugar)
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
Eu apaguei o uid e o nome do host.