github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/mergeCode/runc/libcontainer/cgroups/fs/hugetlb.go (about) 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 }