git: if: Multiple TX queue support step 1 of many; introduce ifaltq subqueue

Sepherosa Ziehau sephe at crater.dragonflybsd.org
Sat Jan 12 19:58:28 PST 2013


commit f0a26983b6dd6b7880fa53aa7314918e56415aba
Author: Sepherosa Ziehau <sephe at dragonflybsd.org>
Date:   Fri Jan 11 13:31:30 2013 +0800

    if: Multiple TX queue support step 1 of many; introduce ifaltq subqueue
    
    Put the plain queue information, e.g. queue header and tail, serializer,
    packet staging scoreboard and ifnet.if_start schedule netmsg etc. into
    its own structure (subqueue).  ifaltq structure could have multiple of
    subqueues based on the count that drivers can specify.
    
    Subqueue's enqueue, dequeue, purging and states updating are protected
    by the subqueue's serializer, so for hardwares supporting multiple TX
    queues, contention on queuing operation could be greatly reduced.
    
    The subqueue is passed to if_start to let the driver know which hardware
    TX queue to work on.  Only the related driver's TX queue serializer will
    be held, so for hardwares supporting multiple TX queues, contention on
    driver's TX queue serializer could be greatly reduced.
    
    Bunch of ifsq_ prefixed functions are added, which is used to perform
    various operations on subqueues.  Commonly used ifq_ prefixed functions
    are still kept mainly for the drivers which do not support multiple TX
    queues (well, these functions also ease the netif/ convertion in this
    step :).
    
    All of the pseudo network devices under sys/net are converted to use the
    new subqueue operation.  netproto/802_11 is converted too.  igb(4) is
    converted to use the new subqueue operation, the rest of the network
    drivers are only changed for the if_start interface modification.
    
    For ALTQs which have packet scheduler enabled, only the first subqueue
    is used (*).
    
    (*) Whether we should utilize multiple TX queues if ALTQ's packet scheduler
    is enabled is quite questionable.  Mainly because hardware's multiple TX
    queue packet dequeue mechanism could have negative impact on ALTQ's packet
    scheduler's decision.

Summary of changes:
 sys/bus/u4b/net/if_usie.c                   |   6 +-
 sys/bus/u4b/net/uhso.c                      |   6 +-
 sys/bus/u4b/net/usb_ethernet.c              |   8 +-
 sys/bus/u4b/net/usb_ethernet.h              |   2 +-
 sys/dev/atm/en/midway.c                     |   4 +-
 sys/dev/netif/acx/if_acx.c                  |   5 +-
 sys/dev/netif/ae/if_ae.c                    |   5 +-
 sys/dev/netif/age/if_age.c                  |   5 +-
 sys/dev/netif/alc/if_alc.c                  |   5 +-
 sys/dev/netif/ale/if_ale.c                  |   5 +-
 sys/dev/netif/an/if_an.c                    |   6 +-
 sys/dev/netif/ar/if_ar.c                    |  11 +-
 sys/dev/netif/ath/ath/if_ath.c              |  16 +-
 sys/dev/netif/aue/if_aue.c                  |   5 +-
 sys/dev/netif/axe/if_axe.c                  |   6 +-
 sys/dev/netif/bce/if_bce.c                  |   5 +-
 sys/dev/netif/bfe/if_bfe.c                  |   5 +-
 sys/dev/netif/bge/if_bge.c                  |   6 +-
 sys/dev/netif/bnx/if_bnx.c                  |   6 +-
 sys/dev/netif/bwi/if_bwi.c                  |   5 +-
 sys/dev/netif/cs/if_cs.c                    |   6 +-
 sys/dev/netif/cue/if_cue.c                  |   6 +-
 sys/dev/netif/dc/if_dc.c                    |   5 +-
 sys/dev/netif/de/if_de.c                    |   5 +-
 sys/dev/netif/ed/if_ed.c                    |   6 +-
 sys/dev/netif/em/if_em.c                    |   5 +-
 sys/dev/netif/emx/if_emx.c                  |   5 +-
 sys/dev/netif/ep/if_ep.c                    |   6 +-
 sys/dev/netif/et/if_et.c                    |   5 +-
 sys/dev/netif/ex/if_ex.c                    |   5 +-
 sys/dev/netif/fe/if_fe.c                    |   7 +-
 sys/dev/netif/fwe/if_fwe.c                  |   5 +-
 sys/dev/netif/fxp/if_fxp.c                  |   5 +-
 sys/dev/netif/igb/if_igb.c                  |  91 ++++---
 sys/dev/netif/igb/if_igb.h                  |   1 +
 sys/dev/netif/iwi/if_iwi.c                  |   5 +-
 sys/dev/netif/iwl/iwl2100.c                 |   5 +-
 sys/dev/netif/iwn/if_iwn.c                  |   5 +-
 sys/dev/netif/ixgbe/ixgbe.c                 |   6 +-
 sys/dev/netif/jme/if_jme.c                  |   5 +-
 sys/dev/netif/kue/if_kue.c                  |   6 +-
 sys/dev/netif/lge/if_lge.c                  |   6 +-
 sys/dev/netif/lgue/if_lgue.c                |   6 +-
 sys/dev/netif/lnc/lance.c                   |   5 +-
 sys/dev/netif/msk/if_msk.c                  |   5 +-
 sys/dev/netif/mxge/if_mxge.c                |   3 +-
 sys/dev/netif/my/if_my.c                    |   5 +-
 sys/dev/netif/ndis/if_ndis.c                |   8 +-
 sys/dev/netif/nfe/if_nfe.c                  |   5 +-
 sys/dev/netif/nge/if_nge.c                  |   6 +-
 sys/dev/netif/pcn/if_pcn.c                  |   6 +-
 sys/dev/netif/ral/rt2560.c                  |   5 +-
 sys/dev/netif/ral/rt2661.c                  |   5 +-
 sys/dev/netif/re/if_re.c                    |   5 +-
 sys/dev/netif/rl/if_rl.c                    |   6 +-
 sys/dev/netif/rtw/rtw.c                     |  15 +-
 sys/dev/netif/rue/if_rue.c                  |   6 +-
 sys/dev/netif/rum/if_rum.c                  |   5 +-
 sys/dev/netif/sbni/if_sbni.c                |   6 +-
 sys/dev/netif/sbsh/if_sbsh.c                |   6 +-
 sys/dev/netif/sf/if_sf.c                    |   6 +-
 sys/dev/netif/sis/if_sis.c                  |   6 +-
 sys/dev/netif/sk/if_sk.c                    |   5 +-
 sys/dev/netif/sln/if_sln.c                  |   5 +-
 sys/dev/netif/sn/if_sn.c                    |   6 +-
 sys/dev/netif/sr/if_sr.c                    |  12 +-
 sys/dev/netif/ste/if_ste.c                  |   6 +-
 sys/dev/netif/stge/if_stge.c                |   5 +-
 sys/dev/netif/ti/if_ti.c                    |   6 +-
 sys/dev/netif/tl/if_tl.c                    |   6 +-
 sys/dev/netif/tx/if_tx.c                    |   6 +-
 sys/dev/netif/txp/if_txp.c                  |   6 +-
 sys/dev/netif/ural/if_ural.c                |   5 +-
 sys/dev/netif/vge/if_vge.c                  |   5 +-
 sys/dev/netif/vr/if_vr.c                    |   6 +-
 sys/dev/netif/vx/if_vx.c                    |   6 +-
 sys/dev/netif/wb/if_wb.c                    |   6 +-
 sys/dev/netif/wi/if_wi.c                    |   5 +-
 sys/dev/netif/wi/if_wi_pci.c                |   2 +-
 sys/dev/netif/wpi/if_wpi.c                  |   7 +-
 sys/dev/netif/xe/if_xe.c                    |   6 +-
 sys/dev/netif/xl/if_xl.c                    |  15 +-
 sys/dev/virtual/vkernel/net/if_vke.c        |  15 +-
 sys/net/altq/altq_cbq.c                     |  88 +++++--
 sys/net/altq/altq_fairq.c                   |  75 ++++--
 sys/net/altq/altq_hfsc.c                    |  73 +++--
 sys/net/altq/altq_priq.c                    |  74 ++++--
 sys/net/altq/altq_rmclass.c                 |   5 +-
 sys/net/altq/altq_subr.c                    |  64 +++--
 sys/net/altq/if_altq.h                      | 109 +++++---
 sys/net/bridge/if_bridge.c                  |  11 +-
 sys/net/ef/if_ef.c                          |  18 +-
 sys/net/if.c                                | 396 ++++++++++++++++------------
 sys/net/if_loop.c                           |  11 +-
 sys/net/if_mib.c                            |   7 +-
 sys/net/if_var.h                            |   6 +-
 sys/net/ifq_var.h                           | 335 ++++++++++++++++-------
 sys/net/pf/if_pflog.c                       |   7 +-
 sys/net/pf/if_pfsync.c                      |   7 +-
 sys/net/ppp/if_ppp.c                        |  18 +-
 sys/net/sl/if_sl.c                          |   6 +-
 sys/net/sppp/if_spppsubr.c                  |  36 ++-
 sys/net/tap/if_tap.c                        |  23 +-
 sys/net/tun/if_tun.c                        |  18 +-
 sys/net/vlan/if_vlan.c                      |  15 +-
 sys/netgraph/eiface/ng_eiface.c             |   4 +-
 sys/netgraph/fec/ng_fec.c                   |   4 +-
 sys/netgraph/iface/ng_iface.c               |   4 +-
 sys/netgraph7/dragonfly.h                   |   4 +-
 sys/netgraph7/iface/ng_iface.c              |   4 +-
 sys/netgraph7/ng_eiface.c                   |   4 +-
 sys/netgraph7/ng_fec.c                      |   4 +-
 sys/netgraph7/ng_sppp.c                     |   4 +-
 sys/netinet/ip_carp.c                       |   4 +-
 sys/netproto/802_11/ieee80211_proto.h       |   2 +-
 sys/netproto/802_11/wlan/ieee80211_hostap.c |   7 +-
 sys/netproto/802_11/wlan/ieee80211_output.c |  16 +-
 sys/netproto/802_11/wlan/ieee80211_power.c  |  35 ++-
 sys/netproto/802_11/wlan/ieee80211_proto.c  |   7 +-
 sys/netproto/ipx/ipx_ip.c                   |   4 +-
 usr.bin/netstat/if.c                        |   8 +-
 121 files changed, 1347 insertions(+), 754 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/f0a26983b6dd6b7880fa53aa7314918e56415aba


-- 
DragonFly BSD source repository



More information about the Commits mailing list