Curiosidades de KVM: KSM

Imagen de Epe
AdjuntoTamaño
Image icon ksm-10vm-de-900mb-cu.png50.81 KB

Tema: 

Este artículo fue publicado originalmente en http://www.hc6ep.com/2012/02/curiosidades-de-kvm-ksm/

bueno: este tema es buenísimo, me ha encantado de kvm… todo con mesura, pero es una excelente idea.

KSM viene de Kernel Samepage Merging (mezcla de las mismas páginas del kernel).

La idea es que cuando virtualizamos, muy posiblemente las máquinas virtuales que corremos, corren bajo el mismo sistema operativo, por lo tanto la posibilidad de que las memoria de estas máquinas estén manteniendo una copia similar de ciertas páginas de memoria es altísima.

Dicho de otra forma: supongamos que tenemos dos máquinas virtuales: centos1 y centos2, ambos corriendo centos-6.2 por ejemplo. La posibilidad de que ciertas partes de memoria de la máquina “centos1″ tengan la misma información que la máquina “centos2″ es alta, porque posiblemente corren el mismo kernel, quizá procesos similares (mysql, dovecot, sendmail, postfix, apache, etc)..

¿Qué ventajas nos permite esto? Correr varias máquinas virtuales aprovechando al máximo la memoria, pues no se repetirá la misma información que se almacena en la memoria, sino que solamente se mantiene una copia.

Hoy realicé una pequeña prueba, que fue crear 10 máquinas virtuales de CentOS-6, clonándolas por supuesto para hacer el proceso rápido, y luego arrancarlas.

Primero verifiqué que mi kernel del hospedero tuviera KSM activado:


egrep -i ksm /boot/config-2.6.32-220.4.1.el6.x86_64
CONFIG_KSM=y

Entonces a cada máquina virtual le asigné 900MB de RAM, por probar, podría haber usado otro valor. Y luego las arranqué.

Mi sistema hospedero tiene 3GB de RAM solamente, no más. En Xen para CentOS-5 no hubiera podido usar más que 3GB para asignar por máquina por ejemplo hubiera podido correr 2 máquinas de 1gb cada uno y una de 512mb (porque al hospedero en xen hay que dejarle un poco de memoria).

Ahora, en kvm, acabo de arrancar las 10 máquinas virtuales, cada una de 900MB de RAM. Esto sumaría 900MB*10maquinas= 9GB verdad? Pues las máquinas arrancadas consumen menos de 2GB en total!!! No lo crees? mira:

Esto fue antes de arrancar todas las máquinas:


[root@dom0 ~]# free -m
total used free shared buffers cached
Mem: 2982 2908 74 0 2584 32
-/+ buffers/cache: 290 2691
Swap: 511 6 505

En suma, el hospedero está usando aproximadamente 290MB de ram nada más.

Esto es luego de arrancadas las 10 máquinas de 900MB de RAM cada una!!:


[root@dom0 ~]# free -m
total used free shared buffers cached
Mem: 2982 2261 720 0 0 21
-/+ buffers/cache: 2239 742
Swap: 511 64 447

En suma, el hospedero ahora usa 2.2G

por tanto el incremento en el uso de la ram entre el primer escenario (sin máquinas virtuales arrancadas) y el segundo (con las 10 máquinas virtuales arrancadas) es de menos de 2GB.

si miras dentro de una máquina virtual, esta reporta que está usando 900MB.. no menos…

una forma de verificar que el ksm está en efecto haciendo su función es ver la cantidad de páginas ksmeadas:


[root@dom0 ~]# cat /sys/kernel/mm/ksm/pages_sharing
362484

Ahi está, 362mil484 páginas ksmeadas.

Estoy impresionado, pero hay que ser cauteloso, por qué tan bajo consumo? Porque todas las máquinas son iguales y están haciendo exactamente las mismas funciones, en este caso todas las máquinas están simplemente encendidas, realizando NADA .. esperando a que yo me conecte por ssh y nada más.

No hay que ser abusador como en este escenario en el cual arranqué tantas máquinas, leí en algún lugar, luego lo documento, que redhat sugería no se sobrevendiera la memoria por más de un 10% porque a la final las máquinas pueden comenzar a realizar labores diversas y no se pueda hacer uso del KSM al no haber muchas páginas similares.

Aquí las 10 máquinas virtuales corriendo:

Comentarios

Un comentario adicional,

Imagen de Epe

Un comentario adicional, ahora acabo de verificar la ram y no supera los 875mb de uso!


[root@dom0 ~]# free -m
total used free shared buffers cached
Mem: 2982 949 2032 0 15 58
-/+ buffers/cache: 875 2106
Swap: 511 61 450

No lo sé, pero la idea es que puede decrecer, pero fíjate.. puede crecer también su uso, así que cautela ok?

Saludos
epe

EcuaLinux.com

+(593) 9 9924 6504

Servicios en Software Libre

A pesar de las precauciones

Imagen de iknaxio

A pesar de las precauciones que hay que tomar me parece una característica interesante y muy útil bajo situaciones específicas.

Por cierto corrige la línea donde dice:

[quote]Primero verifiqué que mi kernel del hospedero tuviera kvm activado (el de los invitados ...[/quote]

Debería decir:

[quote]Primero verifiqué que mi kernel del hospedero tuviera KSM activado (el de los invitados ...[/quote]

Saludos ;)

"Transporta un puñado de tierra todos los días y construirás una montaña" - Confucio
floss.iknaxio.net

w0w impresionante esa no me

Imagen de falcom

w0w impresionante esa no me la sabia.... pregunta esto se daria en el caso de VM's con un mismo SO ademas corriendo las mismas aplicaciones??
digo x ejem si le mando 9 centos 5.7 y la decima le mando fedora haria lo mismo?

técnicamente serían páginas

Imagen de Epe

técnicamente serían páginas de memoria que contengan lo mismo, si contienen lo mismo, entonces la maravilla.

la verdad es que sí, si tienes 10 máquinas virtuales, 9 con un SO y una con otro, esta solita no tendría muchas coincidencias con las anteriores 9 (si es que tuviera)... lo más probable es que fueran 0 coincidencias y por tanto esta máquina solita usaría toda la memoria que le toque.

ahora, las otras 9 por supuesto tendrán muchas coincidencias pues correrán muchas aplicaciones comunes como por ejemplo: el kernel, el iscsid, el portmap, el auditd... son ejemplos... y claro! mejoraría todo si estas corrieran además las mismas aplicaciones pues habrían más matches.

es por esto que es un tema un poco estocástico y hay que manejarlo con cuidado.

Además dos cosas que seguí leyendo y deben tomarse con más cautela hasta investigar bien: kvm usa una técnica llamada balooning, que todavía no la entiendo para kvm, pero creo comprender que si una máquina no usa toda la memoria, ella reporta como que no la usa (ella debe reportarla) y el sistema entonces sabe que está disponible... no confiara mucho en esto, pero es una ayuda.. está dentro de "virtio" así que si el sistema entiende virtio, puede reportar balooning.. y la otra es que esto de KSM no es útil solamente para virtualización sino que además se sugiere que se use para procesos que corren varios del mismo tipo en memoria de un servidor, por ejemplo varios procesos de apache, tienen muchas páginas de memoria en común. Es un avance en todo sentido.

Saludos
epe

EcuaLinux.com

+(593) 9 9924 6504

Servicios en Software Libre

Muy interesante articulo Epe,

Imagen de RazaMetaL

Muy interesante articulo Epe, no sabia de la existencia de KSM :(

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});

pensé que sabias

Imagen de RazaMetaL

pensé que sabias ;)

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});