Por que o domU é mais rápido que o dom0 no IO?

4

Eu instalei o debian 7 em uma máquina física. Esta é a configuração da máquina:

  • 3 discos rígidos usando o RAID 5
  • Tamanho do elemento de faixa: 1 M
  • Política de leitura: leitura adaptável à frente
  • Política de gravação: escreva por
  • / boot 200 MB ext2
  • / 15 GB ext3
  • SWAP 10 GB
  • LVM rest (~ 500GB)

Eu instalei o postgresql, criei um grande banco de dados (mais de 1GB). Eu tenho uma solicitação de SQL que leva muito tempo para executar (uma instrução SELECT, portanto, ele só lê dados do banco de dados). Essa solicitação leva aproximadamente 5,5 segundos para ser executada. Então, instalei o XEN, criei um domU, com outra distro debian. Neste SO, eu também instalei o postgresql, com o mesmo banco de dados. A mesma solicitação SQL leva apenas 2,5 segundos para ser executada.

Eu verifiquei o kernel no dom0 e no domU. uname-a retorna "Linux debian 3.2.0-4-amd64 # 1 SMP Debian 3.2.41-2 + deb7u2 x86_64 GNU / Linux" em ambos os sistemas. Eu verifiquei os parâmetros do kernel, que são aproximadamente os mesmos. Para aqueles que são relevantes, eu mudei seus valores para fazê-los corresponder em ambos os sistemas usando sysctl. Não vi alterações (as solicitações ainda demoram o mesmo tempo).

Depois disso, verifiquei os sistemas de arquivos. Eu usei o ext3 no domU. Ainda sem alterações.

Instalei o hdparm e executei hdparm -Tt em ambos os sistemas, em todas as minhas partições nos dois sistemas, e obtive resultados semelhantes.

Agora, estou preso, não sei o que é diferente e o que poderia ser a causa de uma diferença tão grande.

Informações adicionais:

  • O Debian é executado em um servidor Dell PowerEdge 2950
  • postgresql: 9.1.9 (dom0 e domU)
  • xen-linux-system: 3.2.0
  • xen-hypervisor: 4.1

Obrigado

EDITAR :

Como Krzysztof Księżyk sugeriu, pode ser devido a algum sistema de armazenamento em cache de arquivos. Eu corri o comando dd para testar a velocidade de leitura e gravação.

Aqui está domU:

root@test1:~# dd if=/dev/zero of=/root/dd count=5MB bs=1MB
^C2020+0 records in
2020+0 records out
2020000000 bytes (2.0 GB) copied, 18.8289 s, 107 MB/s

root@test1:~# dd if=/root/dd of=/dev/null count=5MB bs=1MB
2020+0 records in
2020+0 records out
2020000000 bytes (2.0 GB) copied, 15.0549 s, 134 MB/s

E aqui está dom0:

root@debian:~# dd if=/dev/zero of=/root/dd count=5MB bs=1MB
^C1693+0 records in
1693+0 records out
1693000000 bytes (1.7 GB) copied, 8.87281 s, 191 MB/s

root@debian:~# dd if=/root/dd of=/dev/null count=5MB bs=1MB
1693+0 records in
1693+0 records out
1693000000 bytes (1.7 GB) copied, 0.501509 s, 3.4 GB/s

Qual pode ser a causa desse sistema de cache? E como podemos "consertar" isso? Podemos aplicá-lo ao dom0?

EDIT 2 :

Eu mudei meu tipo de disco virtual. Para fazer isso, eu segui este artigo .

Eu fiz um dd if=/dev/vg0/test1-disk of=/mnt/test1-disk.img bs=16M Então, em /etc/xen/test1.cfg, alterei o parâmetro disk para usar file: em vez de phy: ele deveria ter removido o cache de arquivos, mas eu ainda recebo os mesmos números (domU sendo muito mais rápido para o Postgres)

    
por Paco 11.06.2013 / 12:27

2 respostas

2

Provavelmente é devido ao armazenamento em cache de arquivos. Mesmo que o sistema e sistema baremetal no domU tenham as mesmas configurações em relação ao armazenamento em cache, etc. algumas operações de arquivo no domU serão executadas mais rapidamente do que no baremetal porque o hipervisor armazena de forma transparente as solicitações de E / S do sistema domU. Você pode testá-lo usando o comando dd.

    
por 11.06.2013 / 12:36
0

Eu não sei, mas isso é um comportamento muito estranho. Estou curioso para entender porque o teste dd dom0 é mais rápido que domU e o Postgres acontece do contrário.

Sobre o Postgres Eu penso o mesmo que Krzysztof Księżyk. Isso acontece quando há sobreposição de cache no sistema de arquivos ou algo com memória RAM. Em seus testes, você está desabilitando o cache do Linux?

Qual é a memória alocada para dom0 e domU?

    
por 04.07.2013 / 04:47