Subject: Re: [vserver] memory limits: where & how to mount /dev/cgroups?
From: Jean Weisbuch <jean@phpnet.org>
Date: Mon, 21 Nov 2011 23:01:49 +0100
Mon, 21 Nov 2011 23:01:49 +0100
Le 21/11/2011 21:51, Jarry a écrit :
> Hi,
>
> I'm trying to set-up memory limits for my vserver-guests.
> Documentation says "Beginning with vs2.3.0.36.29 you should
> use cgroups to set memory limits".
>
> util-vserver:Cgroups says: "make sure /dev/cgroup is mounted
> with -o...,memory to be able to use this feature".
>
> This I do not understand at all. I have /dev/cgroups
> already visible in vserver-host. So where should I mount
> /dev/cgroups again? In vserver-guests?
>
> Further, util-vserver:Cgroups says:
> "you may wish to add the cgroup mount to /etc/fstab"
> Is it fstab of vserver-host, or vserver-guest?
>
> Jarry
Hello,

Here is an example (in this example we will have 1gb of memory on the 
guest and no virtual swap (soft and hard limit are the same, raise 
VDSRAMHARDLIMIT to 2048 if you want 1gb of memory + 1gb of "swap")) :
(print in mksh is a builtin "equivalent" to echo in bash)

    VDSRAMLIMIT="1024"
    VDSRAMHARDLIMIT="1024"
    VDSRAMLIMITBYTES="$(print -- "${VDSRAMLIMIT}*1048576" |bc)"
    VDSRAMHARDLIMITBYTES="$(print -- "${VDSRAMHARDLIMIT}*1048576" |bc)"
    print -- "$VDSRAMLIMITBYTES" >|
    /etc/vservers/${xid}/cgroup/memory.limit_in_bytes
    print -- "$VDSRAMHARDLIMITBYTES" >|
    /etc/vservers/${xid}/cgroup/memory.memsw.limit_in_bytes
    print -- "$VDSRAMLIMITBYTES" >| /dev/cgroup/${xid}/memory.limit_in_bytes
    print -- "$VDSRAMHARDLIMITBYTES" >|
    /dev/cgroup/${xid}/memory.memsw.limit_in_bytes


And the old way (for the same amount of memory) :

    print -- "$(( (${VDSRAMLIMIT}*1024)/4 ))" >
    /etc/vservers/${xid}/rlimits/rss
    print -- "$(( (${VDSRAMHARDLIMIT}*1024)/4 ))" >
    /etc/vservers/${xid}/rlimits/rss.hard
    vlimit -c ${xid} -S --rss "$(( (${VDSRAMLIMIT}*1024)/4 ))"
    vlimit -c ${xid} --rss "$(( (${VDSRAMHARDLIMIT}*1024)/4 ))"


By the way, you cant access cgroups from the guests, only from the host 
and in the recent VServer versions you dont even need to mount cgroup, 
it mounts itself automatically on /dev/cgroup with the required cgroups 
subsystems (be aware that putting incorrect mount options on cgroups 
will make the system unbootable so dont try to play with mount options 
on a production server).
Example of the cgroup mount on a 3.0.4-vs2.3.1-pre10.1-beng with 
0.30.216-pre2994-1 utils :

    vserver on /dev/cgroup type cgroup
    (rw,cpuset,cpu,cpuacct,memory,devices,freezer,net_cls,blkio,perf_event)


Regards.


Le 21/11/2011 21:51, Jarry a écrit :
Hi,

I'm trying to set-up memory limits for my vserver-guests.
Documentation says "Beginning with vs2.3.0.36.29 you should
use cgroups to set memory limits".

util-vserver:Cgroups says: "make sure /dev/cgroup is mounted
with -o...,memory to be able to use this feature".

This I do not understand at all. I have /dev/cgroups
already visible in vserver-host. So where should I mount
/dev/cgroups again? In vserver-guests?

Further, util-vserver:Cgroups says:
"you may wish to add the cgroup mount to /etc/fstab"
Is it fstab of vserver-host, or vserver-guest?

Jarry
Hello,

Here is an example (in this example we will have 1gb of memory on the guest and no virtual swap (soft and hard limit are the same, raise VDSRAMHARDLIMIT to 2048 if you want 1gb of memory + 1gb of "swap")) :
(print in mksh is a builtin "equivalent" to echo in bash)
VDSRAMLIMIT="1024"
VDSRAMHARDLIMIT="1024"
VDSRAMLIMITBYTES="$(print -- "${VDSRAMLIMIT}*1048576" |bc)"
VDSRAMHARDLIMITBYTES="$(print -- "${VDSRAMHARDLIMIT}*1048576" |bc)"
print -- "$VDSRAMLIMITBYTES" >| /etc/vservers/${xid}/cgroup/memory.limit_in_bytes
print -- "$VDSRAMHARDLIMITBYTES" >| /etc/vservers/${xid}/cgroup/memory.memsw.limit_in_bytes
print -- "$VDSRAMLIMITBYTES" >| /dev/cgroup/${xid}/memory.limit_in_bytes
print -- "$VDSRAMHARDLIMITBYTES" >| /dev/cgroup/${xid}/memory.memsw.limit_in_bytes

And the old way (for the same amount of memory) :
print -- "$(( (${VDSRAMLIMIT}*1024)/4 ))" > /etc/vservers/${xid}/rlimits/rss
print -- "$(( (${VDSRAMHARDLIMIT}*1024)/4 ))" > /etc/vservers/${xid}/rlimits/rss.hard
vlimit -c ${xid} -S --rss "$(( (${VDSRAMLIMIT}*1024)/4 ))"
vlimit -c ${xid} --rss "$(( (${VDSRAMHARDLIMIT}*1024)/4 ))"

By the way, you cant access cgroups from the guests, only from the host and in the recent VServer versions you dont even need to mount cgroup, it mounts itself automatically on /dev/cgroup with the required cgroups subsystems (be aware that putting incorrect mount options on cgroups will make the system unbootable so dont try to play with mount options on a production server).
Example of the cgroup mount on a 3.0.4-vs2.3.1-pre10.1-beng with 0.30.216-pre2994-1 utils :
vserver on /dev/cgroup type cgroup (rw,cpuset,cpu,cpuacct,memory,devices,freezer,net_cls,blkio,perf_event)

Regards.