exelban / stats

macOS system monitor in your menu bar
MIT License
24.66k stars 813 forks source link

SMC sensor keys for Apple M3 and M3 Pro/Max #1703

Closed tycho closed 8 months ago

tycho commented 9 months ago

Describe the bug I am sure this will be a fun one to figure out, but it would be nice if Stats could recognize and handle the SMC sensors for the Apple M3 (and Pro/Max) chips. The keys are definitely different from M1 and M2. Here's what Stats currently sees (during a CPU-intensive build, so the sensors look a bit alarming):

Screenshot 2023-11-27 at 3 42 19 AM

It's pretty clear it's not reading the right keys, particularly for CPU P-core/E-core temperature sensors and the GPU.

I've written a little script to try and identify the right sensors, but there is a lot of data making it difficult to correlate. Some of the SMC values are likely not instantaneous values but rather aggregates over certain time windows (e.g. moving averages or similar).

Here's the work-in-progress script. I've added some comments to it to explain the design. I also have a few guesses in there for what some of the keys correlate to.

https://gist.github.com/tycho/73fb64e7ba0b259923a92a4bacea9e78

If you have any tips on identifying the right sensors for temperature, power, etc, I'd appreciate suggestions.

Details:

exelban commented 9 months ago

Hi. Yeap, looks like each new SoC from Apple has different sensor keys. You can monitor all keys in the Stats by enabling the Show unknown sensors option in the settings.

If you are sure the keys you have in the script is the correct I can add them to the Stats.

tycho commented 9 months ago

The ones I have in the script are currently just guesses. I am somewhat confident the P-core/E-core temperature ones are right, but I'll keep tinkering with this to build some more confidence. I'm pretty sure the GPU-related ones are wrong, I'm still working on hunting those down.

exelban commented 9 months ago

Thanks. I will add CPU cores to the Stats. Please let me know if you will find more sensors. Unfortunately there is a way to get sensor keys: guessing(

exelban commented 9 months ago

PS: you have duplicated Tf0A and Tf4A keys

tycho commented 9 months ago

PS: you have duplicated Tf0A and Tf4A keys

Indeed I did, whoops. The E-core sensors are hard to figure out because of how challenging it is to get a heavy enough user workload to stay running on those (even with "background" QoS class, low niceness, etc). Maybe I'll try triggering a Spotlight rebuild or something, that should put some load on them. And I know that is pretty sticky to E-cores.

tycho commented 9 months ago

Okay, I updated the script and ran some more workloads to try and figure out the E-core/P-core/GPU temperature sensors.

The P-core ones I'm pretty certain are right.

The E-core ones are probably correct, but it's hard to tell. Even under load (Spotlight reindexing and Time Machine backup), they only get as high as about 54C and idle at 48C. I didn't see any other sensors that were obviously correct though.

As for the GPU ones, they're very definitely correlated (rising and dropping based on the GPU workload), but there sure are a lot of them. I mean, yes, there are 40 GPU cores in this thing, but 14 sensors for that seems like too many. EDIT: Pared the GPU sensors down to just eight -- six of them were duplicating values from other keys.

As for power sensors, I think I might have a lead on the GPU power value.

Comparing with output of powermetrics, watching it in lockstep with watch-smc.py, I suspect that GPU total power is a sum of the PCxx sensors:

PC00:   0.000   L  +0.000 B  +0.000
PC01:   0.000   L  +0.000 B  +0.000
PC02:   0.000   L  +0.000 B  -0.002
PC03:   0.000   L  +0.000 B  +0.000
PC10:   6.200   L  +0.507 B  +6.200
PC11:   0.000   L  +0.000 B  -0.001
PC12:   6.373   L  +0.592 B  +6.373
PC13:   0.000   L  +0.000 B  +0.000
PC20:   5.930   L  +0.229 B  +5.930
PC21:   0.000   L  -0.000 B  +0.000
PC22:   5.870   L  +0.342 B  +5.870
PC23:   0.000   L  +0.000 B  +0.000
PC30:   0.000   L  +0.000 B  +0.000
PC31:   0.000   L  +0.000 B  +0.000
PC32:   5.254   L  -0.567 B  +5.161
PC33:   0.000   L  +0.000 B  +0.000
PC40:   7.068   L  -0.099 B  +7.068
PC41:   0.000   L  +0.000 B  +0.000
PC42:   0.735   L  -0.167 B  +0.607
PC43:   0.065   L  -0.002 B  +0.064
PCMC:   0.000   L  +0.000 B  +0.000
PDTR:  83.598   L  +0.028 B +65.862
PHPC:  58.807   L -16.128 B +54.133
PHPS:  52.186   L  -0.050 B +49.534
PMVC:  17.747   L  -0.473 B +12.691
PPSC:   8.786   L  -0.479 B  +7.822
PR2b:   1.708   L  -2.956 B  +1.673
PSTR:  89.598   L  +1.378 B +72.291
PSVR:  58.627   L  +1.125 B +56.845
PZC0:  52.098   L  -0.165 B +49.449
PZC1:  52.723   L  +0.982 B +50.117
PZD1:   8.261   L  +0.186 B  +7.812

The above is when powermetrics claimed GPU Power: 30684 mW. The sum of the PCxx sensors is 37.495. A bit higher than what powermetrics is reporting, but if you subtract out the sum of PC4x, you get a total of 29.627, which is really close. Based on issues I've seen with other projects, such as asitop, I think powermetrics is not being well-maintained by Apple. It's possible that it summed up PC0x through PC3x and incorrectly excluded PC4x from its total.

exelban commented 9 months ago

@tycho it's a pretty nice script) Thanks for sharing)

Will try to find an m2 platform to get sensors for that soc. Because m2 has a pretty big gap in the sensors.

I want to add this functionality to the app now😅

tycho commented 9 months ago

I've got an M2 MacBook Air I could tinker with getting some more sensor info from. I'll have to see what I can find.

gilby101 commented 9 months ago

On my M3 (not Pro or Max) my guesses using smc (and comparison with watch-smc and values.swift) are:

P-Cores: There are no Tf keys - so completely different. I think the 4 cores are: Tp01 Tp05 Tp0D Tp0H which repeat very closely as Tp0L Tp0P Tp0X Tp0b This is more like your base Apple silicon keys.

E-Cores: I am happy with Te05 and Te0L (as in your list). I think Te0P is wrong and Te0S does not exist. I don't know where the other 2 E-cores might be!

tycho commented 9 months ago

Interesting! Could you share the output of "/Applications/Stats.app/Contents/Resources/smc list"? It would be interesting to know which keys the M3 and M3 Max have in common -- any added keys in the M3 Max might be the additional cores and could give hints as to the naming scheme.

gilby101 commented 9 months ago

Here you are: [Uploading smc20231129-1527.txt…]()

tycho commented 9 months ago

Here you are: Uploading smc20231129-1527.txt…

Try again? It didn't finish uploading before you hit submit. :)

gilby101 commented 9 months ago

Try again: smc20231129-1527.txt

tycho commented 9 months ago

Try again: smc20231129-1527.txt

Wow, that's a lot more differences than I was expecting. https://gist.github.com/tycho/215aaf4b9eedc065f132cf6d98153d00

gilby101 commented 9 months ago

Very different. Maybe the M3 is just a souped up M1 design and its sensors are more like an M1. This is my only AS Mac so can't compare.

My interest is that, for my own amusement, I use Cacti (SNMP network monitoring) to capture a few Mac sensors and have always based that on running smcutil/smc under an SNMP script.

tycho commented 9 months ago

I updated the watch-smc.py script, embedding the lists of M3 and M3 Max SMC keys. This way we can easily identify which ones are in common between the two.

For example, here's what happens with the Power-related SMC keys during a GPU-based (MetalRT on) Blender render on my M3 Max:

[PC40] M3-Max  :   7.625   L  -0.033 B  +7.625 GPU 16
[PHPC] M3-Any  :  58.209   L -11.954 B +50.133 CPU power total? 1
[PHPS] M3-Any  :  50.055   L  +3.097 B +48.675 CPU power total? 2
[PMVC] M3-Max  :  15.066   L  +1.229 B +13.043
[PPBR] M3-Any  :  76.915   L  +2.905 B +69.903
[PPSC] M3-Max  :   8.872   L  +0.749 B  +8.271
[PSTR] M3-Any  :  75.708   L  +2.332 B +65.885
[PSVR] M3-Max  :  53.357   L  +2.042 B +52.024
[PZC0] M3-Any  :  50.051   L  +3.146 B +48.671
[PZC1] M3-Any  :  49.765   L  +2.555 B +48.402
[PZD1] M3-Any  :   8.413   L  +0.971 B  +8.252
[Pb0f] M3-Any  :  76.989   L  +3.093 B +69.952 Battery discharge rate

During this run, powermetrics --samplers gpu_power claims GPU Power: 29607 mW. Nothing above seems to directly correlate. Hrm.

tycho commented 9 months ago

I've added some notes on here: https://gist.github.com/tycho/73fb64e7ba0b259923a92a4bacea9e78

To summarize, my current line of thought on the breakdown for the PCxx values is:

First 6 P-cores        PC02
Second 6 P-cores       PC42
Memory controller?     PC32
Generic GPU cores      PC10, PC12, PC20, PC22
Compute GPU cores?     PC40
Neural Engine          PC00

I'm not completely sure what PC40 is, but a Blender render (with or without MetalRT) will light that one up. PC32 is a bit confusing too, because it ticks up at unpredictable times. I think it might be something to do with memory bus load.

Unfortunately all the PCxx keys are not present on the M3 base model, only on M3 Max. It's entirely possible that M3, M3 Pro, and M3 Max all have different SMC keys.

tycho commented 9 months ago

This looks promising:

https://github.com/freedomtan/test-ioreport

If you use that, one of the bits in the report it spews out is this (truncated because there's a lot):

...
2023-11-29 04:04:33.131 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  PCPU1DTL59: 1226299 (mJ)
2023-11-29 04:04:33.131 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  PCPU1DTL5a: 1165671 (mJ)
2023-11-29 04:04:33.131 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  PCPU1DTL5b: 510189 (mJ)
2023-11-29 04:04:33.131 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  PCPU1DTL5c: 236246 (mJ)
2023-11-29 04:04:33.131 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  PCPU1DTL5d: 204126 (mJ)
2023-11-29 04:04:33.131 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  PCPU1DTL5e: 284341 (mJ)
2023-11-29 04:04:33.131 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  PCPU1DTL5f: 158006 (mJ)
2023-11-29 04:04:33.131 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  PCPU1DTL510: 472478 (mJ)
2023-11-29 04:04:33.131 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  PCPU1DTL511: 397702 (mJ)
2023-11-29 04:04:33.131 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  PCPU1DTL512: 131972 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  PCPU1DTL513: 14117558 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  GPU0: 146981507 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  GPU CS0: 25159023 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  GPU SRAM0: 745944 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  GPU CS SRAM0: 42309 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  ANE0: 1838325 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  ISP0: 1029132 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  AVE0: 1386731 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  MSR0: 1506437 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  DCS0: 88926760 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  DRAM0: 101960769 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  AMCC0: 175035374 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  DISP0: 29543093 (mJ)
2023-11-29 04:04:33.132 test_ioreport[73270:3609034] AppleT6031PMGR <id 0x1000003f9>: Energy Model: (null):  DISPEXT0: 8106668 (mJ)

It reports energy in milli-Joule counters. So you can take two snapshots, subtract to get deltas between the two snapshots, divide by time between reading samples, and ta-daa, you have watts for each metric.

That seems to be the interface that the powermetrics command line tool talks to.

@exelban Think you could try out integrating an IOReport method for gathering power metrics? I recommend trying the project I mentioned with the command line ./test_ioreport "Energy Model", as that has all the mJ metrics.

exelban commented 9 months ago

Hi, I have added CPU and GPU sensors in today release. If you will have more keys to add just ping me.

tycho commented 9 months ago
image

@exelban The sensor list is still a bit wonky.

exelban commented 9 months ago

oh, I forgot to detect m3 platform( will deploy a quick fix in a few minutes

exelban commented 9 months ago

Could you please check this build:

Stats.dmg.zip

tycho commented 9 months ago
Screenshot 2023-12-03 at 6 35 15 AM Screenshot 2023-12-03 at 6 35 19 AM

That build looks pretty good to me.

exelban commented 9 months ago

thx, I have updated the latest release with this fix.

djcristi commented 9 months ago

the cpu sensor temps are not ok. they show like 10 degree less than powermetrics / istat / tg pro . on my 16" m3 max 14 core. also it displays 12 p-cores temp values and it only has 10

djcristi commented 9 months ago

PDBR i suspect it's Display. i see it goes from 1W to 11W based on backlight.

tycho commented 9 months ago

PDBR i suspect it's Display. i see it goes from 1W to 11W based on backlight.

Agreed, already had that one here: https://gist.github.com/tycho/73fb64e7ba0b259923a92a4bacea9e78#file-watch-smc-py-L620 DBR probably stands for "Display BRightness"

tycho commented 9 months ago

the cpu sensor temps are not ok. they show like 10 degree less than powermetrics / istat / tg pro . on my 16" m3 max 14 core. also it displays 12 p-cores temp values and it only has 10

Can you post your "smc list" output as well? That might help narrow down the core temp sensor possibilities.

djcristi commented 9 months ago

smc.txt

Screenshot 2023-12-10 at 10 10 45
tycho commented 9 months ago

@djcristi Updated with your 14-core M3 Max keys:

https://gist.github.com/tycho/73fb64e7ba0b259923a92a4bacea9e78

I added a quick way to see the difference between the 14 and 16 core versions:

Keys in 16-core M3 Max but not in 14-core M3 Max: ['SFFC', 'TDTC', 'TVS3', 'Tf2C', 'ceF3', 'ceP3', 'ceU3', 'cm01', 'cmD5', 'cmF3', 'csF3', 'csP3', 'csU3', 'f009', 'f00a', 'frMX', 'fts3', 'fuP3', 'fuU3', 'iaD5', 'iaFs', 'iaP3', 'isF3', 'isP3', 'isU3', 'maF3', 'maP3', 'maU3', 'mlT3', 'mlTL', 'mlTl', 'mm00', 'mmV5', 'mxS3', 'mxSd', 'oF30', 'oF31', 'oF32', 'oF33', 'oF34', 'oF35', 'oF36', 'oF37', 'oF38', 'oF39', 'oF40', 'oF41', 'oF42', 'oTO3', 'ocew', 'ofci', 'ofcj', 'ofck', 'ofcl', 'ofli', 'oflj', 'oflk', 'ofll', 'ofp3', 'oft2', 'oft4', 'oft6', 'oftA', 'oftc', 'ofte', 'oisw', 'oke8', 'oki4', 'oki8', 'okiw', 'okp4', 'okp8', 'okpw', 'otCZ', 'otCz', 'otMx', 'otMy', 'ov04', 'ov05', 'ov24', 'ov40', 'ov41', 'ov42', 'ov43', 'ov44', 'ovCY', 'ovCj', 'ovCk', 'ovCl', 'ovEa', 'ovEb', 'ovEc', 'ovEg', 'ovNj', 'ovNk', 'ovNl', 'si0J', 'si0T', 'si0e', 'si0f', 'si0g', 'sit5', 'uuF3', 'uuO3', 'uuP3', 'uuU3', 'uuV5', 'uuhp', 'w002']

Some of the keys not in the 14-core are present in both M3 base spec and M3 Max 16-core, which is strange.

Here's the list of ones present only in the 16-core version:

['SFFC', 'TVS3', 'Tf2C', 'ceF3', 'ceP3', 'ceU3', 'cm01', 'cmD5', 'cmF3', 'csF3', 'csP3', 'csU3', 'f009', 'f00a', 'fts3', 'fuP3', 'fuU3', 'iaD5', 'iaFs', 'iaP3', 'isF3', 'isP3', 'isU3', 'maF3', 'maP3', 'maU3', 'mlT3', 'mlTL', 'mlTl', 'mm00', 'mmV5', 'mxS3', 'mxSd', 'oF30', 'oF31', 'oF32', 'oF33', 'oF34', 'oF35', 'oF36', 'oF37', 'oF38', 'oF39', 'oF40', 'oF41', 'oF42', 'oTO3', 'ocew', 'ofci', 'ofcj', 'ofck', 'ofcl', 'ofli', 'oflj', 'oflk', 'ofll', 'ofp3', 'oft4', 'oft6', 'oftA', 'ofte', 'oisw', 'oke8', 'oki4', 'oki8', 'okiw', 'okp4', 'okp8', 'okpw', 'otCZ', 'otCz', 'otMx', 'otMy', 'ov04', 'ov05', 'ov40', 'ov41', 'ov42', 'ov43', 'ov44', 'ovCY', 'ovCj', 'ovCk', 'ovCl', 'ovEa', 'ovEb', 'ovEc', 'ovEg', 'ovNj', 'ovNk', 'ovNl', 'si0T', 'sit5', 'uuF3', 'uuO3', 'uuP3', 'uuU3', 'uuV5', 'uuhp', 'w002']

And these are 14-core only keys (not in M3 base or M3 Max 16-core models):

['ACDE', 'TDCR', 'TDEC', 'fRMX', 'ft15', 'ft16', 'meFs', 'oF18', 'oF19', 'oF20', 'oF21', 'oF22', 'oftf', 'oftg', 'ovUa', 'ovUb', 'ovUc', 'ovUg', 'ovs1', 'ovs2', 'ovs3', 'si05', 'si06', 'si07', 'si08', 'uuPS', 'uupw']

djcristi commented 9 months ago

did you notice the cpu power consumption diff? so in my 13" pro m1 , the powermetrics power is the same with the one reported by the one from smc.

In this 16 m3 max 14c (Sonoma 14.1.2 & 14.2), under full p-cores load (https://cpux.net/cpu-stress-test-online , 10 thread at 100%)

auto/high-power mode: smc reports ~60W (62 phpc/ 58 phps, 10 display pdbr, 86W total DC IN), AC power meter 92W and powermetrics only 48W cpu/pkg

on low power mode: smc reports 30-32W (32 phpc/ 30 phps, 10 display pdbr, 53W total DC IN), AC power meter 57W and powermetrics only 21W cpu/pkg.

Considering total power consumption, powermetrics is wrong.

l.e. same for GPU

@tycho can you test on your 16 core to see how this looks?

joujek commented 9 months ago

Hi @exelban I would like ask again for update sensor keys for M2 Pro / Max platform to have Efficiency and Performance cores instead of 8 general. SMC output: 14inch M2 Pro 12c19g: smc_m2pro12c19g.txt

image

image

image

exelban commented 9 months ago

@joujek no problem. Just give keys that need to be used instead of actual.

joujek commented 9 months ago

UPDATE:

HI @exelban below the keys found by decompiling one of alternative sw: I have compared to my smc output and values from "Show unknown sensors" looks legit :)

Px - x performance core / Ex - x efficiency core M2 8C: Tp01 P1 Tp05 P2 Tp09 P3 Tp0D P4 Tp0b E1 Tp0f E2 Tp0j E3 **Tp0n** E4 //This sensor is different than Pro/Max platform M2 PRO 10C Tp01 P1 Tp05 P2 Tp09 P3 Tp0D P4 Tp0X P5 Tp0b P6 Tp0f E1 Tp1l E2 Tp1h E3 Tp0j E4 M2 PRO 14C Tp01 P1 Tp05 P2 Tp09 P3 Tp0D P4 Tp0X P5 Tp0b P6 Tp0f P7 Tp0j P8 Tp1h E1 Tp1t E2 Tp1p E3 Tp1l E4 ``` case .m2, .m2Pro, .m2Max, .m2Ultra: self.list = ["Tp1h", "Tp1t", "Tp1p", "Tp1l", "Tp01", "Tp05", "Tp09", "Tp0D","Tp0X","Tp0b","Tp0f","Tp0j"] ``` ``` //M2 Sensor(key: "Tp1h", name: "CPU efficiency core 1", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true), Sensor(key: "Tp1t", name: "CPU efficiency core 2", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true), Sensor(key: "Tp1p", name: "CPU efficiency core 3", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true), Sensor(key: "Tp1l", name: "CPU efficiency core 4", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true), Sensor(key: "Tp01", name: "CPU performance core 1", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true), Sensor(key: "Tp05", name: "CPU performance core 2", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true), Sensor(key: "Tp09", name: "CPU performance core 3", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true), Sensor(key: "Tp0D", name: "CPU performance core 4", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true), Sensor(key: "Tp0X", name: "CPU performance core 5", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true), Sensor(key: "Tp0b", name: "CPU performance core 6", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true), Sensor(key: "Tp0f", name: "CPU performance core 7", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true), Sensor(key: "Tp0j", name: "CPU performance core 8", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true), ``` Thank you in advance
joujek commented 9 months ago

In addition I'm attaching dump for M3/Pro/Max Platform: Mac15,3, Mac15,6, Mac15,8, Mac15,10, Mac15,7, Mac15,9, Mac15,11

M3ProMax_dump.txt

++ GPU:

M3GPU_dump.txt

Hope it helps

gilby101 commented 9 months ago

@joujek I have an M3 (15.3). I agree (from observation of counters under loads) with your "choice" for GPU and P-core sensors.

Your E-cores, I am not so sure about. When P-cores are loaded and the E-cores not, your values for the E-cores are roughly the same as the P-cores - I would expect them to be lower.

My best guess is Te05 and Te0L for two E-cores, but I am stuck for the other two! All the other Te values are higher than those.

Looking at other products: TGPro shows e-cores lower than p-cores and agree with using Te05 and Te0L. iStat shows e-cores always about the same as p-cores - suggesting it uses Tp0B, etc for E-cores.

joujek commented 9 months ago

HI @gilby101 - The dump I shared is from latest iStat ;)

Personally I have M2 Pro 12/19 and compared iStats vs Macs Fan Control vs Stats (unknown sensors list). I believe any changes for M2Pro/Max will be better than generic/present 8 cores we have now in Stats.

gilby101 commented 9 months ago

Hi @joujek My feeling is that TG Pro is ahead of iStats for the M3 (not pro/max). I will leave you do any serious reverse engineering.

djcristi commented 8 months ago

@tycho : macbook pro 14" m3 max 14c

smclist.txt

Screenshot 2023-12-16 at 15 30 16

tg pro vs istat:

Screenshot 2023-12-16 at 15 56 49

djcristi commented 8 months ago

did you notice the cpu power consumption diff? so in my 13" pro m1 , the powermetrics power is the same with the one reported by the one from smc. ----- blabla Considering total power consumption, powermetrics is wrong.

@tycho can you test on your 16 core to see how this looks?

sorry , i don't want to add posts with power consumption results here since it's different than this topic. i moved them here : https://forums.macrumors.com/threads/m3-max-14c-powermetrics-wattage-wrong-14-vs-16.2414321/

joujek commented 8 months ago

UPDATE:

HI @exelban below the keys found by decompiling one of alternative sw: I have compared to my smc output and values from "Show unknown sensors" looks legit :)

Px - x performance core / Ex - x efficiency core

M2 8C: Tp01 P1 Tp05 P2 Tp09 P3 Tp0D P4

Tp0b E1 Tp0f E2 Tp0j E3 Tp0n E4 //This sensor is different than Pro/Max platform

M2 PRO 10C

Tp01 P1 Tp05 P2 Tp09 P3 Tp0D P4 Tp0X P5 Tp0b P6

Tp0f E1 Tp1l E2 Tp1h E3 Tp0j E4

M2 PRO 14C

Tp01 P1 Tp05 P2 Tp09 P3 Tp0D P4 Tp0X P5 Tp0b P6 Tp0f P7 Tp0j P8

Tp1h E1 Tp1t E2 Tp1p E3 Tp1l E4

case .m2, .m2Pro, .m2Max, .m2Ultra:
self.list = ["Tp1h", "Tp1t", "Tp1p", "Tp1l", "Tp01", "Tp05", "Tp09", "Tp0D","Tp0X","Tp0b","Tp0f","Tp0j"]
//M2
    Sensor(key: "Tp1h", name: "CPU efficiency core 1", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true),
    Sensor(key: "Tp1t", name: "CPU efficiency core 2", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true),
    Sensor(key: "Tp1p", name: "CPU efficiency core 3", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true),
    Sensor(key: "Tp1l", name: "CPU efficiency core 4", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true),

    Sensor(key: "Tp01", name: "CPU performance core 1", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true),
    Sensor(key: "Tp05", name: "CPU performance core 2", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true),
    Sensor(key: "Tp09", name: "CPU performance core 3", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true),
    Sensor(key: "Tp0D", name: "CPU performance core 4", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true),
    Sensor(key: "Tp0X", name: "CPU performance core 5", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true),
    Sensor(key: "Tp0b", name: "CPU performance core 6", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true),
    Sensor(key: "Tp0f", name: "CPU performance core 7", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true),
    Sensor(key: "Tp0j", name: "CPU performance core 8", group: .CPU, type: .temperature, platforms: [.m2, .m2Max, .m2Pro, .m2Ultra], average: true),

Thank you in advance

@exelban any feedback on this ?

djcristi commented 8 months ago

@exelban do you have on plan to fix temp sensors for m3 max, it does not show correct temp , i guess you've messed the sensor names.

also the PDBR (mini-led backlight power) i think can be put as known sensor, it's common along Macbook xdr display (14/16 mbp)

exelban commented 8 months ago

@djcristi all sensors from that issue have already been included in the build for a few weeks. If you have more sensors just share the list and I will add it.

djcristi commented 7 months ago

like i've wrote in my previous thread, PDBR is still listed as unknown istead of 'Display Backlight Power' or something.

and the temp sensor names are wrong , for M3 max 14c at least,

stats (wrong <40)

Screenshot 2024-01-14 at 13 16 03

tg pro (real ones):

Screenshot 2024-01-14 at 13 16 08

istat menus (wrong on 9,10):

Screenshot 2024-01-14 at 13 16 25
xdsta commented 7 months ago

Just updated to version Version 2.9.20:

Bildschirmfoto 2024-01-14 um 14 05 07

M3ProMax_dump.txt

Seems like the values from commit https://github.com/exelban/stats/commit/df1a0a8bacb9a9a6c23afa3c5faaabae2fc15890 are not working for M3 pro 11C CPU.