socpowerbud
socpowerbud copied to clipboard
[Issue] Failed on M1 Pro, T6000
Describe the bug When I built and ran the socpowrbud on my M1 Pro, it would crash and reported the following error.
2023-08-28 15:42:32.552340+0800 socpwrbud[97208:2473665] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndexedSubscript:]: index 0 beyond bounds for empty array'
*** First throw call stack:
(
0 CoreFoundation 0x000000019071f154 __exceptionPreprocess + 176
1 libobjc.A.dylib 0x000000019023e4d4 objc_exception_throw + 60
2 CoreFoundation 0x00000001908099b8 -[__NSCFString characterAtIndex:].cold.1 + 0
3 CoreFoundation 0x0000000190692bb8 -[__NSArrayM objectAtIndexedSubscript:] + 188
4 socpwrbud 0x000000010000424c format + 1588
5 socpwrbud 0x0000000100001dc0 main + 2872
6 dyld 0x000000019026ff28 start + 2236
)
libc++abi: terminating due to uncaught exception of type NSException
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndexedSubscript:]: index 0 beyond bounds for empty array'
terminating due to uncaught exception of type NSException
Device:
- Model: Apple M1 Pro
- CPU: 2 ECPUs and 6 PCPUs
Additional context I traced the program and found the error may be caused by the cpu cores num return by "AppleARMIODevice" service. The service return info as follows:
clocks = {length = 792, bytes = 0x28010101 00000000 504d5000 00000000 ... 53545f4f 46460000 };
clpc = {length = 4, bytes = 0x03000000};
clusters = {length = 12, bytes = 0x020000000400000004000000};
compatible = {length = 12, bytes = 0x706d6772312c743630303000};
"cpu-apsc" = {length = 4, bytes = 0x01000000};
It shows each cluster have 2, 4, 4 cores, but the real value is 2, 3, 3. So the program will crash later.
The powermetrics info is as follows:
E-Cluster Online: 100%
E-Cluster HW active frequency: 1250 MHz
E-Cluster HW active residency: 45.38% (600 MHz: 1.4% 972 MHz: 66% 1332 MHz: 7.4% 1704 MHz: 6.8% 2064 MHz: 19%)
E-Cluster idle residency: 54.62%
E-Cluster instructions retired: 3.71504e+09
E-Cluster instructions per clock: 0.802693
CPU 0 frequency: 1345 MHz
CPU 0 idle residency: 65.17%
CPU 0 active residency: 34.83% (600 MHz: .11% 972 MHz: 19% 1332 MHz: 4.1% 1704 MHz: 3.6% 2064 MHz: 8.2%)
CPU 1 frequency: 1345 MHz
CPU 1 idle residency: 66.15%
CPU 1 active residency: 33.85% (600 MHz: .10% 972 MHz: 18% 1332 MHz: 3.8% 1704 MHz: 3.5% 2064 MHz: 8.0%)
P0-Cluster Online: 100%
P0-Cluster HW active frequency: 1622 MHz
P0-Cluster HW active residency: 33.55% (600 MHz: 38% 828 MHz: .79% 1056 MHz: 7.5% 1296 MHz: 9.4% 1524 MHz: 6.8% 1752 MHz: 1.9% 1980 MHz: 1.7% 2208 MHz: 1.6% 2448 MHz: 2.6% 2676 MHz: 1.7% 2904 MHz: 8.5% 3036 MHz: 1.8% 3132 MHz: 2.6% 3168 MHz: .08% 3228 MHz: 15%)
P0-Cluster idle residency: 66.45%
P0-Cluster instructions retired: 9.39419e+09
P0-Cluster instructions per clock: 2.10022
CPU 2 frequency: 2102 MHz
CPU 2 idle residency: 73.67%
CPU 2 active residency: 26.33% (600 MHz: .92% 828 MHz: .36% 1056 MHz: 4.1% 1296 MHz: 4.4% 1524 MHz: 3.0% 1752 MHz: .86% 1980 MHz: .66% 2208 MHz: .59% 2448 MHz: .65% 2676 MHz: .38% 2904 MHz: 1.1% 3036 MHz: .52% 3132 MHz: .11% 3168 MHz: .00% 3228 MHz: 8.7%)
CPU 3 frequency: 2150 MHz
CPU 3 idle residency: 88.42%
CPU 3 active residency: 11.58% (600 MHz: .19% 828 MHz: .02% 1056 MHz: 1.3% 1296 MHz: 1.9% 1524 MHz: 2.0% 1752 MHz: .16% 1980 MHz: .36% 2208 MHz: .49% 2448 MHz: .44% 2676 MHz: .16% 2904 MHz: .97% 3036 MHz: .43% 3132 MHz: .16% 3168 MHz: .00% 3228 MHz: 3.0%)
CPU 4 frequency: 2180 MHz
CPU 4 idle residency: 95.64%
CPU 4 active residency: 4.36% (600 MHz: .05% 828 MHz: .00% 1056 MHz: .68% 1296 MHz: .81% 1524 MHz: .35% 1752 MHz: .05% 1980 MHz: .04% 2208 MHz: .19% 2448 MHz: .28% 2676 MHz: .19% 2904 MHz: .33% 3036 MHz: .28% 3132 MHz: .12% 3168 MHz: .00% 3228 MHz: .98%)
P1-Cluster Online: 100%
P1-Cluster HW active frequency: 768 MHz
P1-Cluster HW active residency: 2.89% (600 MHz: 85% 828 MHz: .50% 1056 MHz: 3.1% 1296 MHz: 4.8% 1524 MHz: 2.1% 1752 MHz: .35% 1980 MHz: .59% 2208 MHz: .34% 2448 MHz: .62% 2676 MHz: .15% 2904 MHz: .22% 3036 MHz: .08% 3132 MHz: .38% 3168 MHz: .04% 3228 MHz: 1.9%)
P1-Cluster idle residency: 97.11%
P1-Cluster instructions retired: 4.10535e+08
P1-Cluster instructions per clock: 1.68642
CPU 5 frequency: 1419 MHz
CPU 5 idle residency: 97.69%
CPU 5 active residency: 2.31% (600 MHz: .13% 828 MHz: .04% 1056 MHz: .86% 1296 MHz: .68% 1524 MHz: .25% 1752 MHz: .02% 1980 MHz: .01% 2208 MHz: .05% 2448 MHz: .01% 2676 MHz: .01% 2904 MHz: .02% 3036 MHz: .00% 3132 MHz: .02% 3168 MHz: 0% 3228 MHz: .19%)
CPU 6 frequency: 1340 MHz
CPU 6 idle residency: 99.20%
CPU 6 active residency: 0.80% (600 MHz: .09% 828 MHz: .00% 1056 MHz: .32% 1296 MHz: .14% 1524 MHz: .04% 1752 MHz: .07% 1980 MHz: .08% 2208 MHz: .05% 2448 MHz: .00% 2676 MHz: 0% 2904 MHz: .00% 3036 MHz: .00% 3132 MHz: .00% 3168 MHz: 0% 3228 MHz: .01%)
CPU 7 frequency: 1571 MHz
CPU 7 idle residency: 99.62%
CPU 7 active residency: 0.38% (600 MHz: .01% 828 MHz: .00% 1056 MHz: .23% 1296 MHz: .06% 1524 MHz: .00% 1752 MHz: .00% 1980 MHz: .00% 2208 MHz: 0% 2448 MHz: .00% 2676 MHz: 0% 2904 MHz: 0% 3036 MHz: 0% 3132 MHz: .00% 3168 MHz: 0% 3228 MHz: .08%)