Qué es el "stolen time"
- Detalles
- Categoría: Gurú
- Creado en Jueves, 18 Octubre 2012 13:14
- Visitas: 381
Si observan cuidadosamente la salida de vmstat o top, hay una columna llamada "st" (o %st en top) que indica la cantidad de "stolen time", esto supuestamente es la cantidad de tiempo de CPU que el hypervisor le "robó" a los procesadores virtuales (si es que tenían algo para ejecutar, no cuenta si estaban "idle") ejecutando cualquier otra cosa en lugar de código perteneciente al guest virtual.
En otras palabras, es la cantidad de tiempo que los procesadores virtuales tuvieron código para ejecutar pero no se les asignó un CPU físico, debido a la planificación o sobrecarga en el host. El % de CPU que no estuvo disponible para la VM debido a la sobrecarga de la virtualización.
Los man page tanto para vmstat como para top no explican demasiado en profundidad de qué se trata esto del "steal time" o "stolen time":
man vmstat
"st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown."
man top
"st = steal (time given to other DomU instances)"
En Internet no encontré mucha información al respecto. Mi duda era: ¿esto cuenta sólo para XEN? Porque KVM utiliza full virtualization. Viendo el manual de top, éste habla de dominios (DomU)...
Debatiendo con colegas amigos surgió la idea de que el ST debería estar disponible para todo SO paravirtualizado (kernel reescrito para ser "consciente" de la virtualización, como por ejemplo Xen...
Leyendo más documentación y manuales logré entender que el steal time se mide en los guests, no en el host. Es la cantidad de tiempo que el CPU virtual tenía trabajo por hacer, pero permaneció esperando que el hypervisor le asignara un CPU físico. Por lo tanto, a pesar de que se mide en el OS guest, ¿será necesario alguna interacción con el hypervisor? ¿Cómo hace el kernel guest para detectar que el CPU virtual estaba esperando CPU físico sin interactuar con el hypervisor?
Luego de disipar mis dudas, logré entender que para calcular el "steal time" es necesario sí o sí ayuda del hypervisor y depende de la tecnología de virtualización utilizada.
De la documentación de KVM obtuve la respuesta. La tecnología de virtualización (en este caso KVM) agrega registros específicos del modelo (model-specific registers más conocidos como MSR) a los VCPU. Uno de estos MSR es utilizado por el hypervisor como un contador de la cantidad de tiempo que le robó a la VM (suponiendo que el hypervisor es honesto :D). Es decir, el hypervisor va actualizando periódicamente un registro de CPU que contiene un contador con la cantidad de stolen time, luego el kernel guest lee el contador y determina cuanto tiempo le fue robado, para así poder calcular el uso de CPU real (en espacio kernel y usuario).
En la siguiente captura se observa una máquina virtual KVM con un %st mayor a cero:

En la documentación oficial del kernel Linux se encuentra explicado en detalle el "steal time" y los registros MSR con los que KVM lo implementa:
https://github.com/torvalds/linux/blob/master/Documentation/virtual/kvm/msr.txt
Extracto:
La técnica para contabilizar el ST es utilizando un timer virtual, y contabilizando el tiempo de CPU utilizando el timer virtual en lugar de basándose en ticks (como se hacía tradicionalmente en el kernel Linux). Estas slides de IBM explican cómo se hace:
Finalmente un toque de humor, la posible causa de tener un alto "steal time":
Sponsor
Hits Recientes
- Instalación y configuración de OpenVPN hace 2 minutos
- Acceso remoto a máquinas virtuales KVM utilizando el cliente SPICE hace 3 minutos
- Debian cheat cube hace 3 minutos
- Cómo ver el tráfico de la red con wireshark hace 6 minutos
- Cómo descomprimir archivos 7zip hace 7 minutos
- Cómo instalar impresoras HP en Slackware 13.1 hace 10 minutos
- Linux it's like a tipi hace 11 minutos
- Cómo detener el firewall en Red Hat hace 12 minutos
- Discriminar logs de Apache en logwatch según VirtualHost hace 13 minutos
- Cómo crear y administrar máquinas virtuales KVM desde línea de comandos hace 14 minutos
Sponsor
Más Leído
- Virtualización en CentOS 6.2 utilizando KVM (3268)
- Instalación y configuración de OpenVPN (2909)
- "ps aux" explicado (2311)
- Instalar samba en CentOS 6.2 (2245)
- Por qué no utilizar 000webhost.com (2023)
- Utilizar SPICE en máquinas virtuales KVM (1912)
- Cómo configurar el proxy en Ubuntu Server 12.04 (1894)
- Compiz-fusion en CentOS 6.3 (1878)
- Acceso remoto a máquinas virtuales KVM utilizando el cliente SPICE (1735)
- Cómo configurar Samba en Red Hat/CentOS (1637)


