Introduction
The racing fan bug is a well known issue that affects certain cMP systems with upgraded video cards, particularly systems with SMC version 1.39f5. On these systems the PCI, PS, and booster fans spin abnormally fast at idle, causing unnecessary noise. Although the issue appears to be related to PCI power draw and the SMC, the exact cause remains unknown. With many users upgrading their video cards for Metal support, the fan bug is undoubtedly claiming more and more victims.
A popular solution to this bug is to use fan control software. The advantage of this approach is that profiles can be created that not only calm the fans down but also keep systems with high-power components running cool. A popular option is Macs Fan Control.
Another solution is to restore the native fan control by stressing the GPU. This approach causes the fans to rev up for a few seconds and then calm down, returning to stock speeds. The fans stay calm through sleep cycles and reboots. Because it restores the native fan control and is quickly out of the way, some users prefer this approach. However, this approach lacks the automation of the first. Users must find appropriate software (a benchmarking app or a game) and run it for some time.
Proposed Solution
AirOut is a small Metal app compatible with macOS Mojave and later that stresses the GPU seamlessly in the background if it detects high fan speeds at login. The app immediately quits after issuing the stress test. It also offers a basic FP32 compute benchmark mode when launched manually.
The app uses notifications. The alert style can be set in System Preferences > Notifications.
To have the app start automatically at login go to System Preferences > Users & Groups > Login Items. There, add the app to the list of items.
Usage
The newest version of AirOut offers three basic parameters that users can tune: StressLevel, DelayAtLogin, and HideAtLogin.
AirOut automatically determines a base level of stress based on video memory. A percentage, greater than zero and possibly greater than 100, of that base level can be set with the integer parameter StressLevel. By default, StressLevel is 100. To change this parameter to 50, for example, enter the following in terminal:
defaults write com.cdf.AirOut StressLevel 50 |
As a login item, AirOut runs immediately, without delay. A delay in seconds can be set with the integer parameter DelayAtLogin. By default, the delay is 0. To add a 60 second delay, for example, enter the following in terminal:
defaults write com.cdf.AirOut DelayAtLogin 60 |
For a minimal experience, another parameter, HideAtLogin, hides any notifications when AirOut starts as a login item, leaving the notifications only for the benchmark mode. Of course, how the notifications appear for the whole application can be set in System Preferences. By default, HideAtLogin is NO. To set it to YES, enter the following in terminal:
defaults write com.cdf.AirOut HideAtLogin -bool YES |
To reset all the parameters, simply enter this:
defaults delete com.cdf.AirOut |
Tuning
The racing fan bug depends on the system and the video card. Both affect the required StressLevel and DelayAtLogin for the fans to be reset successfully. In normal circumstances, the default values should be enough. However, some trial and error may be required to find the proper values.
A good approach would be to first run AirOut manually on an idle system by simply double clicking the icon. This runs a benchmark, which will stress test the video card and hopefully reset the fans. If the fans are not reset, StressLevel can be increased beyond 100. Be conservative. Start with 110, 120, 130, and so on, until the fans are reset. If the default value already resets the fans, it is also possible to decrease StressLevel. Try 90, 80, 70, and so on. You want to stress the card, but not more than necessary. Note that during the couple of seconds of stress testing, the system may become a bit sluggish.
On login, the loading of other applications can affect how AirOut sees the system. This is where DelayAtLogin is useful. If, after determining a proper StressLevel and adding AirOut to the list of login items, the fans are not reset after login, try setting DelayAtLogin.
As a login item, AirOut will only work on a 5,1 Mac Pro (including, of course, a 4,1>5,1). However, it is also possible to run AirOut manually as a minimal Metal benchmark on other macOS systems. For example, on a 2016 MacBook (which definitely does not suffer from racing fans because it is fanless) AirOut measures a FP32 performance of around 220 GFLOPS, compared to around 3400 for an 8 GB RX 580 on a 5,1 Mac Pro.
Historical information
Pervious versions of AirOut only worked for the 8 GB RX 580. Version 1.0.1 introduced the DelayAtLogin parameter. AirOut 2 (1.2.0) included all the parameters mentioned in this post, except that the app identifier was com.airoutteam.AirOut. The newest version, which this post describes, is AirOut 3.
Attachments
Last edited: