Seems like good work. From what I've heard developing on MacOS has not gotten easier over the years. I do question the point, though. I suppose there's merit in knowing if your configuration causes thermal throttling, but what are you able to do about it? There's no fan profile to tweak or anything. Can you undervolt them?
I've been using Macs-Fan-Control since I picked up a Mac M1 a few years back and it works great. It lets you control the fan RPM based on CPU Core values.
I adjusted it to ramp the fans up at more conservative values because otherwise during intense usage periods it would hit 90C+.
Quit some apps probably. I often have a bunch of stuff running in the background that I haven't bothered to close yet. It also sounds like it'd be good for detecting software that's gotten stuck in a busy loop or similar.
And/or possibly take a tea break while it chills out.
On Macbooks with fans, I started tuning my fan curve with iStat Menus (https://bjango.com/help/istatmenus7/fans/#custom-fan-curve) because I noticed the default curve was lagging behind and thermal throttling kicked in before the fan even reach max speed.
For Apple Silicon specifically, I recently discovered that there is a "high power mode" (https://support.apple.com/en-us/101613) that allows the fans to run at higher speed. So I don't use the custom fan curves anymore, it helped me a lot (but it does get quite noisy on a 14" M4 Max)
For a Macbook Air, not much you can do besides closing stuff, or elevating the macbook and pointing a fan at it or things like that... but yeah it's a bit desperate!
Environment: I am currently playing with a pid control function for my gpu fan, that is instead of saying "map temp x to fanspeed y"(fan curve) say "set fan to speed needed for temp z"(pid control)
Question: is there a reason pid type control is never a thermal option? Or put another way, is there something about the desired thermal characteristics of a computer that make pid control undesirable?
As a final thought, I have halfway convinced myself that in a predictable thermal system a map would match a set of pid parameters anyway.
> "set fan to speed needed for temp z"(pid control)
Why though? I generally don't care about the specific temperatures of my CPU and GPU, just that they don't get too warm, so for the CPU (AIO) I basically have "0% up until 45C, then increment up to 100% when it hits 90C" and the same for the GPU except it's always at 10%.
I guess I could figure out target temperatures, and do it the other way, but I'm not sure what the added complexity is for? The end results (I need at least) remains the same, cool down the hardware when it gets hotter, and for me, the simpler the better.
I also have two ambient temperature sensors in the chassi itself, right at the intake and the outtake. The intake one is just for monitoring if my room gets too warm so the computer won't be effective at cooling (as the summers here get really warm) and the outtake one is to check overall temperature and control the intake fans. In reality, I don't think I need to do even this, just the CPU+GPU temperature + set fan speed based on that feels simple enough to solve 99% of the things you'd like to be able to do here.
You know what, fair point. I know because my fans go haywire (except that one time my fans decided to just not work until I ran some incantations. The joys of Linux). If you're passively cooled, you get no feedback on CPU load. Makes sense.
Indeed, that's why apps like iStat Menus, Stats, Sensei etc (for macOS at least) are very useful, I keep the CPU usage and power usage in my menu bar at all times, this is very useful on battery. For example I know that my Macbook Air idles at ~2W-5W, so if I'm doing nothing special and it's using 15W, a process is doing some funny stuff
Depends on the environment, back when I had a MacBook, they still had fans, but the new ones are all passive, I think. So then the surface (or lack of it) below it would matter the most. If you keep it in your lap, on top of a hairy blanket, it'll be a lot effective at getting rid of the heat compared to if you have it sitting on a stone table, as just one example.
You can just ping your CPU usage to the menu bar and monitor that. I have CPU and total system wattage up there so I always know if something weird is going on.
Yeah! That's how I initially suspected that it was thermal throttling because I saw in iStat Menus that my wattage was going down for a constantly high CPU usage
Ah! Yeah I did notice that using `ProcessInfo.processInfo.thermalState`, the state didn't update unless I restarted the process (reproducible even with a swift script). But this issue doesn't happen with the technique I use right now (the thermald notification)
Why would you take an LED over something on the screen? The notification is only really relevant while the laptop is open, and the screen is going to be on anyways.
Another thing to keep in mind with MacBook Pro models or any other device that has fans... if you have cats, dogs or other heavily shedding animals, you must regularly (for me, once a year, for people with German Shedders more like once a quarter) open them up and thoroughly clean them.
The amount of fur that manages to squeeze everywhere is insane.
Husky/Pyr owner here - I have to systematically blow out all of my electronics because she molts enough fur to start my own Etsy brand of stuffed animals.
The WORST thing, though, is that all her fur makes its way into all my musical instruments, including underneath each individual key of my upright piano (now effectively a felt piano).
I adjusted it to ramp the fans up at more conservative values because otherwise during intense usage periods it would hit 90C+.
https://github.com/crystalidea/macs-fan-control
Quit some apps probably. I often have a bunch of stuff running in the background that I haven't bothered to close yet. It also sounds like it'd be good for detecting software that's gotten stuck in a busy loop or similar.
And/or possibly take a tea break while it chills out.
On Macbooks with fans, I started tuning my fan curve with iStat Menus (https://bjango.com/help/istatmenus7/fans/#custom-fan-curve) because I noticed the default curve was lagging behind and thermal throttling kicked in before the fan even reach max speed.
For Apple Silicon specifically, I recently discovered that there is a "high power mode" (https://support.apple.com/en-us/101613) that allows the fans to run at higher speed. So I don't use the custom fan curves anymore, it helped me a lot (but it does get quite noisy on a 14" M4 Max)
For a Macbook Air, not much you can do besides closing stuff, or elevating the macbook and pointing a fan at it or things like that... but yeah it's a bit desperate!
Environment: I am currently playing with a pid control function for my gpu fan, that is instead of saying "map temp x to fanspeed y"(fan curve) say "set fan to speed needed for temp z"(pid control)
Question: is there a reason pid type control is never a thermal option? Or put another way, is there something about the desired thermal characteristics of a computer that make pid control undesirable?
As a final thought, I have halfway convinced myself that in a predictable thermal system a map would match a set of pid parameters anyway.
Why though? I generally don't care about the specific temperatures of my CPU and GPU, just that they don't get too warm, so for the CPU (AIO) I basically have "0% up until 45C, then increment up to 100% when it hits 90C" and the same for the GPU except it's always at 10%.
I guess I could figure out target temperatures, and do it the other way, but I'm not sure what the added complexity is for? The end results (I need at least) remains the same, cool down the hardware when it gets hotter, and for me, the simpler the better.
I also have two ambient temperature sensors in the chassi itself, right at the intake and the outtake. The intake one is just for monitoring if my room gets too warm so the computer won't be effective at cooling (as the summers here get really warm) and the outtake one is to check overall temperature and control the intake fans. In reality, I don't think I need to do even this, just the CPU+GPU temperature + set fan speed based on that feels simple enough to solve 99% of the things you'd like to be able to do here.
I sometimes face thermal throttling because a process has gone wacko, and all I have to do is kill it. But first I have to notice it.
I rarely notice until half my battery is gone!
Depends on the environment, back when I had a MacBook, they still had fans, but the new ones are all passive, I think. So then the surface (or lack of it) below it would matter the most. If you keep it in your lap, on top of a hairy blanket, it'll be a lot effective at getting rid of the heat compared to if you have it sitting on a stone table, as just one example.
Remember to put your coat and hat on!
https://github.com/exelban/stats
The amount of fur that manages to squeeze everywhere is insane.
The WORST thing, though, is that all her fur makes its way into all my musical instruments, including underneath each individual key of my upright piano (now effectively a felt piano).