hugetlb.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package fs2
  2. import (
  3. "strconv"
  4. "github.com/opencontainers/runc/libcontainer/cgroups"
  5. "github.com/opencontainers/runc/libcontainer/cgroups/fscommon"
  6. "github.com/opencontainers/runc/libcontainer/configs"
  7. )
  8. func isHugeTlbSet(r *configs.Resources) bool {
  9. return len(r.HugetlbLimit) > 0
  10. }
  11. func setHugeTlb(dirPath string, r *configs.Resources) error {
  12. if !isHugeTlbSet(r) {
  13. return nil
  14. }
  15. for _, hugetlb := range r.HugetlbLimit {
  16. if err := cgroups.WriteFile(dirPath, "hugetlb."+hugetlb.Pagesize+".max", strconv.FormatUint(hugetlb.Limit, 10)); err != nil {
  17. return err
  18. }
  19. }
  20. return nil
  21. }
  22. func statHugeTlb(dirPath string, stats *cgroups.Stats) error {
  23. hugetlbStats := cgroups.HugetlbStats{}
  24. for _, pagesize := range cgroups.HugePageSizes() {
  25. value, err := fscommon.GetCgroupParamUint(dirPath, "hugetlb."+pagesize+".current")
  26. if err != nil {
  27. return err
  28. }
  29. hugetlbStats.Usage = value
  30. fileName := "hugetlb." + pagesize + ".events"
  31. value, err = fscommon.GetValueByKey(dirPath, fileName, "max")
  32. if err != nil {
  33. return err
  34. }
  35. hugetlbStats.Failcnt = value
  36. stats.HugetlbStats[pagesize] = hugetlbStats
  37. }
  38. return nil
  39. }