How to make wireless transfers faster on a Linksys WRT54G running DD-WRT

home-networkingspeedwireless-networkingwireless-router

I have a Linksys WRT54G plugged into the cable modem, and a 2nd wireless router, an old D-Link plugged into that. Both wireless routers work, but if I connect wirelessly to the Linksys router I get transfers going about 10 times slower than if I connect wirelessly to the D-Link even when accessing computers that are plugged directly into the Linksys router.

I've tried using just the D-Link and removing the Linksys, but it seems to hang regularly when it's running a DHCP server. When I have both routers on, the D-Link passes all DHCP requests to the Linksys.

If I disconnect and reconnect, the Linksys runs at full speed for a while, but quickly drops back down to slow speeds.

What might be causing this, and how can I go about fixing it?

@Spiff: I ran IPerf between my laptop ('chris') which is connecting wirelessly to the Linksys, and 'server' which is wired to the Linksys. This is with the D-Link router turned off. I get very different results depending on which is the client and which is the server:

server$ iperf -c chris
------------------------------------------------------------
Client connecting to chris, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.194 port 53856 connected with 192.168.0.172 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-11.0 sec  1.88 MBytes  1.43 Mbits/sec

chris$ iperf -c server
------------------------------------------------------------
Client connecting to server, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.172 port 55601 connected with 192.168.0.194 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.1 sec  9.12 MBytes  7.60 Mbits/sec

I see speeds of about 100KBytes/sec when downloading from 'server' onto the laptop with a wireless connection to the Linksys, which is what IPerf is saying I should see too. With the D-Link I expect I'll see something around 8 Mbits/sec in both directions. I'll edit this question with IPerf output from the D-Link when I have access to it.

Here's something odd. Last night I was getting slow downloads over the Linksys wireless interface so tried switching the wireless channel setting from 1 to 8. This caused IPerf output to go back to reasonable. Here's the before and after:

[  5] local 192.168.0.172 port 5001 connected with 192.168.0.194 port 34362
[  5]  0.0-15.9 sec  1.00 MBytes   527 Kbits/sec [using channel 1]
[  4] local 192.168.0.172 port 5001 connected with 192.168.0.194 port 34363
[  4]  0.0-10.4 sec  21.6 MBytes  17.4 Mbits/sec [using channel 8]

But this morning I noticed downloads were slow again. I switched the wireless channel back from 8 to 1, and again got a speedup:

[  5] local 192.168.0.172 port 5001 connected with 192.168.0.194 port 34441
[  5]  0.0-17.9 sec  1.88 MBytes   880 Kbits/sec [using channel 8]
[  4] local 192.168.0.172 port 5001 connected with 192.168.0.194 port 34442
[  4]  0.0-10.4 sec  26.4 MBytes  21.2 Mbits/sec [using channel 1]

There's no other wireless device around. And it seems that it doesn't matter which channel I switch to, just so long as I switch.

Update: I just noticed that I don't have to change the channel to temporarily 'fix' the problem. Earlier I used the router's web interface to switch from channel 1 to channel 8, which let me download quickly for 5 minutes or so, and left the browser at http://router/apply.cgi. Later, when the downloads were going very slowly again, I just hit 'refresh' on that page. The browser asked me:

The page that you're looking for used information that you entered.
Returning to that page might cause any action that you took to be
repeated. Do you want to continue?

I continued, and the downloads immediately started going ten times faster. I expect the router is still using channel 8, as it was before, so I don't even need to change the channel to get it to speed up for a while.

Best Answer

First make sure that the Linksys AP and the D-Link AP are on separate, non-overlapping channels. When using typical 20MHz channel widths, channels 1, 6, and 11 don't overlap with each other. Manually set one AP to, say, channel 1, and the other to channel 11 (don't let them auto-pick or they may choose poorly on the next reboot).

If it's true that you had a D-Link DI-624, note that it did a nonstandard/proprietary 108mbps mode which probably used two contiguous channels' worth of bandwidth (i.e. 40MHz instead of the usual channel width of 20MHz). I don't know if it centered that 40MHz channel on the center frequency of the channel it was on, or if it used the next channel up, or the next channel down. But if you're not using any other D-Link 108 mbps gear from the same era, just turn off the proprietary 108 mbps mode of the D-Link (make it be a plain B/G 54mbps device) so that it only uses one 20MHz channel.

Make sure the two APs are not physically too close to each other. Even if they are on non-overlapping channels, if they are too close to each other, the transmissions from one can overload the notch filter on the other, desensitizing the other's receiver. (Think about how hard it is to hear people across the room while someone is shouting directly into your ear.) I recommend you keep APs at least 1 meter apart, although 2-3 meters might be even better.

After making the changes above, run a clean performance test using a tool such as IPerf, between a wireless client and a machine wired into the LAN port of the AP. Then repeat on the other AP. If you're still seeing problems, update your Question with the IPerf output from each case. (NB: Don't use some random file copy protocol on your local network, because those are often inefficient and muddle the measurement. Similarly, don't muddle the measurement by bringing your broadband connection into this, so don't use speedtest.net and don't time some download from the Internet.)

Seeing those well-quantified performance numbers would be a big help here. Note that under real-world conditions, 15 mbps is a respectable speed for TCP traffic over 802.11g, and most people never see above 25 mbps even under ideal conditions. See also: What's the maximum actual bit rate of an 802.11g connection?

Another thought that occurred to me as I was writing this is that if you had the Linksys and the D-Link in the same location because you preferred the Linksys's home gateway functions and the D-Link's wireless functions, why not just turn off the wireless interface of the Linksys? Let the Linksys just be your home gateway (NAT router, DHCP Server), and let the D-Link be just a simple bridging Wi-Fi AP.

Update: Okay, so rebooting the Linksys makes it work better, and you get respectable real-world 17-21 mbps IPerf TCP throughput for a few minutes, then it degrades again. That makes me suspect a memory leak or other resource problem in DD-WRT. Try going to the latest actual Linksys firmware for that revision of the WRT54G, and see if it does better. If it does, then try out the latest "stable" release of DD-WRT (if you weren't already up to date on a stable release line) with simple settings. Or maybe OpenWrt or Tomato or whatever else you want to try.

Related Question