> On June 12, 2016, 2:51 p.m., Qian Zhang wrote:
> > src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp, lines 351-363
> > <https://reviews.apache.org/r/46158/diff/2/?file=1347650#file1347650line351>
> >
> >     Why do we prepare hierarchy here? I think preparing hierarchy for a 
> > specific container is a low-level work which should be handled in 
> > `Subsystem::prepare()` method rather than here. And in that way, we only 
> > need one `for` loop (the following one) rather than 2 here.
> 
> haosdent huang wrote:
>     We delegate the create/destory operations of hierarchy to 
> `CgroupsIsolatorProcess`. Because if we do the create/destroy operations of 
> hierarchy in `Subsystem::prepare()` and `Subsystem::cleanup()`, it would 
> create the hierarchy or destroy the hierarchy multiple times when differnt 
> subsystems mount in same hierarchies.
> 
> Qian Zhang wrote:
>     My idea is, here we should call each subsystem's `prepare()` (the second 
> `for` loop in this method), and each subsystem's `prepare()` should call its 
> parent class's `prepare()` method (i.e., `Subsystem::prepare()`), and in 
> `Subsystem::prepare()`, we call the virtual method `name()` first to know 
> which subsystem that we are working on, and then ONLY create cgroup for that 
> subsytem. In this way, we keep the common cgroup operations (e.g., create 
> cgroup) only in parent class (e.g., `Subsystem::prepare()`), and we can still 
> do some subsystem specific works in child class (e.g., 
> `MemorySubsystem::prepare()`).
>     
>     Currently, `Subsystem::prepare()`, `Subsystem::isolate()` and 
> `Subsystem::cleanup()` are just no-op, I think we should fully utilize them.
> 
> haosdent huang wrote:
>     Yes, but it would create/destroy the hierarchy multiple times if we put 
> these operations to `Subsystem`.
> 
> Qian Zhang wrote:
>     What did you mean about "create/destroy the hierachy"? Did you mean 
> creating `/sys/fs/cgroup/<subsystem>/mesos`? If yes, I think it is a one-time 
> operation which will be only done in `CgroupsIsolatorProcess::create()`, we 
> do not need to call any methods of `Subsystem` at all.
> 
> haosdent huang wrote:
>     Oh, not. `/sys/fs/cgroup/<subsystem>/mesos` is the root hierachy. Suppose 
> we mount both `cpu` and `cpuacct` into `/sys/fs/cgroup/cpu,cpuacct/mesos`.
>     If we delegate the create operation to `Subsystem`, then we would create 
> `/sys/fs/cgroup/cpu,cpuacct/mesos/${container_id}` when 
> `CpuSubsystem::prepare()` and
>     `CpuacctSubsystem::prepare()`. This would bring problems.
> 
> Qian Zhang wrote:
>     Understood. Then I think we should not **always** create these two 
> subsystems: `CpuSubsystem` and `CpuacctSubsystem`, instead, we should only 
> have one CPU subsystem class `CpuSubsystem` which handles both `cpu` and 
> `cpuacct` subsystems, just like what the original `cgroups/cpu` isolator 
> does. And in the `Subsystem` class, we should have a vector field 
> `subsystems`, for `MemorySubsystem`/`NetClsSubsystem`/`PerfEventSubsystem`, 
> this vector has only 1 element (i.e., `memory`/`net_cls`/`perf_event`), but 
> for `CpuSubsystem`, if cpu and cpuacct are co-mounted at 
> `/sys/fs/cgroup/cpu,cpuacct`, its `subsystems` vector will have 1 elements, 
> and if cpu and cpuacct are mounted separately, it will have 2 elements. And 
> then in `Subsystem::prepare()`, it should go through each element of 
> `subsystems` vector in a `for` loop, and create cgroup accordingly.
>     
>     And in the patch https://reviews.apache.org/r/45086/ , I am thinking 
> maybe we should not expose `cgroups/cpuacct` in the flag `--isolation`, how 
> `cpu` and `cpuacct` subsystems are handled should be an internal thing which 
> should be inside of `CpuSubsystem`. That means for user, they should always 
> specify `cgroups/cpu` as before and should not be aware of `cgroups/cpuacct`, 
> and inside of `CpuSubsystem`, we can create 1 subsystem or 2 subsystems based 
> on whether cpu and cpuacct are co-mounted or separately mounted. This should 
> also be a good way to keep the backward compatibility since there is no any 
> changes to the existing user experience.

Hi, @qianzhang We could not do this:

>we should only have one CPU subsystem class CpuSubsystem which handles both 
>cpu and cpuacct subsystems

Because the main purpose of this ticket is try to resolve this problem. We 
manage two different subsystems in `CgroupsCpushareIsolatorProcess` is because 
we could not manage co-mounted subsystems in different isolators before. And 
this bring some tricky problems. So we try to solve this problem and create 
this epic. As you see, not only `cpu` and `cpuacct` could co-mounted under same 
hierarchy, we could mount `mem`, `perf_event` on `/sys/fs/cgroup/cpu,cpuacct` 
as well. And in cgroup-v2, all subsystems would be co-mounted under only one 
hierarchy, so we try to refactor all current cgroups isolators into one unified 
isolator. And make it fits the co-mounted subsystems case better.


- haosdent


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/46158/#review137145
-----------------------------------------------------------


On June 19, 2016, 3:55 p.m., haosdent huang wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/46158/
> -----------------------------------------------------------
> 
> (Updated June 19, 2016, 3:55 p.m.)
> 
> 
> Review request for mesos, Gilbert Song, Guangya Liu, Ian Downes, Jie Yu, 
> Kevin Klues, and Qian Zhang.
> 
> 
> Bugs: MESOS-5041
>     https://issues.apache.org/jira/browse/MESOS-5041
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> Completed implementation of the cgroups unified isolator.
> 
> 
> Diffs
> -----
> 
>   src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp PRE-CREATION 
> 
> Diff: https://reviews.apache.org/r/46158/diff/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> haosdent huang
> 
>

Reply via email to