Baixo desempenho de rede da máquina virtual KVM

Baixo desempenho de rede da máquina virtual KVM

Estou executando uma máquina virtual Linux de 32 bits no KVM. A máquina host é uma máquina Linux de 64 bits conectada a uma LAN. A tentativa de transferir arquivos com scp da máquina KVM para um servidor na LAN oferece um desempenho péssimo, cerca de 500kB/s em Ethernet gigabit. Cerca de 1% da taxa esperada. Alguma sugestão?

Responder1

Considere usarvirtio. Permite uma conexão direta entre a VM e o host sem a necessidade de emular hardware (lento). Medi melhorias de alto desempenho de rede com ele.

Por exemplo, você pode ativar o dispositivo de rede virtio pelo parâmetro de linha de comando kvm "-net nic,model=virtio".

Se você estiver usando dispositivos de bloco virtio, observe que os novos nomes dos dispositivos serão "vda1" etc., mas isso não deve ser um problema, pois as distribuições atuais do Linux detectam as partições de acordo com seus UUIDs.

Responder2

Pode ser um problema de desempenho de E/S do disco dentro do convidado. Se você estiver usando uma imagem de disco, algumas etapas serão aplicadas para obter melhor desempenho:

Primeiro, você terá que brincar com a cacheopção de configuração do disco do seu convidado.

Por padrão, o cache write-through é usado para todos os dispositivos de bloco. Isso significa que o cache da página host será usado para ler e gravar dados, mas a notificação de gravação será enviada ao convidado somente quando os dados forem relatados como gravados pelo subsistema de armazenamento.

O cache de write-back reportará as gravações de dados como concluídas assim que os dados estiverem presentes no cache da página host. Isso é seguro, desde que você confie em seu host. Se o seu host travar ou perder energia, o convidado poderá sofrer corrupção de dados. Ao usar a opção -snapshot, o cache de write-back é usado por padrão.

A página host pode ser totalmente evitada com cache=none. Isso tentará fazer E/S de disco diretamente na memória dos convidados. O QEMU ainda pode realizar uma cópia interna dos dados.

Alguns drivers de bloco apresentam desempenho ruim com cache=writethrough, mais notavelmente, qcow2. Se o desempenho for mais importante que a correção, cache=writeback deverá ser usado com qcow2. Por padrão, se nenhum cache explícito for especificado para uma imagem de disco qcow2, cache=writeback será usado. Para todos os outros tipos de disco, cache=writethrough é o padrão.

Então, você também terá que brincar com a opção elevador do kernel: você terá que anexar elevator=noopna linha de comando do grub linux assim:

# Edit your /etc/default/grub.conf (on Debian-based distribution)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Uma explicação melhor sobre isso está disponível em:http://lonesysadmin.net/2008/02/21/elevatornoop/; mas em poucas palavras, o kernel Linux host e o kernel Linux convidado tentam otimizar a E/S e isso tende a ser pior do que qualquer coisa para o convidado (o convidado deve deixar essa tarefa para o host).

informação relacionada