Skip to content

Commit 69aadee

Browse files
authored
fix retrieval of all-core max frequency for multi-die architectures (#323)
* fix retrieval of all-core max frequency for multi-die architectures Signed-off-by: Harper, Jason M <[email protected]> * don't assume sse is caps Signed-off-by: Harper, Jason M <[email protected]> --------- Signed-off-by: Harper, Jason M <[email protected]>
1 parent 3fbdb8a commit 69aadee

File tree

1 file changed

+39
-6
lines changed

1 file changed

+39
-6
lines changed

internal/report/table_helpers.go

+39-6
Original file line numberDiff line numberDiff line change
@@ -356,19 +356,52 @@ func maxFrequencyFromOutput(outputs map[string]script.ScriptOutput) string {
356356
}
357357
// get the max frequency from the MSR/tpmi
358358
specCoreFrequencies, err := getSpecFrequencyBuckets(outputs)
359-
if err == nil && len(specCoreFrequencies) > 1 && len(specCoreFrequencies[1]) > 1 {
360-
return specCoreFrequencies[1][1] + "GHz"
359+
if err == nil {
360+
sseFreqs := getSSEFreqsFromBuckets(specCoreFrequencies)
361+
if len(sseFreqs) > 0 {
362+
// max (single-core) frequency is the first SSE frequency
363+
return sseFreqs[0] + "GHz"
364+
}
361365
}
362366
return valFromDmiDecodeRegexSubmatch(outputs[script.DmidecodeScriptName].Stdout, "4", `Max Speed:\s(.*)`)
363367
}
364368

369+
func getSSEFreqsFromBuckets(buckets [][]string) []string {
370+
if len(buckets) < 2 {
371+
return nil
372+
}
373+
// find the SSE column
374+
sseColumn := -1
375+
for i, col := range buckets[0] {
376+
if strings.ToUpper(col) == "SSE" {
377+
sseColumn = i
378+
break
379+
}
380+
}
381+
if sseColumn == -1 {
382+
return nil
383+
}
384+
// get the SSE values from the buckets
385+
sse := make([]string, 0, len(buckets)-1)
386+
for i := 1; i < len(buckets); i++ {
387+
if len(buckets[i]) > sseColumn {
388+
sse = append(sse, buckets[i][sseColumn])
389+
}
390+
}
391+
return sse
392+
}
393+
365394
func allCoreMaxFrequencyFromOutput(outputs map[string]script.ScriptOutput) string {
366395
specCoreFrequencies, err := getSpecFrequencyBuckets(outputs)
367-
if err == nil && len(specCoreFrequencies) >= 2 && len(specCoreFrequencies[1]) > 1 {
368-
// the last entry in the 2nd column is the max all-core frequency
369-
return specCoreFrequencies[len(specCoreFrequencies)-1][1] + "GHz"
396+
if err != nil {
397+
return ""
370398
}
371-
return ""
399+
sseFreqs := getSSEFreqsFromBuckets(specCoreFrequencies)
400+
if len(sseFreqs) < 1 {
401+
return ""
402+
}
403+
// all core max frequency is the last SSE frequency
404+
return sseFreqs[len(sseFreqs)-1] + "GHz"
372405
}
373406

374407
func hyperthreadingFromOutput(outputs map[string]script.ScriptOutput) string {

0 commit comments

Comments
 (0)