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  }