El Hard Partitioning o CPU pinning permite, en arquitecturas x86, configurar una máquina virtual para que utilice únicamente los cores o CPU físicas que le indiquemos. Si no se especifica, Oracle VM repartirá la carga entre todas las CPU y cores del servidor físico en el que se esté ejecutando la VM mediante la CPU Affinity.
Normalmente este tipo de configuraciones se llevan a cabo en máquinas virtuales que tienen que cumplir unos requisitos estrictos de licenciamiento por CPU/cores.
Por línea de comandos en el servidor Oracle VM y utilizando comandos de Xen podemos ver claramente la configuración de CPUs de las VM:
# xm vcpu-list Name ID VCPU CPU State Time(s) CPU Affinity 0004fb000006000024 45 0 0 -b- 1243.1 0 0004fb000006000024 45 1 0 -b- 372.5 0 0004fb000006000041 44 0 0 -b- 1208.6 0 0004fb000006000041 44 1 0 -b- 368.6 0 0004fb0000060000e5 32 0 3 -b- 8641.3 0-3 0004fb0000060000e5 32 1 1 -b- 6719.5 0-3 Domain-0 0 0 2 -b- 9662.5 any cpu Domain-0 0 1 6 r-- 6505.9 any cpu
En el ejemplo anterior tenemos 3 ejemplo diferenciados.
- «Domain-0» que tiene 2 vCPU mapeadas contra cualquier CPU física del servidor.
- «0004fb0000060000e5» que tiene 2 vCPU mapeadas contra las CPU 0,1,2,3.
- «0004fb000006000024» que tiene 2 vCPU mapeadas contra la CPU 0.
Como véis, configuraciones de CPU completamente distintas según los requisitos de la VM.
Para configurar estos parámetros podemos utilizar las utilidades de línea de comandos de Oracle VM 3 (patch ID 13602094). En el siguiente ejemplo visualizamos el pinning de vCPUs de la VM «testvm»:
# ./ovm_vmcontrol -u admin -p password -h localhost -v testvm -c vcpuget Oracle VM VM Control utility 0.5.2. Connected. Command : vcpuget Current pinning of virtual CPUs to physical threads : 0,1
Para configurar el pinning contra la CPU 0 utilizamos el siguiente comando:
# ./ovm_vmcontrol -u admin -p Manager1 -h localhost -v testvm -c vcpuset -s 0 Oracle VM VM Control utility 0.5.2. Connected. Command : vcpuset Pinning virtual CPUs Pinning of virtual CPUs to physical threads '0' 'testvm' completed.
En versiones anteriores a Oracle VM 3, lo que se hacía era directamente configurar el parámetro «cpus = » en el fichero de configuración de la máquina virtual vm.cfg:
cpus = '0-3'
cpus = '0,1'