socpowerbud icon indicating copy to clipboard operation
socpowerbud copied to clipboard

[Issue] Failed on M1 Pro, T6000

Open ghostsun89 opened this issue 10 months ago • 1 comments

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%)

ghostsun89 avatar Aug 28 '23 07:08 ghostsun89