Skip to content

Commit 4c767d7

Browse files
author
Mrunal Patel
committed
Merge pull request #446 from cyphar/18-add-pids-controller
cgroup: add PIDs cgroup controller support
2 parents 421ebfd + 103853e commit 4c767d7

22 files changed

+415
-190
lines changed

libcontainer/cgroups/fs/apply_raw.go

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ var (
2323
&MemoryGroup{},
2424
&CpuGroup{},
2525
&CpuacctGroup{},
26+
&PidsGroup{},
2627
&BlkioGroup{},
2728
&HugetlbGroup{},
2829
&NetClsGroup{},
@@ -105,8 +106,6 @@ func (m *Manager) Apply(pid int) (err error) {
105106
return nil
106107
}
107108

108-
var c = m.Cgroups
109-
110109
d, err := getCgroupData(m.Cgroups, pid)
111110
if err != nil {
112111
return err
@@ -135,13 +134,6 @@ func (m *Manager) Apply(pid int) (err error) {
135134
paths[sys.Name()] = p
136135
}
137136
m.Paths = paths
138-
139-
if paths["cpu"] != "" {
140-
if err := CheckCpushares(paths["cpu"], c.Resources.CpuShares); err != nil {
141-
return err
142-
}
143-
}
144-
145137
return nil
146138
}
147139

@@ -179,15 +171,34 @@ func (m *Manager) GetStats() (*cgroups.Stats, error) {
179171
}
180172

181173
func (m *Manager) Set(container *configs.Config) error {
182-
for name, path := range m.Paths {
183-
sys, err := subsystems.Get(name)
184-
if err == errSubsystemDoesNotExist || !cgroups.PathExists(path) {
174+
for _, sys := range subsystems {
175+
// We can't set this here, because after being applied, memcg doesn't
176+
// allow a non-empty cgroup from having its limits changed.
177+
if sys.Name() == "memory" {
185178
continue
186179
}
180+
181+
// Generate fake cgroup data.
182+
d, err := getCgroupData(container.Cgroups, -1)
183+
if err != nil {
184+
return err
185+
}
186+
// Get the path, but don't error out if the cgroup wasn't found.
187+
path, err := d.path(sys.Name())
188+
if err != nil && !cgroups.IsNotFound(err) {
189+
return err
190+
}
191+
187192
if err := sys.Set(path, container.Cgroups); err != nil {
188193
return err
189194
}
190195
}
196+
197+
if m.Paths["cpu"] != "" {
198+
if err := CheckCpushares(m.Paths["cpu"], container.Cgroups.Resources.CpuShares); err != nil {
199+
return err
200+
}
201+
}
191202
return nil
192203
}
193204

libcontainer/cgroups/fs/blkio.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,10 @@ func (s *BlkioGroup) Name() string {
2222
}
2323

2424
func (s *BlkioGroup) Apply(d *cgroupData) error {
25-
dir, err := d.join("blkio")
25+
_, err := d.join("blkio")
2626
if err != nil && !cgroups.IsNotFound(err) {
2727
return err
2828
}
29-
30-
if err := s.Set(dir, d.config); err != nil {
31-
return err
32-
}
33-
3429
return nil
3530
}
3631

libcontainer/cgroups/fs/cpu.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,10 @@ func (s *CpuGroup) Name() string {
2222
func (s *CpuGroup) Apply(d *cgroupData) error {
2323
// We always want to join the cpu group, to allow fair cpu scheduling
2424
// on a container basis
25-
dir, err := d.join("cpu")
25+
_, err := d.join("cpu")
2626
if err != nil && !cgroups.IsNotFound(err) {
2727
return err
2828
}
29-
30-
if err := s.Set(dir, d.config); err != nil {
31-
return err
32-
}
33-
3429
return nil
3530
}
3631

libcontainer/cgroups/fs/cpuset.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,6 @@ func (s *CpusetGroup) ApplyDir(dir string, cgroup *configs.Cgroup, pid int) erro
6464
if err := s.ensureParent(dir, root); err != nil {
6565
return err
6666
}
67-
// the default values inherit from parent cgroup are already set in
68-
// s.ensureParent, cover these if we have our own
69-
if err := s.Set(dir, cgroup); err != nil {
70-
return err
71-
}
7267
// because we are not using d.join we need to place the pid into the procs file
7368
// unlike the other subsystems
7469
if err := writeFile(dir, "cgroup.procs", strconv.Itoa(pid)); err != nil {

libcontainer/cgroups/fs/devices.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,12 @@ func (s *DevicesGroup) Name() string {
1515
}
1616

1717
func (s *DevicesGroup) Apply(d *cgroupData) error {
18-
dir, err := d.join("devices")
18+
_, err := d.join("devices")
1919
if err != nil {
2020
// We will return error even it's `not found` error, devices
2121
// cgroup is hard requirement for container's security.
2222
return err
2323
}
24-
25-
if err := s.Set(dir, d.config); err != nil {
26-
return err
27-
}
28-
2924
return nil
3025
}
3126

libcontainer/cgroups/fs/freezer.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,10 @@ func (s *FreezerGroup) Name() string {
1919
}
2020

2121
func (s *FreezerGroup) Apply(d *cgroupData) error {
22-
dir, err := d.join("freezer")
22+
_, err := d.join("freezer")
2323
if err != nil && !cgroups.IsNotFound(err) {
2424
return err
2525
}
26-
27-
if err := s.Set(dir, d.config); err != nil {
28-
return err
29-
}
30-
3126
return nil
3227
}
3328

libcontainer/cgroups/fs/hugetlb.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,10 @@ func (s *HugetlbGroup) Name() string {
1919
}
2020

2121
func (s *HugetlbGroup) Apply(d *cgroupData) error {
22-
dir, err := d.join("hugetlb")
22+
_, err := d.join("hugetlb")
2323
if err != nil && !cgroups.IsNotFound(err) {
2424
return err
2525
}
26-
27-
if err := s.Set(dir, d.config); err != nil {
28-
return err
29-
}
30-
3126
return nil
3227
}
3328

libcontainer/cgroups/fs/memory.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ func (s *MemoryGroup) Apply(d *cgroupData) (err error) {
3232
return err
3333
}
3434
}
35-
3635
if err := s.Set(path, d.config); err != nil {
3736
return err
3837
}

libcontainer/cgroups/fs/net_cls.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,10 @@ func (s *NetClsGroup) Name() string {
1515
}
1616

1717
func (s *NetClsGroup) Apply(d *cgroupData) error {
18-
dir, err := d.join("net_cls")
18+
_, err := d.join("net_cls")
1919
if err != nil && !cgroups.IsNotFound(err) {
2020
return err
2121
}
22-
23-
if err := s.Set(dir, d.config); err != nil {
24-
return err
25-
}
26-
2722
return nil
2823
}
2924

libcontainer/cgroups/fs/net_prio.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,10 @@ func (s *NetPrioGroup) Name() string {
1515
}
1616

1717
func (s *NetPrioGroup) Apply(d *cgroupData) error {
18-
dir, err := d.join("net_prio")
18+
_, err := d.join("net_prio")
1919
if err != nil && !cgroups.IsNotFound(err) {
2020
return err
2121
}
22-
23-
if err := s.Set(dir, d.config); err != nil {
24-
return err
25-
}
26-
2722
return nil
2823
}
2924

0 commit comments

Comments
 (0)