Fixing macOS Wi-Fi lag and ping spikes: the AWDL problem
If you game on a Mac, use a cloud gaming service like GeForce Now, Xbox Cloud Gaming, PlayStation Plus, Amazon Luna, or Boosteroid, or stream from your own PC with Moonlight, Parsec, or Steam Link, you may have seen this: the connection is fine on average, but every few seconds the latency jumps. A clean ping with an ugly spike on a regular beat. It wrecks fast games and makes streams hitch even though your bandwidth is plenty.
For a long time I blamed the router. The actual culprit is usually a macOS interface called awdl0.
What AWDL is
AWDL stands for Apple Wireless Direct Link. It is the peer to peer layer behind AirDrop, AirPlay, Handoff, Sidecar, Continuity Camera, and the rest of Apple's Continuity features. The catch is that on most Macs it shares the same Wi-Fi radio as your normal connection. To service AWDL, the radio briefly hops to another channel, then hops back. That round trip is your latency spike.
In practice the radio gets locked for roughly 50 to 100 milliseconds about once a second while macOS scans for nearby Apple devices over Bonjour. You are not losing packets to a bad signal. You are losing them because the radio stepped away for a moment to go look for an iPhone.
Which apps and services this hits
Anything real time over Wi-Fi feels it, but it is most obvious where a steady stream of input and video has to round trip to a server and back:
- Cloud gaming: GeForce Now, Xbox Cloud Gaming (Game Pass Ultimate), PlayStation Plus Premium, Amazon Luna, Boosteroid, and Shadow.
- Local game streaming: Moonlight, Parsec, Steam Link and Steam Remote Play, and the streaming side of Sunshine on the host.
- Real time calls and remote desktops: the same jitter shows up in video calls and low latency remote sessions, it is just easier to tolerate there.
If your average ping is low but your jitter is high, that pattern is the signature, and it does not matter which service you are on.
How to confirm it
Run a tight ping and watch for spikes on a steady interval:
ping -i 0.2 1.1.1.1
If you see the time climb from a few milliseconds into the tens or hundreds every second or so while the average stays low, AWDL is a strong suspect. That variation is the jitter that cloud gaming services warn you about, and it is what makes inputs feel mushy even when the headline ping looks fine.
The quick fix
Bring the interface down:
sudo ifconfig awdl0 down
Re-run the ping. In most cases the spikes flatten out immediately.
The catch: it is not permanent. macOS will bring awdl0 back up after sleep and wake, when you toggle Wi-Fi, or the moment something actually needs AirDrop or Handoff. On Ventura and later, any app that requests an AWDL connection re-enables the interface on its own, so the one liner is less sticky than it used to be. Treat it as a "do it right before a session" move, not a permanent setting.
Keeping it down for a whole session
Because macOS keeps reviving the interface, the practical trick is a small watchdog that holds it down while you play and cleanly restores it when you quit with Ctrl+C:
#!/bin/bash
trap 'sudo ifconfig awdl0 up; echo "awdl0 restored"; exit' INT
while true; do
sudo ifconfig awdl0 down
if ifconfig awdl0 | grep -q "status: inactive"; then
echo "awdl0 disabled"
else
echo "awdl0 still active"
fi
sleep 5
done
Save it as gaming-mode.sh, run chmod +x gaming-mode.sh, then sudo ./gaming-mode.sh before you launch the game. It re-disables awdl0 every five seconds, so even if macOS flips it back on, the gap is short. Press Ctrl+C when you are done and it puts everything back, so AirDrop and Handoff keep working the rest of the day. This is the closest thing to "set and forget" without installing a background daemon you then have to remember to remove.
Or let an app hold it down for you
I ran that watchdog script for a while before I got tired of starting it by hand, so I built the behaviour into Keepresso, a menu-bar app I made for keeping a Mac awake on my own terms. Its Gaming and Streaming mode does the same job as the script, it pauses awdl0 while you play and restores it cleanly afterwards, except it can trip on its own the moment a game or a cloud client like GeForce Now, Parsec, or Moonlight starts, and stand down when you quit. It runs a quick jitter test so you can check the link before a match, and the same smart-trigger engine keeps the machine awake for the whole session so it does not sleep out from under you mid game. That is the honest "set and forget" the one line command cannot give you, with no background daemon to remember to remove. There is more on it in the launch write-up.
NVIDIA says the same thing
This is not folklore. NVIDIA's own support docs for GeForce Now on macOS point at the same background networking features (AirDrop, Handoff, and nearby device services) and recommend turning them off while you play. Their Wi-Fi advice is worth copying regardless of which service you use:
- Use the 5 GHz band, not 2.4 GHz.
- Pick a clean channel: 44 in the EU, 149 in the US, at 80 MHz width, and make sure no neighbouring network is sitting on top of it.
- Turn off Location Services while streaming. On macOS it drives periodic Wi-Fi scans of its own, which add to the jitter.
Reducing how often it comes back
If you want fewer interruptions without keeping an eye on that command:
- Turn AirDrop receiving off when you do not need it (Finder, AirDrop, "No One"), and turn off Handoff under System Settings, General, AirDrop & Handoff. Fewer triggers means AWDL wakes up less.
- Disable Location Services, or at least quit apps that keep requesting your location, for the reason above.
- Turn Bluetooth off while you play. On a Mac the Wi-Fi and Bluetooth radios sit on the same chip and both lean on the crowded 2.4 GHz band, so a busy Bluetooth link (a controller, AirPods, a mouse) adds its own micro stutters on top of AWDL. A wired controller and wired headphones remove that variable entirely.
- Tune the router itself. In your router admin page, split the 2.4 GHz and 5 GHz bands into separate network names so your Mac stays locked to 5 GHz, set a fixed clean channel (44 in the EU, 149 in the US) at 80 MHz instead of "auto", and turn off band steering and any "smart connect" feature that quietly bounces you back to 2.4 GHz mid game.
- Wired Ethernet sidesteps the whole problem, since the spike comes from sharing the Wi-Fi radio. A cheap USB-C to Ethernet adapter is the most reliable fix I know of, and it usually halves your jitter on its own.
There is a more surgical school of thought that tries to pin your Wi-Fi to the same channel AWDL hops to, so the round trip costs nothing, rather than disabling AWDL at all. It is clever, but it is fiddly and it breaks the moment AWDL picks a different channel, so I have never trusted it for an actual session.
I would also avoid hacks that try to force awdl0 down permanently with a background daemon. The system fights you on it, especially on recent macOS, and you can quietly break AirDrop and Continuity in the process. For me the honest answer is: cable when it matters, and the one line command when it does not.


