[Lxc-users] Resources sharing and limit

Daniel Lezcano daniel.lezcano at free.fr
Thu May 6 09:37:07 UTC 2010


Yanick Emiliano wrote:
> Hi everybody,
> I have just started playing with lxc and having some difficulties to set cpu
> and memory on my guests. After my searches, seems that resources controlling
> is managing in cgroup files and I think that I missed something or I didn't
> understand how deal with cgroup.
> 
> After reading cgroup documentation, I understand that:
> - *cpuset.cpus* indicate to a container the number of cpu available

No exactly, it's a mask of usable cpus for the container. Let's imagine 
you have a 16 cpus machine. The content of cpuset.cpus will be,
0-15 which means cpu number 0 to cpu number 15 is used by the cgroup.

If you want to assign the cpu 1 (second cpu) to the container, you have 
to set it by "echo 1 > /cgroup/<name>/cpuset.cpus".

If you want to assign the cpu 1,2,3 to the container, "echo 1,2,3 > 
/cgroup/<name>/cpuset.cpus".

If you want to assign cpu 0 up to 7 to the container, "echo 0-7 > 
/cgroup/<name>/cpuset.cpus".


In the context of lxc.

lxc-execute -n foo -s lxc.cgroup.cpuset.cpus="1,2,3" myforks

etc ...

> -*cpuset.cpu_exclusive* limit the number of cpu which the container can use.
> Am I in good way?

When you assigned the cpus to the container, the processes of the 
container will run on these cpus only but that does not prevent the 
other tasks of the system to run on these cpus. If you want the cpus to 
be used by the container *only*, set them 'exclusive'. This is what I 
understood.

> For example , can I tell to my container that there are 2 cpu available (*
> cpuset.cpus)*, but use one generally (*puset.cpu_exclusive)*, use the second
> one only  when it's necessary (when there are a  lot of application to run)?

cpu on demand ? :)

Hey, externally look at the cpu usage of the container, when it reach a 
threshold you define, assign another cpu to the container.

> What I want is manage QoS with my containers.

Very likely, you are looking for the cgroup fair scheduler, it would be 
better than dynamically assign cpus to the container, IMHO.

http://lwn.net/Articles/240474/

It's /cgroup/<name>/cpu.shares

Create 2 containers,

lxc-execute -n foo -s lxc.cgroup.cpu.shares=1 /bin/bash

in another shell

lxc-execute -n bar -s /bin/bash


in both shell, do "while $(true); do echo -n . ; done"

You will see "foo" displaying the dots veeeery slowly and bar being at 
the normal speed.

As soon as "bar" exits or is frozen (via lxc-freeze), "foo" works at 
normal speed as it is no longer competing the cpu with "bar".

You can dynamically change the priority of the container with 
"lxc-cgroup -n foo cpu.shares=1024" for example.


> And my last question is, Can I do the same thing with memory sharing?

memory on demand :)

I will let someone else to add comments here, as I am not very familiar 
with memory vs cgroup.

Thanks
   -- Daniel




More information about the lxc-users mailing list