On Mon, Sep 19, 2011 at 11:49:26PM +0530, Balbir Singh wrote:
> On Mon, Sep 19, 2011 at 11:38 PM, Vivek Goyal <vgo...@redhat.com> wrote:
> > On Mon, Sep 19, 2011 at 09:40:33PM +0530, Balbir Singh wrote:
> >> >
> >> > Ok. That's fine. So then we can maintain some kind of file which has
> >> > list of groups created by cgconfig and we try to reclaim those groups
> >> > when service is stopped.
> >>
> >> Namespaces should solve the problem if properly used
> >
> > Can you elaborate here what do you mean by namespace? I guess you are
> > referring to the fact that don't share top level directory between
> > systemd and cgconfig and things should be just fine?
> >
> A namespace allows you to create a config file without a mount section
> and adds the namespace (read "path") to all the groups mentioned under
> it
> 
> For example, I am using Fedora 15 at the moment and my mount output
> for cgroup is
> 
> tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
> cgroup on /sys/fs/cgroup/systemd type cgroup
> (rw,nosuid,nodev,noexec,relatime,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
> cgroup on /sys/fs/cgroup/cpuset type cgroup
> (rw,nosuid,nodev,noexec,relatime,cpuset)
> cgroup on /sys/fs/cgroup/cpu type cgroup (rw,nosuid,nodev,noexec,relatime,cpu)
> cgroup on /sys/fs/cgroup/cpuacct type cgroup
> (rw,nosuid,nodev,noexec,relatime,cpuacct)
> cgroup on /sys/fs/cgroup/memory type cgroup
> (rw,nosuid,nodev,noexec,relatime,memory)
> cgroup on /sys/fs/cgroup/devices type cgroup
> (rw,nosuid,nodev,noexec,relatime,devices)
> cgroup on /sys/fs/cgroup/freezer type cgroup
> (rw,nosuid,nodev,noexec,relatime,freezer)
> cgroup on /sys/fs/cgroup/net_cls type cgroup
> (rw,nosuid,nodev,noexec,relatime,net_cls)
> cgroup on /sys/fs/cgroup/blkio type cgroup
> (rw,nosuid,nodev,noexec,relatime,blkio)
> cgroup on /sys/fs/cgroup/perf_event type cgroup
> (rw,nosuid,nodev,noexec,relatime,perf_event)
> 
> When I try to mount a set of cgroups and create directories I get an error
> 
> [balbir@balbir libcg]$ sudo cgconfigparser -l /etc/cgconfig.conf
> Loading configuration file /etc/cgconfig.conf failed
> Cgroup mounting failed
> 
> In the samples directory under src/ you will find namespace_config.conf
> 
> group www {
>       perm {
>               task {
>                       uid = root;
>                       gid = root;
>               }
>               admin {
>                       uid = root;
>                       gid = root;
>               }
>       }
>       cpu {
>               cpu.shares = 1000;
>       }
>       cpuacct {
>       }
> }
> 
> group ftp {
>       perm {
>               task {
>                       uid = root;
>                       gid = root;
>               }
>               admin {
>                       uid = root;
>                       gid = root;
>               }
>       }
>       cpu {
>               cpu.shares = 500;
>       }
>       cpuacct {
>       }
> }
> 
> namespace {
>       cpu = daemons;
>       cpuacct = daemons;
> }
> 
> When I run cgconfigparser -l samples/namespace_config.conf I see
> daemons/www and daemons/ftp
> 
> [balbir@balbir libcg]$ ls /sys/fs/cgroup/cpu/daemons/
> cgroup.clone_children  cgroup.procs      cpu.rt_runtime_us  ftp
>         tasks
> cgroup.event_control   cpu.rt_period_us  cpu.shares
> notify_on_release  www
> 
> [balbir@balbir libcg]$ ls /sys/fs/cgroup/cpu/daemons/
> cgroup.clone_children  cgroup.procs      cpu.rt_runtime_us  ftp
>         tasks
> cgroup.event_control   cpu.rt_period_us  cpu.shares
> notify_on_release  www
> 
> For other controllers like memory, I don't see these groups because I
> did not ask for them in namespace
> 
> [balbir@balbir libcg]$ ls /sys/fs/cgroup/memory/
> cgroup.clone_children  memory.failcnt
> memory.move_charge_at_immigrate  memory.stat
> notify_on_release
> cgroup.event_control   memory.force_empty         memory.numa_stat
>             memory.swappiness      release_agent
> cgroup.procs           memory.limit_in_bytes      memory.oom_control
>             memory.usage_in_bytes  tasks
> libvirt                memory.max_usage_in_bytes
> memory.soft_limit_in_bytes       memory.use_hierarchy
> 
> I hope this clarifies what I was saying, cleanup is an issue, but if
> we do cgclear with a clear namespace, it should work out

Ok, got it. So basically it is same thing that persistent group live
in their own namespace/path and do not share cgroups with systemd. So
a hierarchy might look as follows.

                        root
                      /   |  \
                system  user cgconfig-namespace

This should work for most of the setups. But what if a user wants to
create a persistent cgroup using cgconfig, allocate resources to it
and then ask systemd to launch a service in allocated cgroup. That
case will not work and systemd was hoping that for more complex
configurations and it could rely on cgconfig.

Anyway, I think initial simple modle of defining a namespace for
persistent groups is fine to begin with. Say something like following
in default cgconfig.conf file.

namespace {
        cpu = cgconfig;
        cpuacct = cgconfig;
}

My only concern is that hierarchy is getting deeper and this means more
overhead for kernel.

Thanks
Vivek

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to