@@ -64,177 +64,198 @@ type cacheProfiler struct {
6464// NewCacheProfiler returns a new cache profiler.
6565func NewCacheProfiler (pid , cpu int , opts ... int ) (CacheProfiler , error ) {
6666 profilers := map [int ]Profiler {}
67+ var e error
6768
6869 // L1 data
6970 op := unix .PERF_COUNT_HW_CACHE_OP_READ
7071 result := unix .PERF_COUNT_HW_CACHE_RESULT_ACCESS
7172 l1dataReadHit , err := NewL1DataProfiler (pid , cpu , op , result , opts ... )
7273 if err != nil {
73- return nil , err
74+ e = multierr .Append (e , err )
75+ } else {
76+ profilers [L1DataReadHit ] = l1dataReadHit
7477 }
75- profilers [L1DataReadHit ] = l1dataReadHit
7678
7779 op = unix .PERF_COUNT_HW_CACHE_OP_READ
7880 result = unix .PERF_COUNT_HW_CACHE_RESULT_MISS
7981 l1dataReadMiss , err := NewL1DataProfiler (pid , cpu , op , result , opts ... )
8082 if err != nil {
81- return nil , err
83+ e = multierr .Append (e , err )
84+ } else {
85+ profilers [L1DataReadMiss ] = l1dataReadMiss
8286 }
83- profilers [L1DataReadMiss ] = l1dataReadMiss
8487
8588 op = unix .PERF_COUNT_HW_CACHE_OP_WRITE
8689 result = unix .PERF_COUNT_HW_CACHE_RESULT_ACCESS
8790 l1dataWriteHit , err := NewL1DataProfiler (pid , cpu , op , result , opts ... )
8891 if err != nil {
89- return nil , err
92+ e = multierr .Append (e , err )
93+ } else {
94+ profilers [L1DataWriteHit ] = l1dataWriteHit
9095 }
91- profilers [L1DataWriteHit ] = l1dataWriteHit
9296
9397 // L1 instruction
9498 op = unix .PERF_COUNT_HW_CACHE_OP_READ
9599 result = unix .PERF_COUNT_HW_CACHE_RESULT_MISS
96100 l1InstrReadMiss , err := NewL1InstrProfiler (pid , cpu , op , result , opts ... )
97101 if err != nil {
98- return nil , err
102+ e = multierr .Append (e , err )
103+ } else {
104+ profilers [L1InstrReadMiss ] = l1InstrReadMiss
99105 }
100- profilers [L1InstrReadMiss ] = l1InstrReadMiss
101106
102107 // Last Level
103108 op = unix .PERF_COUNT_HW_CACHE_OP_READ
104109 result = unix .PERF_COUNT_HW_CACHE_RESULT_ACCESS
105110 llReadHit , err := NewLLCacheProfiler (pid , cpu , op , result , opts ... )
106111 if err != nil {
107- return nil , err
112+ e = multierr .Append (e , err )
113+ } else {
114+ profilers [LLReadHit ] = llReadHit
108115 }
109- profilers [LLReadHit ] = llReadHit
110116
111117 op = unix .PERF_COUNT_HW_CACHE_OP_READ
112118 result = unix .PERF_COUNT_HW_CACHE_RESULT_MISS
113119 llReadMiss , err := NewLLCacheProfiler (pid , cpu , op , result , opts ... )
114120 if err != nil {
115- return nil , err
121+ e = multierr .Append (e , err )
122+ } else {
123+ profilers [LLReadMiss ] = llReadMiss
116124 }
117- profilers [LLReadMiss ] = llReadMiss
118125
119126 op = unix .PERF_COUNT_HW_CACHE_OP_WRITE
120127 result = unix .PERF_COUNT_HW_CACHE_RESULT_ACCESS
121128 llWriteHit , err := NewLLCacheProfiler (pid , cpu , op , result , opts ... )
122129 if err != nil {
123- return nil , err
130+ e = multierr .Append (e , err )
131+ } else {
132+ profilers [LLWriteHit ] = llWriteHit
124133 }
125- profilers [LLWriteHit ] = llWriteHit
126134
127135 op = unix .PERF_COUNT_HW_CACHE_OP_WRITE
128136 result = unix .PERF_COUNT_HW_CACHE_RESULT_MISS
129137 llWriteMiss , err := NewLLCacheProfiler (pid , cpu , op , result , opts ... )
130138 if err != nil {
131- return nil , err
139+ e = multierr .Append (e , err )
140+ } else {
141+ profilers [LLWriteMiss ] = llWriteMiss
132142 }
133- profilers [LLWriteMiss ] = llWriteMiss
134143
135144 // dTLB
136145 op = unix .PERF_COUNT_HW_CACHE_OP_READ
137146 result = unix .PERF_COUNT_HW_CACHE_RESULT_ACCESS
138147 dTLBReadHit , err := NewDataTLBProfiler (pid , cpu , op , result , opts ... )
139148 if err != nil {
140- return nil , err
149+ e = multierr .Append (e , err )
150+ } else {
151+ profilers [DataTLBReadHit ] = dTLBReadHit
141152 }
142- profilers [DataTLBReadHit ] = dTLBReadHit
143153
144154 op = unix .PERF_COUNT_HW_CACHE_OP_READ
145155 result = unix .PERF_COUNT_HW_CACHE_RESULT_MISS
146156 dTLBReadMiss , err := NewDataTLBProfiler (pid , cpu , op , result , opts ... )
147157 if err != nil {
148- return nil , err
158+ e = multierr .Append (e , err )
159+ } else {
160+ profilers [DataTLBReadMiss ] = dTLBReadMiss
149161 }
150- profilers [DataTLBReadMiss ] = dTLBReadMiss
151162
152163 op = unix .PERF_COUNT_HW_CACHE_OP_WRITE
153164 result = unix .PERF_COUNT_HW_CACHE_RESULT_ACCESS
154165 dTLBWriteHit , err := NewDataTLBProfiler (pid , cpu , op , result , opts ... )
155166 if err != nil {
156- return nil , err
167+ e = multierr .Append (e , err )
168+ } else {
169+ profilers [DataTLBWriteHit ] = dTLBWriteHit
157170 }
158- profilers [DataTLBWriteHit ] = dTLBWriteHit
159171
160172 op = unix .PERF_COUNT_HW_CACHE_OP_WRITE
161173 result = unix .PERF_COUNT_HW_CACHE_RESULT_MISS
162174 dTLBWriteMiss , err := NewDataTLBProfiler (pid , cpu , op , result , opts ... )
163175 if err != nil {
164- return nil , err
176+ e = multierr .Append (e , err )
177+ } else {
178+ profilers [DataTLBWriteMiss ] = dTLBWriteMiss
165179 }
166- profilers [DataTLBWriteMiss ] = dTLBWriteMiss
167180
168181 // iTLB
169182 op = unix .PERF_COUNT_HW_CACHE_OP_READ
170183 result = unix .PERF_COUNT_HW_CACHE_RESULT_ACCESS
171184 iTLBReadHit , err := NewInstrTLBProfiler (pid , cpu , op , result , opts ... )
172185 if err != nil {
173- return nil , err
186+ e = multierr .Append (e , err )
187+ } else {
188+ profilers [InstrTLBReadHit ] = iTLBReadHit
174189 }
175- profilers [InstrTLBReadHit ] = iTLBReadHit
176190
177191 op = unix .PERF_COUNT_HW_CACHE_OP_READ
178192 result = unix .PERF_COUNT_HW_CACHE_RESULT_MISS
179193 iTLBReadMiss , err := NewInstrTLBProfiler (pid , cpu , op , result , opts ... )
180194 if err != nil {
181- return nil , err
195+ e = multierr .Append (e , err )
196+ } else {
197+ profilers [InstrTLBReadMiss ] = iTLBReadMiss
182198 }
183- profilers [InstrTLBReadMiss ] = iTLBReadMiss
184199
185200 // BPU
186201 op = unix .PERF_COUNT_HW_CACHE_OP_READ
187202 result = unix .PERF_COUNT_HW_CACHE_RESULT_ACCESS
188203 bpuReadHit , err := NewBPUProfiler (pid , cpu , op , result , opts ... )
189204 if err != nil {
190- return nil , err
205+ e = multierr .Append (e , err )
206+ } else {
207+ profilers [BPUReadHit ] = bpuReadHit
191208 }
192- profilers [BPUReadHit ] = bpuReadHit
193209
194210 op = unix .PERF_COUNT_HW_CACHE_OP_READ
195211 result = unix .PERF_COUNT_HW_CACHE_RESULT_MISS
196212 bpuReadMiss , err := NewBPUProfiler (pid , cpu , op , result , opts ... )
197213 if err != nil {
198- return nil , err
214+ e = multierr .Append (e , err )
215+ } else {
216+ profilers [BPUReadMiss ] = bpuReadMiss
199217 }
200- profilers [BPUReadMiss ] = bpuReadMiss
201218
202219 // Node
203220 op = unix .PERF_COUNT_HW_CACHE_OP_READ
204221 result = unix .PERF_COUNT_HW_CACHE_RESULT_ACCESS
205222 nodeReadHit , err := NewNodeCacheProfiler (pid , cpu , op , result , opts ... )
206223 if err != nil {
207- return nil , err
224+ e = multierr .Append (e , err )
225+ } else {
226+ profilers [NodeCacheReadHit ] = nodeReadHit
208227 }
209- profilers [NodeCacheReadHit ] = nodeReadHit
210228
211229 op = unix .PERF_COUNT_HW_CACHE_OP_READ
212230 result = unix .PERF_COUNT_HW_CACHE_RESULT_MISS
213231 nodeReadMiss , err := NewNodeCacheProfiler (pid , cpu , op , result , opts ... )
214232 if err != nil {
215- return nil , err
233+ e = multierr .Append (e , err )
234+ } else {
235+ profilers [NodeCacheReadMiss ] = nodeReadMiss
216236 }
217- profilers [NodeCacheReadMiss ] = nodeReadMiss
218237
219238 op = unix .PERF_COUNT_HW_CACHE_OP_WRITE
220239 result = unix .PERF_COUNT_HW_CACHE_RESULT_ACCESS
221240 nodeWriteHit , err := NewNodeCacheProfiler (pid , cpu , op , result , opts ... )
222241 if err != nil {
223- return nil , err
242+ e = multierr .Append (e , err )
243+ } else {
244+ profilers [NodeCacheWriteHit ] = nodeWriteHit
224245 }
225- profilers [NodeCacheWriteHit ] = nodeWriteHit
226246
227247 op = unix .PERF_COUNT_HW_CACHE_OP_WRITE
228248 result = unix .PERF_COUNT_HW_CACHE_RESULT_MISS
229249 nodeWriteMiss , err := NewNodeCacheProfiler (pid , cpu , op , result , opts ... )
230250 if err != nil {
231- return nil , err
251+ e = multierr .Append (e , err )
252+ } else {
253+ profilers [NodeCacheWriteMiss ] = nodeWriteMiss
232254 }
233- profilers [NodeCacheWriteMiss ] = nodeWriteMiss
234255
235256 return & cacheProfiler {
236257 profilers : profilers ,
237- }, nil
258+ }, e
238259}
239260
240261// Start is used to start the CacheProfiler, it will return an error if no
0 commit comments