Skip to content

Commit 365e2f6

Browse files
committed
More updates for asi
1 parent 53abb77 commit 365e2f6

File tree

1 file changed

+51
-14
lines changed

1 file changed

+51
-14
lines changed

main.go

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -503,9 +503,9 @@ func parseCPUMetrics(powermetricsOutput string, cpuMetrics CPUMetrics) CPUMetric
503503
residencyRe := regexp.MustCompile(`(\w+-Cluster)\s+HW active residency:\s+(\d+\.\d+)%`)
504504
frequencyRe := regexp.MustCompile(`(\w+-Cluster)\s+HW active frequency:\s+(\d+)\s+MHz`)
505505

506-
const numReadings = 5
507-
var pClusterReadings []int
508-
var pClusterFreqReadings []int
506+
// const numReadings = 5
507+
// var pClusterReadings []int
508+
// var pClusterFreqReadings []int
509509
for _, line := range lines {
510510
residencyMatches := residencyRe.FindStringSubmatch(line)
511511
frequencyMatches := frequencyRe.FindStringSubmatch(line)
@@ -533,6 +533,7 @@ func parseCPUMetrics(powermetricsOutput string, cpuMetrics CPUMetrics) CPUMetric
533533
} else if strings.HasPrefix(cluster, "P") {
534534
pClusterActiveTotal += int(percent)
535535
pClusterCount++
536+
cpuMetrics.PClusterActive = pClusterActiveTotal / pClusterCount
536537
}
537538
}
538539

@@ -559,11 +560,11 @@ func parseCPUMetrics(powermetricsOutput string, cpuMetrics CPUMetrics) CPUMetric
559560
} else if strings.HasPrefix(cluster, "P") {
560561
pClusterFreqTotal += int(freqMHz)
561562
cpuMetrics.PClusterFreqMHz = pClusterFreqTotal
562-
pClusterFreqReadings = append(pClusterFreqReadings, freqMHz)
563-
if len(pClusterFreqReadings) > numReadings {
564-
pClusterFreqReadings = pClusterFreqReadings[1:] // Remove the oldest reading
565-
}
566-
cpuMetrics.PClusterFreqMHz = average(pClusterFreqReadings)
563+
// pClusterFreqReadings = append(pClusterFreqReadings, freqMHz)
564+
// if len(pClusterFreqReadings) > numReadings {
565+
// pClusterFreqReadings = pClusterFreqReadings[1:] // Remove the oldest reading
566+
// }
567+
// cpuMetrics.PClusterFreqMHz = average(pClusterFreqReadings)
567568
}
568569
}
569570

@@ -607,13 +608,29 @@ func parseCPUMetrics(powermetricsOutput string, cpuMetrics CPUMetrics) CPUMetric
607608
cpuMetrics.ECores = eCores
608609
cpuMetrics.PCores = pCores
609610

610-
// Calculate average P-Cluster Active using a moving average
611-
currentPActive := (cpuMetrics.P0ClusterActive + cpuMetrics.P1ClusterActive + cpuMetrics.P2ClusterActive + cpuMetrics.P3ClusterActive) / 4
612-
pClusterReadings = append(pClusterReadings, currentPActive)
613-
if len(pClusterReadings) > numReadings {
614-
pClusterReadings = pClusterReadings[1:] // Remove the oldest reading
611+
if cpuMetrics.E1ClusterActive != 0 {
612+
// M1 Ultra
613+
cpuMetrics.EClusterActive = (cpuMetrics.E0ClusterActive + cpuMetrics.E1ClusterActive) / 2
614+
cpuMetrics.EClusterFreqMHz = max(cpuMetrics.E0ClusterFreqMHz, cpuMetrics.E1ClusterFreqMHz)
615+
}
616+
617+
if cpuMetrics.P3ClusterActive != 0 {
618+
// M1 Ultra
619+
cpuMetrics.PClusterActive = (cpuMetrics.P0ClusterActive + cpuMetrics.P1ClusterActive + cpuMetrics.P2ClusterActive + cpuMetrics.P3ClusterActive) / 4
620+
freqs := []int{cpuMetrics.P0ClusterFreqMHz, cpuMetrics.P1ClusterFreqMHz, cpuMetrics.P2ClusterFreqMHz, cpuMetrics.P3ClusterFreqMHz}
621+
cpuMetrics.PClusterFreqMHz = maxInt(freqs)
622+
} else {
623+
cpuMetrics.PClusterActive = (cpuMetrics.P0ClusterActive + cpuMetrics.P1ClusterActive) / 2
624+
cpuMetrics.PClusterFreqMHz = max(cpuMetrics.P0ClusterFreqMHz, cpuMetrics.P1ClusterFreqMHz)
615625
}
616-
cpuMetrics.PClusterActive = average(pClusterReadings)
626+
627+
// // Calculate average P-Cluster Active using a moving average
628+
// currentPActive := (cpuMetrics.P0ClusterActive + cpuMetrics.P1ClusterActive + cpuMetrics.P2ClusterActive + cpuMetrics.P3ClusterActive) / 4
629+
// pClusterReadings = append(pClusterReadings, currentPActive)
630+
// if len(pClusterReadings) > numReadings {
631+
// pClusterReadings = pClusterReadings[1:] // Remove the oldest reading
632+
// }
633+
// cpuMetrics.PClusterActive = average(pClusterReadings)
617634

618635
// Calculate average active residency and frequency for E and P clusters
619636
if eClusterCount > 0 {
@@ -631,6 +648,26 @@ func average(nums []int) int {
631648
return sum / len(nums)
632649
}
633650

651+
func max(nums ...int) int {
652+
maxVal := nums[0]
653+
for _, num := range nums[1:] {
654+
if num > maxVal {
655+
maxVal = num
656+
}
657+
}
658+
return maxVal
659+
}
660+
661+
func maxInt(nums []int) int {
662+
max := nums[0]
663+
for _, num := range nums {
664+
if num > max {
665+
max = num
666+
}
667+
}
668+
return max
669+
}
670+
634671
func parseGPUMetrics(powermetricsOutput string, gpuMetrics GPUMetrics) GPUMetrics {
635672
re := regexp.MustCompile(`GPU HW active residency:\s+(\d+\.\d+)%`) // Regex to capture the floating-point number followed by '%'
636673
lines := strings.Split(powermetricsOutput, "\n")

0 commit comments

Comments
 (0)