Sobre la afinidad de vCPUs a cores. Sé que se puede hacer (aunque no tenía claro cómo…). Creía recordar haber leído que está desaconsejado en cuanto a mejora de asignación/compartición de recursos para otras VMs, pero me puse a investigar…
Y os cuento como funciona:
Tema Afinidad de CPU
No es necesario, ni es recomendable por afecta al scheduling de las vCPUs y no permite el vMotion ni el Storage vMotion. Y digo que no es necesario, porque los host ESXi del cluster donde reside la VM tienen arquitectura NUMA, con lo cual el hipervisor siempre tratará de ejecutar todos los vCPUs de la VM en el mismo procesador de n-core para tomar ventaja de la localización de memoria que trae este tipo de arquitectura. Mas info http://frankdenneman.nl/2010/02/sizing-vms-and-numa-nodes/
Sobre los problemas de rendimiento de SQL sobre VM
Es necesario recalcar que las VM con SQL con respecto a las físicas sólo existe una pérdida de un 5-8% de rendimiento (en el peor de los casos) y muchas veces este pequeño desfase de rendimiento no supone problemas importantes. También se debe tomar en cuenta que si la VM tiene los mismos vCPUs y memoria que era una máquina física (si las comparamos), pero no por eso debe tener un rendimiento cercano. Al contrario, mientras más vCPU tenga una VM más difícil será para el hipervisor asignarle recursos a esta VM. Por tanto, asignarle la misma cantidad de vCPUs a la VM de forma innecesaria genera problemas de rendimiento. Se debería comenzar asignando pocos vCPUs e ir incrementando si fuera necesario.
Recomendaciones para esta VM:
1.- Disminuir la cantidad de vCPUs. La por ejemplo, la VM tiene 8 vCPUs, recomiendo bajar a 4 vCPUs o como mínimo a 6 vCPUs. (esto es por temas de la arquitectura NUMA que tienen los hosts donde residen estas VMs). Es muy probable que la distribución de los vCPUs en los nodos NUMA, ya que afectando al rendimiento de la VM.
2.- Para tomar ventaja de la arquitetura Intel Nehalem que tienen los hosts, se deberían activar Large Pages en el Sistema Operativo de la VM y en el SQL (en los ESXi ya está habilitado por defecto). Y cuidado con esta nota técnica de Microsoft http://support.microsoft.com/kb/975992
3.- Además de verificar que el hipervisor tenga suficientes recursos de CPU y Memoria, reservar Mhz y RAM si es necesario, no tener varias VMs de alto I/O en el mismo datastore y seguir las recomendaciones de Microsoft para SQL server (http://technet.microsoft.com/library/Cc966534)
Fuentes:
http://www.vmware.com/files/pdf/sql_server_best_practices_guide.pdf Lectura recomendable de la pagina 6 a 10 (el resto es “lata”)
http://kb.vmware.com/kb/1002951 --> Tips for configuring Microsoft SQL Server in a virtual machine
http://communities.vmware.com/docs/DOC-8964
Tema Hyperthreading:
Resumiendo: el hardware virtual de las VMs no tiene hyperthreading; sin embargo, el ESXi, por defecto, sí planifica diferentes vCPUS (incluso de diferentes VMs), en sendos threads de un core dado, por lo que en la práctica sí está habilitado.
Tenemos la opción de evitarlo seleccionando la opción “HT = NONE” en todas las VMs SQL, con lo cual, cada vCPU de un SQL se ejecutará, en un momento dado, en un “core monohilo”.
A partir de ahora, en los host ESX servidor SQL debe ir con Hyperthreading deshabilitado.
Podemos hacer que la VM, vea los procesadores como un solo procesador fiscio (six-core o del número de cores que dispoga el host ESX, pero esta opción no mejorará mucho el rendimiento):
En el caso de que cada procesador sea de 8-cores:
· Edit Settings, Configuration Parameters, y añadir la siguiente línea: cpuid.coresPerSocket 8
Sobre todos para poder jugar con temas de paralelismo en SQL Server… Ya que si no activamos la anterior opción, la VM o SQL verán los procesadores como si fueran MONO-Core.
SERVIDORES SQL
Por recomendación de Microsoft, conviene deshabilitar Hyperthreading en servidores con SQL Server. Como la recomendación de VMware, desde vSphere 4.0, es habilitar HT a nivel ESXi, simulamos la no utilización de HT denegando la compartición de dos threads de cada core, a nivel de VM. Configuramos lo siguiente sólo para VMs con SQL Server:
Botón derecho, Edit Settings, y seleccionamos la opción “None” indicada

Apunte y recopilación por Norman M. Pardell
Puedes consultarme, si deseas cualquier aclaración, pregunta o sugerencia en: Contacto, contestaré tan pronto como me sea posible.