android_kernel_msm-6.1_noth.../net
Krishna Kumar bbd8a0d3a3 net: Avoid enqueuing skb for default qdiscs
dev_queue_xmit enqueue's a skb and calls qdisc_run which
dequeue's the skb and xmits it. In most cases, the skb that
is enqueue'd is the same one that is dequeue'd (unless the
queue gets stopped or multiple cpu's write to the same queue
and ends in a race with qdisc_run). For default qdiscs, we
can remove the redundant enqueue/dequeue and simply xmit the
skb since the default qdisc is work-conserving.

The patch uses a new flag - TCQ_F_CAN_BYPASS to identify the
default fast queue. The controversial part of the patch is
incrementing qlen when a skb is requeued - this is to avoid
checks like the second line below:

+  } else if ((q->flags & TCQ_F_CAN_BYPASS) && !qdisc_qlen(q) &&
>>         !q->gso_skb &&
+          !test_and_set_bit(__QDISC_STATE_RUNNING, &q->state)) {

Results of a 2 hour testing for multiple netperf sessions (1,
2, 4, 8, 12 sessions on a 4 cpu system-X). The BW numbers are
aggregate Mb/s across iterations tested with this version on
System-X boxes with Chelsio 10gbps cards:

----------------------------------
Size |  ORG BW          NEW BW   |
----------------------------------
128K |  156964          159381   |
256K |  158650          162042   |
----------------------------------

Changes from ver1:

1. Move sch_direct_xmit declaration from sch_generic.h to
   pkt_sched.h
2. Update qdisc basic statistics for direct xmit path.
3. Set qlen to zero in qdisc_reset.
4. Changed some function names to more meaningful ones.

Signed-off-by: Krishna Kumar <krkumar2@in.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2009-08-06 20:10:18 -07:00
..
9p
802
8021q net: mark read-only arrays as const 2009-08-05 10:42:58 -07:00
appletalk
atm net: mark read-only arrays as const 2009-08-05 10:42:58 -07:00
ax25
bluetooth net: mark read-only arrays as const 2009-08-05 10:42:58 -07:00
bridge net: mark read-only arrays as const 2009-08-05 10:42:58 -07:00
can
core net: Avoid enqueuing skb for default qdiscs 2009-08-06 20:10:18 -07:00
dcb
dccp net: mark read-only arrays as const 2009-08-05 10:42:58 -07:00
decnet
dsa
econet
ethernet
ieee802154
ipv4 net: mark read-only arrays as const 2009-08-05 10:42:58 -07:00
ipv6 net: mark read-only arrays as const 2009-08-05 10:42:58 -07:00
ipx
irda net: mark read-only arrays as const 2009-08-05 10:42:58 -07:00
iucv
key
lapb
llc net: mark read-only arrays as const 2009-08-05 10:42:58 -07:00
mac80211 mac80211: FIF_PSPOLL filter flag 2009-08-04 16:44:35 -04:00
netfilter net: mark read-only arrays as const 2009-08-05 10:42:58 -07:00
netlabel Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2009-07-30 19:22:43 -07:00
netlink
netrom
packet
phonet
rds net/rds: Use AF_INET for sin_family field 2009-08-05 20:30:13 -07:00
rfkill rfkill: add the GPS radio type 2009-08-04 16:44:23 -04:00
rose Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2009-07-30 19:22:43 -07:00
rxrpc net: mark read-only arrays as const 2009-08-05 10:42:58 -07:00
sched net: Avoid enqueuing skb for default qdiscs 2009-08-06 20:10:18 -07:00
sctp net: mark read-only arrays as const 2009-08-05 10:42:58 -07:00
sunrpc
tipc
unix
wanrouter
wimax
wireless cfg80211: clear SSID on disconnect/no connection 2009-08-04 16:44:26 -04:00
x25
xfrm
compat.c
Kconfig
Makefile
nonet.c
socket.c
sysctl_net.c
TUNABLE