On 10/21/2009 02:38 PM, Balbir Singh wrote:
> * Jan Safranek<[email protected]>  [2009-10-21 14:20:45]:
>
>> Let's use cgclassify and move all processes where they belong when system 
>> boots.
>> It's very similar to the setup we had before, but we have these improvements:
>> - all rules are taken into account, user can have different (or no) default
>>    groups for different controllers
>> - it's in C, not in ugly shell loop (I have no performance statistics though)
>> - no 'magic' group is being created automatically by the init script, all
>>    groups must be in cgconfig.conf
>>
>> If I am not mistaken, the magic 'ps --no-headers -N --ppid $$ -L o tid' 
>> should
>> print all threads except children of current bash (i.e. everything except ps
>> itself).
>>
>> Of course, there is no rule in default cgrules.conf, so it should do nothing
>> unless the user manually configures something.
>>
>> Signed-off-by: Jan Safranek<[email protected]>
>> ---
>>
>>   scripts/init.d/cgconfig.in |    8 ++++++++
>>   1 files changed, 8 insertions(+), 0 deletions(-)
>>
>> diff --git a/scripts/init.d/cgconfig.in b/scripts/init.d/cgconfig.in
>> index 1a13231..445a328 100644
>> --- a/scripts/init.d/cgconfig.in
>> +++ b/scripts/init.d/cgconfig.in
>> @@ -36,6 +36,7 @@ MOUNTS_FILE=/proc/mounts
>>   PROC_CGROUPS_FILE=/proc/cgroups
>>   CGROUP_FS=cgroup
>>   CONFIG_FILE=/etc/cgconfig.conf
>> +RULES_FILE=/etc/cgrules.conf
>>
>>   # support multiple mount points
>>   declare -a MOUNTPOINT
>> @@ -89,6 +90,13 @@ start() {
>>                   fi
>>           fi
>>
>> +        # enforce the rules in /etc/cgrules.conf
>> +        if [ -e $RULES_CONF ]; then
>> +            # list all processes except the PS itself
>> +            PROCS=$(ps --no-headers -N --ppid $$ -L o tid)
>> +            cgclassify $PROCS>/dev/null 2>&1
>> +        fi
>> +
>>           touch /var/lock/subsys/$servicename
>>           retval=$?
>>           if [ $retval -ne 0 ]
>>
>>
>
> I remember using an approach similar to this, I could not do this is
> as follows
>
> 1. With cpusets enabled, it creates cpuset.mems and cpuset.cpus as
>     blank files with no values
> 2. When I try to classify a process with cpu,cpuset mounted together
>     I got an error, since the task could not be moved.
> 3. I had trouble classifying rt tasks with cpu controller (RT
>     enabled).
> Given that you are not removing any of the special code, I suspect
> this approach can work. Could you please test with 2 and 3 above?

Yes, you run into troubles if you create group controlled by cpuset 
without proper cpuset.cpus (2). Dtto for (3), mount will probably freeze 
your system (Dhaval said something about RT-thingy I don't remember now).

But as educated cgroup user :), you create your groups with these 
required paramer set in /etc/cgconfig.conf. The previous version of init 
script set these parameters only for the sysdefault group, not for the 
others. With my new approach, if you need the default group, it must be 
explicitly created in cgconfig.conf and you can set these magic 
parameters there.

Or we could add some hooks to libcgroup to automatically set these 
parameters when a group is being created, but... I personally don't like 
this magic.

Jan

------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to