Limitar número de cores disponibles mediante cgroups

Mediante cgroups podemos limitar el número de cores disponibles para un determinado proceso, vamos a ver cómo.

Para hacer los cambios persistentes, deberemos editar el fichero /etc/cgconfig.conf , por ejemplo:

group vuitcores {
    perm {
        admin {
            uid = root;
        }
        task {
            uid = jprats;
        }
    }
    cpuset {
	cpuset.mems=0;
        cpuset.cpus="0-7";
    }
}

Mediante dicha sintaxi estamos definiendo:

  • Un grupo llamado: vuitcores
  • Opcionalmente, podemos definir permisos mediante la directiva perm
  • Limitamos el cpuset (mems y cpus son options obligaatorias):
    • cpuset.mems: Listado de nodos de memoria que permitimos acceso (para NUMA)
    • cpuset.cpus: Listado de CPUs que permitimos acceso a este cgroup

Reiniciamos el servicio para aplicar los cambios:

# /etc/init.d/cgconfig restart
Stopping cgconfig service:                                 [  OK  ]
Starting cgconfig service:                                 [  OK  ]

Mediante nproc podremos validar el número de cores disponibles para el proceso:

# /usr/bin/nproc
32

Para ejecutar una tarea en un cgroup deberemos usar cgexec indicando el grupo mediante la opción -g:

# cgexec -g cpuset:vuitcores /usr/bin/nproc
8

Podemos apreciar que en este caso nproc nos reporta 8 cores en lugar de los 32 que tiene el equipo.

Tags: