Hard Partitioning en Oracle VM

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'