Tizen_4.0 base
[platform/upstream/docker-engine.git] / vendor / github.com / opencontainers / runc / libcontainer / cgroups / fs / hugetlb.go
1 // +build linux
2
3 package fs
4
5 import (
6         "fmt"
7         "strconv"
8         "strings"
9
10         "github.com/opencontainers/runc/libcontainer/cgroups"
11         "github.com/opencontainers/runc/libcontainer/configs"
12 )
13
14 type HugetlbGroup struct {
15 }
16
17 func (s *HugetlbGroup) Name() string {
18         return "hugetlb"
19 }
20
21 func (s *HugetlbGroup) Apply(d *cgroupData) error {
22         _, err := d.join("hugetlb")
23         if err != nil && !cgroups.IsNotFound(err) {
24                 return err
25         }
26         return nil
27 }
28
29 func (s *HugetlbGroup) Set(path string, cgroup *configs.Cgroup) error {
30         for _, hugetlb := range cgroup.Resources.HugetlbLimit {
31                 if err := writeFile(path, strings.Join([]string{"hugetlb", hugetlb.Pagesize, "limit_in_bytes"}, "."), strconv.FormatUint(hugetlb.Limit, 10)); err != nil {
32                         return err
33                 }
34         }
35
36         return nil
37 }
38
39 func (s *HugetlbGroup) Remove(d *cgroupData) error {
40         return removePath(d.path("hugetlb"))
41 }
42
43 func (s *HugetlbGroup) GetStats(path string, stats *cgroups.Stats) error {
44         hugetlbStats := cgroups.HugetlbStats{}
45         for _, pageSize := range HugePageSizes {
46                 usage := strings.Join([]string{"hugetlb", pageSize, "usage_in_bytes"}, ".")
47                 value, err := getCgroupParamUint(path, usage)
48                 if err != nil {
49                         return fmt.Errorf("failed to parse %s - %v", usage, err)
50                 }
51                 hugetlbStats.Usage = value
52
53                 maxUsage := strings.Join([]string{"hugetlb", pageSize, "max_usage_in_bytes"}, ".")
54                 value, err = getCgroupParamUint(path, maxUsage)
55                 if err != nil {
56                         return fmt.Errorf("failed to parse %s - %v", maxUsage, err)
57                 }
58                 hugetlbStats.MaxUsage = value
59
60                 failcnt := strings.Join([]string{"hugetlb", pageSize, "failcnt"}, ".")
61                 value, err = getCgroupParamUint(path, failcnt)
62                 if err != nil {
63                         return fmt.Errorf("failed to parse %s - %v", failcnt, err)
64                 }
65                 hugetlbStats.Failcnt = value
66
67                 stats.HugetlbStats[pageSize] = hugetlbStats
68         }
69
70         return nil
71 }