1
0
Fork 0
alistair23-linux/net/atm
David Woodhouse 9d02daf754 pppoatm: Fix excessive queue bloat
We discovered that PPPoATM has an excessively deep transmit queue. A
queue the size of the default socket send buffer (wmem_default) is
maintained between the PPP generic core and the ATM device.

Fix it to queue a maximum of *two* packets. The one the ATM device is
currently working on, and one more for the ATM driver to process
immediately in its TX done interrupt handler. The PPP core is designed
to feed packets to the channel with minimal latency, so that really
ought to be enough to keep the ATM device busy.

While we're at it, fix the fact that we were triggering the wakeup
tasklet on *every* pppoatm_pop() call. The comment saying "this is
inefficient, but doing it right is too hard" turns out to be overly
pessimistic... I think :)

On machines like the Traverse Geos, with a slow Geode CPU and two
high-speed ADSL2+ interfaces, there were reports of extremely high CPU
usage which could partly be attributed to the extra wakeups.

(The wakeup handling could actually be made a whole lot easier if we
 stop checking sk->sk_sndbuf altogether. Given that we now only queue
 *two* packets ever, one wonders what the point is. As it is, you could
 already deadlock the thing by setting the sk_sndbuf to a value lower
 than the MTU of the device, and it'd just block for ever.)

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2012-04-13 13:03:45 -04:00
..
Kconfig [ATM]: atm is no longer experimental 2008-01-28 15:00:11 -08:00
Makefile [ATM]: Kill ipcommon.[ch] 2006-12-02 21:32:08 -08:00
addr.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
addr.h atm: use const where reasonable 2008-06-17 16:20:06 -07:00
atm_misc.c atm: eliminate atm_guess_pdu2truesize() 2011-11-26 16:40:30 -05:00
atm_sysfs.c atm: expose ATM device index in sysfs 2011-05-27 13:07:21 -04:00
br2684.c atm: br2684: Avoid alignment issues 2011-11-29 00:28:06 -05:00
clip.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
common.c atm: Allow MSG_PEEK for atm sockets 2011-11-22 16:15:49 -05:00
common.h atm: Introduce vcc_process_recv_queue 2011-11-22 16:15:42 -05:00
ioctl.c net/atm/ioctl.c: checkpatch cleanups 2010-01-26 21:15:59 -08:00
lec.c net: remove use of ndo_set_multicast_list in drivers 2011-08-17 20:22:03 -07:00
lec.h Fix common misspellings 2011-03-31 11:26:23 -03:00
lec_arpc.h [ATM]: [lec] add reference counting to lec_arp entries 2006-09-29 17:16:48 -07:00
mpc.c net: Remove casts of void * 2011-06-16 23:19:27 -04:00
mpc.h atm: convert mpc device to using netdev_ops 2009-03-21 19:19:12 -07:00
mpoa_caches.c net: Remove unnecessary returns from void function()s 2010-05-17 23:23:14 -07:00
mpoa_caches.h [NET] ATM: Fix whitespace errors. 2007-02-10 23:19:16 -08:00
mpoa_proc.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pppoatm.c pppoatm: Fix excessive queue bloat 2012-04-13 13:03:45 -04:00
proc.c atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
protocols.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pvc.c net: Add export.h for EXPORT_SYMBOL/THIS_MODULE to non-modules 2011-10-31 19:30:30 -04:00
raw.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
resources.c atm: correct sysfs 'device' link creation and parent relationships 2010-12-10 15:45:05 -08:00
resources.h atm: correct sysfs 'device' link creation and parent relationships 2010-12-10 15:45:05 -08:00
signaling.c net: sk_sleep() helper 2010-04-20 16:37:13 -07:00
signaling.h [NET] ATM: Fix whitespace errors. 2007-02-10 23:19:16 -08:00
svc.c net: Add export.h for EXPORT_SYMBOL/THIS_MODULE to non-modules 2011-10-31 19:30:30 -04:00