monitoring.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package intelrdt
  2. import (
  3. "bufio"
  4. "io"
  5. "os"
  6. "path/filepath"
  7. "github.com/sirupsen/logrus"
  8. )
  9. var enabledMonFeatures monFeatures
  10. type monFeatures struct {
  11. mbmTotalBytes bool
  12. mbmLocalBytes bool
  13. llcOccupancy bool
  14. }
  15. func getMonFeatures(intelRdtRoot string) (monFeatures, error) {
  16. file, err := os.Open(filepath.Join(intelRdtRoot, "info", "L3_MON", "mon_features"))
  17. if err != nil {
  18. return monFeatures{}, err
  19. }
  20. defer file.Close()
  21. return parseMonFeatures(file)
  22. }
  23. func parseMonFeatures(reader io.Reader) (monFeatures, error) {
  24. scanner := bufio.NewScanner(reader)
  25. monFeatures := monFeatures{}
  26. for scanner.Scan() {
  27. switch feature := scanner.Text(); feature {
  28. case "mbm_total_bytes":
  29. monFeatures.mbmTotalBytes = true
  30. case "mbm_local_bytes":
  31. monFeatures.mbmLocalBytes = true
  32. case "llc_occupancy":
  33. monFeatures.llcOccupancy = true
  34. default:
  35. logrus.Warnf("Unsupported Intel RDT monitoring feature: %s", feature)
  36. }
  37. }
  38. return monFeatures, scanner.Err()
  39. }
  40. func getMonitoringStats(containerPath string, stats *Stats) error {
  41. numaFiles, err := os.ReadDir(filepath.Join(containerPath, "mon_data"))
  42. if err != nil {
  43. return err
  44. }
  45. var mbmStats []MBMNumaNodeStats
  46. var cmtStats []CMTNumaNodeStats
  47. for _, file := range numaFiles {
  48. if file.IsDir() {
  49. numaPath := filepath.Join(containerPath, "mon_data", file.Name())
  50. if IsMBMEnabled() {
  51. numaMBMStats, err := getMBMNumaNodeStats(numaPath)
  52. if err != nil {
  53. return err
  54. }
  55. mbmStats = append(mbmStats, *numaMBMStats)
  56. }
  57. if IsCMTEnabled() {
  58. numaCMTStats, err := getCMTNumaNodeStats(numaPath)
  59. if err != nil {
  60. return err
  61. }
  62. cmtStats = append(cmtStats, *numaCMTStats)
  63. }
  64. }
  65. }
  66. stats.MBMStats = &mbmStats
  67. stats.CMTStats = &cmtStats
  68. return err
  69. }