macOS Yosemite and above utilize AWDL (Apple Wireless Direct Link) to handle data transfers to other AWDL-enabled devices (Macs, Macbooks, iPhones, etc.) over the Wifi Radio, without the need for a common underlying Access Point.
However, whenever AWDL is active (Bonjour discovery and any Airdrop, Airplay, and GameKit links and transfers), it will lock the Wifi radio for small intervals. For Bonjour discovery specifically, this comes to an effective packet spooling time of about 50-100ms, once per second (active transfers will be higher).
Obviously, this will create unacceptable latency spikes for low-latency desktop streaming apps. To disable the AWDL interface, use the following command in Applications > Utilities > Terminal (this requires you to be logged in as an Administrator and enter your password):
sudo ifconfig awdl0 down
sudo - run as root
ifconfig - configure network interface parameters
awdl0 - the virtual interface device used for AWDL
down - disable the interface
Note that this will prevent all users on the system from using Airplay, Airdrop, GameKit, etc. To reverse, use sudo ifconfig awdl0 up
.
macOS may reenable the interface upon a restart. If you want to keep it off automatically, you can write an Automator application to execute that command, then put it into your Login Items (though it will ask for your password every time). To execute it as root automatically, you may have to write a launchd
daemon property XML.
Additional reading:
https://arxiv.org/abs/1808.03156
man 8 ifconfig
To a lesser extent, the Location Service Wifi scan will also lock the Wifi radio, albeit no more than around once every 5 minutes. To disable it as well:
Settings > Security & Privacy > Privacy > Location Services > Uncheck
Note that this turns off geolocation completely, including for Find My Mac.
Sample implementation for a single-liner which writes a
launchd
.plist that should execute the command on boot (requires Administrator to write):To load this into
launchd
:sudo launchctl load /Library/LaunchDaemons/script.awdl.autodisable.plist