diff options
-rw-r--r-- | collector/perf_linux.go | 66 |
1 files changed, 28 insertions, 38 deletions
diff --git a/collector/perf_linux.go b/collector/perf_linux.go index b67f970..bb8716a 100644 --- a/collector/perf_linux.go +++ b/collector/perf_linux.go | |||
@@ -111,52 +111,42 @@ func NewPerfCollector(logger log.Logger) (Collector, error) { | |||
111 | logger: logger, | 111 | logger: logger, |
112 | } | 112 | } |
113 | 113 | ||
114 | var ( | ||
115 | cpus []int | ||
116 | err error | ||
117 | ) | ||
114 | if perfCPUsFlag != nil && *perfCPUsFlag != "" { | 118 | if perfCPUsFlag != nil && *perfCPUsFlag != "" { |
115 | cpus, err := perfCPUFlagToCPUs(*perfCPUsFlag) | 119 | cpus, err = perfCPUFlagToCPUs(*perfCPUsFlag) |
116 | if err != nil { | 120 | if err != nil { |
117 | return nil, err | 121 | return nil, err |
118 | } | 122 | } |
119 | for _, cpu := range cpus { | 123 | } else { |
120 | // Use -1 to profile all processes on the CPU, see: | 124 | cpus = make([]int, runtime.NumCPU()) |
121 | // man perf_event_open | 125 | for i := range cpus { |
122 | hwProf := perf.NewHardwareProfiler(-1, cpu) | 126 | cpus[i] = i |
123 | if err := hwProf.Start(); err != nil { | 127 | } |
124 | return nil, err | 128 | } |
125 | } | ||
126 | collector.perfHwProfilers[cpu] = &hwProf | ||
127 | |||
128 | swProf := perf.NewSoftwareProfiler(-1, cpu) | ||
129 | if err := swProf.Start(); err != nil { | ||
130 | return nil, err | ||
131 | } | ||
132 | collector.perfSwProfilers[cpu] = &swProf | ||
133 | 129 | ||
134 | cacheProf := perf.NewCacheProfiler(-1, cpu) | 130 | for _, cpu := range cpus { |
135 | if err := cacheProf.Start(); err != nil { | 131 | // Use -1 to profile all processes on the CPU, see: |
136 | return nil, err | 132 | // man perf_event_open |
137 | } | 133 | hwProf := perf.NewHardwareProfiler(-1, cpu) |
138 | collector.perfCacheProfilers[cpu] = &cacheProf | 134 | if err := hwProf.Start(); err != nil { |
135 | return nil, err | ||
139 | } | 136 | } |
140 | } else { | 137 | collector.perfHwProfilers[cpu] = &hwProf |
141 | for i := 0; i < runtime.NumCPU(); i++ { | ||
142 | hwProf := perf.NewHardwareProfiler(-1, i) | ||
143 | if err := hwProf.Start(); err != nil { | ||
144 | return nil, err | ||
145 | } | ||
146 | collector.perfHwProfilers[i] = &hwProf | ||
147 | 138 | ||
148 | swProf := perf.NewSoftwareProfiler(-1, i) | 139 | swProf := perf.NewSoftwareProfiler(-1, cpu) |
149 | if err := swProf.Start(); err != nil { | 140 | if err := swProf.Start(); err != nil { |
150 | return nil, err | 141 | return nil, err |
151 | } | 142 | } |
152 | collector.perfSwProfilers[i] = &swProf | 143 | collector.perfSwProfilers[cpu] = &swProf |
153 | 144 | ||
154 | cacheProf := perf.NewCacheProfiler(-1, i) | 145 | cacheProf := perf.NewCacheProfiler(-1, cpu) |
155 | if err := cacheProf.Start(); err != nil { | 146 | if err := cacheProf.Start(); err != nil { |
156 | return nil, err | 147 | return nil, err |
157 | } | ||
158 | collector.perfCacheProfilers[i] = &cacheProf | ||
159 | } | 148 | } |
149 | collector.perfCacheProfilers[cpu] = &cacheProf | ||
160 | } | 150 | } |
161 | 151 | ||
162 | collector.desc = map[string]*prometheus.Desc{ | 152 | collector.desc = map[string]*prometheus.Desc{ |
@@ -425,7 +415,7 @@ func (c *perfCollector) Update(ch chan<- prometheus.Metric) error { | |||
425 | func (c *perfCollector) updateHardwareStats(ch chan<- prometheus.Metric) error { | 415 | func (c *perfCollector) updateHardwareStats(ch chan<- prometheus.Metric) error { |
426 | for _, profiler := range c.perfHwProfilers { | 416 | for _, profiler := range c.perfHwProfilers { |
427 | cpuid := c.hwProfilerCPUMap[profiler] | 417 | cpuid := c.hwProfilerCPUMap[profiler] |
428 | cpuStr := fmt.Sprintf("%d", cpuid) | 418 | cpuStr := strconv.Itoa(cpuid) |
429 | hwProfile, err := (*profiler).Profile() | 419 | hwProfile, err := (*profiler).Profile() |
430 | if err != nil { | 420 | if err != nil { |
431 | return err | 421 | return err |