I recently dusted off my WRT54GL and loaded up the latest Tomato USB firmware on it (2.6).
I have u-verse, which forces the 2wire gateway-router device. Unfortunately it isn't very customizable in terms of settings for QoS or other performance options.
Running a speedtest.net test, while pinging google.com, I measured hundreds of milliseconds ping spikes. I also measured many dropped pings.
So I gave the Tomato router my public IP (dmzplus mode on the 2wire gateway) and connected it behind the gateway.
With QoS settings (leaving 10% of my down and up bandwidth for reserve), I am now measuring ping spikes of only 20-30ms at worse, and no dropped pings.
I also noticed, if you log into the TomatoUSB ssh, and run ifconfig, it shows a txqueuelen of 1000 for both the eth1 and eth0 interface.
IMHO, 1000 is too much. That's 1000 packets * 1500 bytes. (or is that 1000 packets?)
If I remember correctly, the 2.4 kernel set the txqueuelen to 100.
So anyways, I set the txqueuelen to 10, and so far web browsing is much better, and pings aren't affected badly.
It would be nice to have a txqueuelen setting somewhere in the GUI.
Also, I don't have access to ethtool, which should allow us to set the ring-buffer on the network interfaces themselves (further eliminating bufferbloat).