Identificación de proveedores de nube en servidores: lista de verificación cruzada de KVM y QEMU
Identifica el tipo de virtualización del proveedor de nube con métodos reproducibles
Verificación cruzada en cuatro dimensiones: dmesg, DMI, virtio, Steal Time, para identificar de forma reproducible los proveedores de nube KVM.
Indicios de KVM en dmesg
Cuando obtienes un servidor en la nube, el primer paso no es ejecutar systemd-detect-virt, sino revisar el registro del kernel. dmesg es la 'confesión' más honesta, porque la capa de virtualización KVM/QEMU deja evidencia sólida durante el arranque. Lo más típico es que aparezcan directamente frases como KVM: disabled by BIOS o KVM: vcpu 0, cpu 0, pero los proveedores de la nube suelen limpiar bastante los registros. Una señal más fiable son las tablas ACPI y los dispositivos PCI: ejecuta dmesg | grep -i -E 'kvm|qemu|virtio|hypervisor'; si ves Hypervisor detected: KVM, prácticamente está confirmado.
Pero que dmesg no contenga estas palabras clave no significa que no sea KVM: muchos fabricantes utilizan firmware personalizado. En ese caso, hay que mirar dmesg | grep -i smbios o combinarlo con los archivos en /sys/class/dmi/id/. Otra pista sutil es la fuente de reloj: los invitados KVM suelen mostrar clocksource: tsc o kvm-clock, mientras que Xen normalmente es xen. Verifícalo con cat /sys/devices/system/clocksource/clocksource0/current_clocksource; si devuelve kvm-clock, la identidad KVM queda confirmada.
Consejo forense: la marca de tiempo
-Tdedmesgte ayuda a confirmar si la capa de virtualización se cargó al principio del arranque o se inyectó dinámicamente más tarde; esto último suele indicar virtualización anidada.
Inferencia del fabricante mediante el nombre de producto DMI
Mirar solo dmesg puede llevar a error, porque el comportamiento de KVM en Alibaba Cloud, Tencent Cloud y AWS es básicamente el mismo. En este punto hay que recurrir a DMI/SMBIOS, la "base de datos de huellas de fabricantes". cat /sys/class/dmi/id/product_name y cat /sys/class/dmi/id/sys_vendor son los dos comandos que más conviene recordar.
Las cadenas de firmware QEMU varían enormemente entre los distintos proveedores de nube: Alibaba Cloud suele devolver Alibaba Cloud ECS, Tencent Cloud devuelve TencentCloud, Huawei Cloud devuelve Huawei Cloud. Aunque la tecnología Nitro de AWS no es KVM tradicional, las generaciones más antiguas aún muestran Xen o KVM. En Microsoft Azure es común encontrar Microsoft Corporation junto con Virtual Machine. Si ves QEMU Standard PC (i440FX + PIIX, 1996), indica que el proveedor no se molestó en modificar la plantilla, lo cual ya es una señal de identificación.
Un método más avanzado consiste en comparar directamente la información de System Information y Baseboard de dmidecode -t 1 y dmidecode -t 2. Cabe señalar que algunos pequeños centros de datos modifican las cadenas DMI para hacerse pasar por grandes proveedores, por lo que DMI debe validarse de forma cruzada con los dispositivos virtio y el Steal Time. Si quieres verificar rápidamente la identidad de tu servidor en la nube, puedes usar primero la página de detección gratuita de CloudWorth: /app, que combina múltiples rutas de /sys para determinarla automáticamente.
Detección de KVM mediante la lista de dispositivos virtio
virtio es el marco de E/S paravirtualizado de KVM/QEMU. Basta con que aparezca un dispositivo virtio para estar, básicamente, en el lado de KVM (Xen y OpenVZ no utilizan este sistema). El comando para comprobarlo es ls -l /sys/bus/virtio/devices/, o bien lspci | grep -i virtio. Verás directorios como virtio0, virtio1, que representan dispositivos de bloque, tarjetas de red, globos (balloon), etc.
Para una determinación más precisa, hay que fijarse en el ID de fabricante PCI: lspci -nn | grep -i -E '1af4|virtio', donde 0x1af4 es el ID de fabricante PCI oficial de Red Hat/virtio. Si la tarjeta de red muestra Red Hat, Inc. Virtio network device, sin duda es KVM/QEMU. Del mismo modo, si el dispositivo de bloque es Virtio block device, significa que el disco también sigue la ruta virtio.
Si no quieres usar lspci, puedes hacer una verificación cruzada con /proc y /sys: comprueba si 1af4 aparece en cat /proc/bus/pci/devices, o usa find /sys/devices -name 'virtio'. Nota: los nuevos AWS Nitro y algunos proveedores de nube utilizan EFA o ENA en lugar de tarjetas de red puramente virtio, pero los dispositivos de bloque siguen conservando virtio, por lo que hay que fijarse primero en el controlador de disco. Cuando en el directorio virtio aparecen los subdirectorios block y net, casi se puede descartar el modo PV de OpenVZ y Xen.
Steal Time para identificar especificaciones infladas
Identificar al proveedor de nube KVM es solo el primer paso; lo clave es determinar si este servidor en la nube tiene "especificaciones infladas". Steal Time (tiempo robado) es el tiempo de CPU que el hipervisor le arrebata a la máquina invitada KVM. Cuanto mayor sea el valor, más grave es la sobresuscripción del servidor físico. La forma más sencilla de leer esta métrica es el %st en top, pero la más precisa es el campo steal en /proc/stat.
Desde el kernel de Linux 2.6.26, se han realizado numerosas optimizaciones al reloj KVM y a la E/S de red, lo que hace que la medición de Steal Time sea más fiable. Si la columna st de vmstat 1 es mayor del 5% durante un período prolongado, o si el octavo número de cat /proc/stat | grep '^cpu ' (el intervalo de tiempo de steal) sigue creciendo, significa que tus vCPU son a menudo secuestradas por los vecinos. Aquí tienes un conjunto de comandos de verificación en vivo:
# 每2秒采样一次,观察 st 列
vmstat 1 5
# 查累计 steal 时间(单位:jiffies)
awk '/^cpu / {print "steal:", $8}' /proc/stat
# 用 mpstat 看单核被偷比例
mpstat -P ALL 1 2Una prueba más contundente es la "maratón de CPU + comparación de Steal": ejecuta stress-ng --cpu 4 durante cinco minutos mientras registras el %steal de mpstat. Si el porcentaje promedio de robo supera el 10%, básicamente se puede confirmar que la sobresuscripción es grave y que debes comparar el precio de compra nuevo antes de renovar. Si quieres calcular cuánta diferencia hay entre tu plan actual y el descuento para nuevos usuarios, puedes consultar la herramienta de comparación de precios de servidores en la nube de CloudWorth: /app. Recuerda: un Steal Time alto no significa que el proveedor no sea confiable, pero indica que hay "recursos físicos insuficientes", lo cual es una referencia importante para las decisiones de renovación y migración. Al cruzar y comparar dmesg, DMI, virtio y Steal Time, podrás identificar con precisión, como en una investigación forense, al proveedor de nube y el nivel real de rendimiento.
FAQ
¿Cómo identificar un proveedor de nube KVM mediante dmesg?
Ejecuta dmesg | grep -i kvm y comprueba si hay registros relacionados con KVM; si aparecen, confirma la virtualización KVM.
¿Cómo deducir el proveedor de nube a partir del nombre del producto DMI?
Ejecuta dmidecode -s system-product-name; la salida, como Alibaba Cloud ECS, KVM, etc., permite determinar el proveedor.
¿Cómo verificar KVM con la lista de dispositivos virtio?
Revisa lspci o ls /dev/vd*; la presencia de discos y tarjetas de red virtio suele indicar que se está ejecutando en una plataforma KVM.