10 "github.com/opencontainers/runc/libcontainer/cgroups"
11 "github.com/opencontainers/runc/libcontainer/configs"
14 type HugetlbGroup struct {
17 func (s *HugetlbGroup) Name() string {
21 func (s *HugetlbGroup) Apply(d *cgroupData) error {
22 _, err := d.join("hugetlb")
23 if err != nil && !cgroups.IsNotFound(err) {
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 {
39 func (s *HugetlbGroup) Remove(d *cgroupData) error {
40 return removePath(d.path("hugetlb"))
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)
49 return fmt.Errorf("failed to parse %s - %v", usage, err)
51 hugetlbStats.Usage = value
53 maxUsage := strings.Join([]string{"hugetlb", pageSize, "max_usage_in_bytes"}, ".")
54 value, err = getCgroupParamUint(path, maxUsage)
56 return fmt.Errorf("failed to parse %s - %v", maxUsage, err)
58 hugetlbStats.MaxUsage = value
60 failcnt := strings.Join([]string{"hugetlb", pageSize, "failcnt"}, ".")
61 value, err = getCgroupParamUint(path, failcnt)
63 return fmt.Errorf("failed to parse %s - %v", failcnt, err)
65 hugetlbStats.Failcnt = value
67 stats.HugetlbStats[pageSize] = hugetlbStats