Procesadores en el host: Sockets, GHZ, cores y Hyperthreading

Introducción

En un mercado en el que cada vez queremos consolidar mas servidores y escritorios sobre los servidores físicos, la demanda obliga a Intel y AMD a sacar procesadores con mas cores, además últimamente estamos viviendo el resurgir del hyperthreading.

En este articulo simplemente vamos a tratar de entender mejor algunos conceptos importantes sobre como pensar y usar los procesadores en nuestros servidores de virtualización y cual es el impacto de crear VMs con mas de un procesador.

En adelante usare la siguientes abreviaturas:

VM= Maquina virtual

VP= Procesador virtual (el procesador dentro de una VM)

HT= Hyperthreading

LP= Procesador lógico (es el hilo en si de proceso equivale a un core si no se tiene HT, si un core tiene HT cada core son dos LPs)

Que vamos a ver en este articulo

Los puntos que trataremos serán los siguientes:

  • Escoger un procesador
  • Cores y mas cores
  • El retorno del Hyperthreading
  • Entender los procesadores virtuales y como Hyper-V funciona a nivel de proceso
  • Reservas y NUMA
  • Consideraciones con respecto al análisis de la consolidación de servidores y el uso de procesador

Escoger un procesador

Hoy en día hay infinidad de procesadores y cuando compramos un servidor en muchas ocasiones últimamente solo se esta mirando Nº de procesadores y Nº de cores, sin embargo hay muchos aspectos muy importantes.

Es una obviedad pero cada procesador tiene un rendimiento diferente, en Internet podemos encontrar varias paginas donde nos muestran estas diferencias, que como veis en la siguiente imagen pueden ser realmente muy significativas:

image

El rendimiento que obtengamos de los procesadores especialmente los multi core y mas cuando los empleamos para virtualizar puede estar muy influenciado por los componentes que rodean a cada core, la cache el chipset y los buses son elementos muy importantes, la calidad de la placa madre y las especificaciones del servidor deben tener importancia a la hora de escoger nuestro procesador.

Cuando compramos un servidor podemos elegir gran cantidad de opciones de procesador que debemos pensar cuidadosamente para extraer el máximo de nuestra inversión:

image

Además los procesadores pueden incorporar funcionalidades como SLAT que pueden ser mas que criticas si por ejemplo estamos hablando de servidores de virtualización sobre los que tendremos maquinas virtuales VDI o servidores de Terminales, si no estamos al tanto de estos aspectos es mas que interesante dejarse aconsejar por un experto antes de realizar el pedido.

Como vimos en otro post el procesador es un aspecto muy importante a la hora de mejorar el coste por VM (La importancia del equilibrio en la elección del host- Impacto en el coste por VM )

Cores y mas cores

Aunque nos pueda sorprender un poco no es lo mismo el rendimiento de dos procesadores que de un procesador de 2 cores, si bien el numero de procesadores suele tener mas peso en el precio que el Nº de cores y además no podríamos conseguir los ratios de consolidación que queremos sin usar muchos cores.

En cualquier caso es algo que debemos saber aunque sea solo por hablar con criterio, la siguiente imagen muestra un análisis efectuado para evaluar el rendimiento de procesadores multi-core con cargas OLTP.

image

 

Intel realizo hace tiempo un informe comparing_multicore_server_virtualization_07-2601w.pdf en el que podemos encontrar también información muy interesante especialmente en los diferentes consumos energéticos que experimentan los procesadores multi-core :

image

Tener en cuenta también que la gestión de energía del sistema operativo tiene impacto en el rendimiento de la virtualización, si tenéis servidores host con cargas muy variables podéis experimentar un aumento del rendimiento ajustando los planes de ahorro de energía.

El retorno del Hyperthreading

Otro aspecto que cada vez aparece mas es el de Hyperthreading (HT) gracias a HT un solo core puede correr 2 hilos a la vez, Intel lo explica así:

“ HT adds circuitry and functionality into a traditional processor to enable one physical processor to appear as two separate logical processors. The added circuitry enables the processor to maintain two separate architectural states and separate APIC which provides multi-processor interrupt management and incorporates both static and dynamic symmetric interrupt distribution across all processors. The shared resources include items such as cache, registers, and execution units to execute two separate programs or two threads simultaneously ”

Y AMD a su vez dijo:

“So – cores are like bikes, threads are the riders. Running more threads increases throughput for applications as long as you have available cores. If you have threads waiting to be scheduled and no available cores – you have a bottleneck.”

De cara a Hyper-V los cores con HT cuentan como 2 procesadores, sin embargo debemos tener en cuenta que Hyper-V soporta hasta 64 procesadores en el host así que si tenemos mas de 32 cores en el servidor tenemos que deshabilitar HT para no superar ese limite de 64.

Hyper-V ha sido diseñado para beneficiarse de HT y el rendimiento de tus VMs será mejor con el que sin el.

Es difícil hacer una recomendación general pero creo que la mas acertada seria decir que uséis HT como una ventaja pero que no lo tengáis en cuenta a la hora de dimensionar.

Por ejemplo sabemos que Microsoft en VDI con Windows 7 soporta hasta 12 procesadores virtuales por procesador lógico, en el caso de un core con HT esto contara como dos LP, a esto lo denominamos ratio VP:LP, bien usar HT para dimensionar nos llevaría a pensar que podemos correr 24VP por core y esto desde mi punto de vista es excesivo, si leéis los posts de diferentes grupos de producto como SQL, Exchange, etc os daréis cuenta de que es mejor dimensionar con respecto a los cores sin HT y luego emplear HT como una ventaja añadida.

Entender los procesadores virtuales y como Hyper-V funciona a nivel de proceso

Se que es básico pero permitirme decirlo; en un host de Hyper-V nunca debemos de correr ninguna carga que no sea Hyper-V.

Es un error poner por ejemplo un DC en el servidor de Hyper-V, si necesitas el DC ponlo en una VM sobre el Hyper-V, es muchísimo mejor.

image

Hyper-V ha sido diseñado para gestionar los recursos no para competir por ellos.

Obviamente no nos queda mas remedio que poner ciertas cosas en la partición padre tales como el antivirus o los agentes de System Center.

En Hyper-V 2008 R2 SP1 como sabéis solo es posible de forma soportada configurar maquinas virtuales con un máximo de 4 procesadores virtuales VP, esto además depende también del sistema operativo de la VM ya que algunas solo soportan 1 o 2 procesados como máximo.

image

Por desgracia es muy común que los administradores seleccionen siempre mas de 1 procesador virtual para sus maquinas pensando que esto supone un aumento de rendimiento.

En mi opinión ninguna VM tiene que tener mas de 1 procesador si no lo usa y esto bien se puede saber por que estemos convirtiendo un servidor y sepamos que esta usando exhaustivamente mas de 1 procesador o bien por que tengamos una monitorización adecuada y los datos nos arrojen esta necesidad de mas de un procesador.

Antes que nada hay que tener en cuenta que no todas las cargas se benefician de un mayor numero de procesadores pero si que tanto para el sistema operativo dentro de la VM como para el host que la soporta tener mas de un procesador (SMP) supone una carga añadida.

Podemos decir que en Hyper-V un VP nunca esta ligado de forma estática a un LP, asignar un VP a una VM solo indica que le estamos dando un tiempo de proceso.

Si que es cierto que Hyper-V mantiene en cada VP un atributo de “procesador lógico preferido”  y por defecto tratara de ejecutar el hilo sobre ese LP.

Simplificando, cuando una VM tiene mas de un procesador, cada vez que la VM necesita “proceso” el host tiene que encontrar disponibilidad de tiempo simultanea en el numero de procesadores que tenga la VM, esto como podéis entender es mas complicado cuanto mas VPs tienen las VMs y cuanto mas VMs tiene un host.

Por ejemplo muy común usar 2 procesadores para VDI cuando la mayor parte del tiempo las apps no saben usarlo y lo mas normal serán patrones de carga como este:

image

Moraleja: usa mas de un procesador en las VM solo cuando sea necesario.

Para los mas avanzados de vosotros os diré además que cuando ponemos VMs con 4 micros estamos aumentando las posibilidades de que la VM tenga que estar ejecutándose en mas de un nodo NUMA lo que cambia mucho como funciona a bajo nivel la asignación de procesadores.

Hay otros aspectos a tener en cuenta a la hora de configurar los VP de una VM:

Si un cluster tiene nodos con diferentes tipos de procesadores es muy importante marcar siempre la casilla “allow migration to a virtual machine host with a different processor” para que las Live Migration funcionen. (Podéis hacerlo por script en todas las VMs del cluster).

image

Un parámetro que causa mucha confusión es el de CPU Type en SCVMM, este parámetro no es para limitar los MHZ de las CPU en la VM lo que es imposible dado que Hyper-V usa virtualización por hardware y el procesador se expone a la VM tal y como es físicamente.

Este parámetro simplemente nos vale para darle una pista a SCVMM sobre como creemos que esta VM usa el procesador si mucho o si poco, mi recomendación es que si no lo vais a usar cuidadosamente y a reevaluar periódicamente lo dejéis en todas las VM al máximo.

SCVMM usa esta información como parámetro del algoritmo de intelligent placement por ejemplo cuando queremos mover una VM de servidor indicándonos cual es el mejor servidor para esta VM en base a este y otros muchos criterios.

Aquí tenéis un post de un compañero sobre como afecta este parámetro al algoritmo de Intelligent placement (https://blogs.technet.com/b/mghazai/archive/2009/12/02/what-is-cpu-type-in-scvmm-2008-r2-vm-processor-hardware-profile.aspx )

Reservas y NUMA

Hyper-V tiene una arquitectura muy avanzada y a diferencia de otras plataforma de virtualización es mucho mas moderna, esto hace que no sea necesario contar con el truco de asignar una VP a un LP generando una afinidad, Hyper-V ejecutara los hilos de los VP en el LP que sea mas apropiado en cada momento.

Solo cuando existe un ratio 1:1 entre VPs y LPs Hyper-V tiende a mantener cierta afinidad entre los VPs y LPs sin embargo es un escenario poco común y difícil de mantener en un cluster cuyas ventajas además no son importantes.

Siempre lo digo; yo no soy amigo de las reservas en virtualización, las infraestructuras virtualizadas son muy dinámicas y los sistemas dentro de las empresas también, esto implica que lo que en un momento es super importante a los X meses deja de serlo y nadie se acuerda de que se configura la VM como super prioritaria.

Sin embargo a veces puede ser necesario y para eso en SCVMM tenemos las prioridades tanto de procesador como de memoria:

image

Mas fuertes aun son los parámetros que podemos configurar desde la propia consola de Hyper-V, por favor usarlas con cuidado y criterio y nunca juntéis las de SCVMM con la de Hyper-V.

image

Como veis en la captura es posible configurar limites o reservas para los procesadores virtuales, si se pone el limite de procesador a 0 la VM no arranca Sonrisa que le ha pasado a mas de 1.

Para los mas avanzados de vosotros que sepáis lo que es NUMA y como configurarlo debemos de ser cuidadosos también con esto, si por ejemplo el servidor genera grupos NUMA cada 2 procesadores crear una VM de 4VP no será muy eficiente aunque funcionara bien, espero poner un post sobre NUMA en mas detalle dentro de poco para aquellos que no lo conozcan.

De forma muy sencilla puedo explicar NUMA diciendo que podemos generar ciertos grupos que establezcan una afinidad entre recursos hardware, es posible vincular VMs a grupos NUMA lo que desde luego no recomiendo para todo el mundo pero que en situaciones extremas puede tener importancia.

Consideraciones con respecto al análisis de la consolidación de servidores y el uso de procesador

Es curioso que cuando se va a virtualizar un servidor pensemos automáticamente que si el servidor a consolidar tiene 4 micros la VM resultante tiene que tener 4 micros.

Digo que es curioso por que en mucha ocasiones el servidor físico tiene 1.3GHZ por ejemplo y lo vamos a poner sobre micros XEON a 2.8GHZ que es como 3 veces mas rendimiento procesador a procesador en muchos casos.

Conclusiones

Los procesadores son una parte fundamental de nuestra plataforma de virtualización como profesionales entender y analizar adecuadamente los aspectos relacionados con ellos garantiza que la calidad de nuestras arquitecturas y dimensionamientos esten a la altura de lo que esperan los clientes.

Un saludo a todos!

Comments

  • Anonymous
    April 09, 2011
    Hola Dani, Muchsimas gracias por el post, está genial, Al menos a mí me ha venido de lujo para profundizar un poco más sobre los proecesadoeres en Hyper-V y supongo que no soy el único administrador de virtualización que tiene sus dudas al elegir los procesadores para el host o la configuración de virtual processors para las VMS. Hay un par de  cosas que no me quedan del todo clara y me gustaría consultarte:
  • Yo también creo que por defecto la mejor configuración para una VM es 1 Virtual Processor, pero como puedo o debo monitorizar correctamente el uso de este virtual processor en la máquina virtual para saber el uso que esta haciendo del mismo y determinar si tengo que añadirle más.
  • Ultimamente estoy virutalizando bastante servidores RDS por supuesto en host que tienen el SLAT activiado, he leido en ciertas páginas y foros que no es recomendable usar más de un virtual processor en servidor RDS, pero yo pienso que en ciertas ocasiones cuando las aplicaciones usan intesivamente la cpu puede ser recomendable usar más de uno, ¿Cual es tu opinión al respecto? Buen fin de semana y gracias por tus comentarios