[lxc-users] Limiting number of cores in a container

Peter Steele pwsteele at gmail.com
Sun Sep 6 00:09:25 UTC 2015


Our application needs to limit the number of cores a container can use.  
With libvirt-lxc I use the command "virsh setvpus" to set the number of 
cores a container can use. With this command you only have to specify 
the number of cores assigned to the container, not a specific core 
number. I can't seem to find an equivalent for this with LXC. I've found 
the parameter lxc.cgroup.cpuset.cpus that can be set to bind a container 
to use a specific CPU (core?), as well as the parameter 
lxc.cgroup.cpu.shares that can be used to designate a number of CPU 
"shares" to be assigned to a container, but I'm not exactly sure how 
this works, especially in the case of over-committing CPU resources.

Let's assume we have a system with 16 cores that will be hosting seven 
containers. Six of these will be limited to two cores each and one will 
be assigned four cores. With libvirt-lxc I can simply assign the desired 
CPU count to each container and let the system would decide how the CPUs 
are scheduled. In fact, if I had a less powerful server, say with 8 
cores instead of 16, libvirt would let me over-commit the CPUs assigned 
to my containers, in exactly the same way one can over-commit CPUs to 
VMs. This is very useful in our test environment where engineers may not 
all have high end systems. The CentOS lscpu command accurately reflects 
the virtual CPU count of the container, despite how many physical CPUs 
are actually present on the host:

# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             4
NUMA node(s):          1

This shows a container with four virtual CPUs.

We have an automation system that creates and manages our containers. 
Due to its pending demise, we're migrating from libvirt-lxc to "stock" 
LXC and I'm trying to map the various operations used in creating 
libvirt containers to equivalent operations for LXC containers. It's not 
entirely clear to me how to deal with this CPU count issue. Can anyone 
give me some insight on how to setup something at least approximating 
what we're doing with libvirt-lxc?

Thanks.

Peter



More information about the lxc-users mailing list