Bajo rendimiento de la red de la máquina virtual KVM

Bajo rendimiento de la red de la máquina virtual KVM

Estoy ejecutando una máquina virtual Linux de 32 bits en KVM. La máquina host es una máquina Linux de 64 bits conectada a una LAN. Intentar transferir archivos con scp desde la máquina KVM a un servidor en la LAN proporciona un rendimiento abismal, alrededor de 500 kB/s a través de gigabit Ethernet. Alrededor del 1% de la tasa esperada. ¿Alguna sugerencia?

Respuesta1

Considere usarvirtio. Permite una conexión directa entre la VM y el host sin necesidad de emular hardware (lento). Con él medí altas mejoras en el rendimiento de la red.

Por ejemplo, puede habilitar el dispositivo de red virtio mediante el parámetro de línea de comando kvm "-net nic,model=virtio".

Si está utilizando los dispositivos de bloque virtio, tenga en cuenta que los nuevos nombres de dispositivos son "vda1", etc., pero esto no debería ser un problema ya que las distribuciones actuales de Linux detectan las particiones según sus UUID.

Respuesta2

Podría ser un problema con el rendimiento de E/S del disco dentro del invitado. Si está utilizando una imagen de disco, se aplican algunos pasos para tener un mejor rendimiento:

Primero, tendrás que jugar con la cacheopción de configuración del disco de tu invitado.

De forma predeterminada, el almacenamiento en caché de escritura directa se utiliza para todos los dispositivos de bloque. Esto significa que la caché de la página del host se utilizará para leer y escribir datos, pero la notificación de escritura se enviará al huésped solo cuando el subsistema de almacenamiento haya informado que los datos están escritos.

El almacenamiento en caché de reescritura informará que las escrituras de datos se han completado tan pronto como los datos estén presentes en la caché de la página del host. Esto es seguro siempre que confíes en tu anfitrión. Si su anfitrión falla o se corta la energía, entonces el huésped puede experimentar daños en los datos. Cuando se utiliza la opción -snapshot, el almacenamiento en caché de reescritura se utiliza de forma predeterminada.

La página de host se puede evitar por completo con cache=none. Esto intentará realizar E/S del disco directamente en la memoria de los invitados. QEMU aún puede realizar una copia interna de los datos.

Algunos controladores de bloques funcionan mal con caché=escritura directa, en particular qcow2. Si el rendimiento es más importante que la corrección, se debe utilizar cache=writeback con qcow2. De forma predeterminada, si no se especifica ningún almacenamiento en caché explícito para una imagen de disco qcow2, se utilizará cache=writeback. Para todos los demás tipos de discos, cache=writethrough es el valor predeterminado.

Luego, también tendrás que jugar con la opción elevadora del kernel: tendrás que agregar elevator=noopen tu línea de comando de grub linux así:

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

Una mejor explicación de esto está disponible en:http://lonesysadmin.net/2008/02/21/elevatornoop/; pero en pocas palabras, el kernel de Linux del anfitrión y el kernel de Linux invitado intentan optimizar la E/S y tiende a ser peor que cualquier otra cosa para el invitado (el invitado debe dejar esta tarea al anfitrión).

información relacionada