]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/commit
Merge r241037 from head:
authorglebius <glebius@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Fri, 23 Nov 2012 11:19:43 +0000 (11:19 +0000)
committerglebius <glebius@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Fri, 23 Nov 2012 11:19:43 +0000 (11:19 +0000)
commitace970dfe13957557f78205a846ba96330d0af34
tree337d888b4d8d7dba05d2f1e0ffccb2219d2e2407
parente5fea8577375db2a01ee3c4a32d2f2dc2921cab2
Merge r241037 from head:
  The drbr(9) API appeared to be so unclear, that most drivers in
  tree used it incorrectly, which lead to inaccurate overrated
  if_obytes accounting. The drbr(9) used to update ifnet stats on
  drbr_enqueue(), which is not accurate since enqueuing doesn't
  imply successful processing by driver. Dequeuing neither mean
  that. Most drivers also called drbr_stats_update() which did
  accounting again, leading to doubled if_obytes statistics. And
  in case of severe transmitting, when a packet could be several
  times enqueued and dequeued it could have been accounted several
  times.

  o Thus, make drbr(9) API thinner. Now drbr(9) merely chooses between
    ALTQ queueing or buf_ring(9) queueing.
    - It doesn't touch the buf_ring stats any more.
    - It doesn't touch ifnet stats anymore.
    - drbr_stats_update() no longer exists.

  o buf_ring(9) handles its stats itself:
    - It handles br_drops itself.
    - br_prod_bytes stats are dropped. Rationale: no one ever
      reads them but update of a common counter on every packet
      negatively affects performance due to excessive cache
      invalidation.
    - buf_ring_enqueue_bytes() reduced to buf_ring_enqueue(), since
      we no longer account bytes.

  o Drivers handle their stats theirselves: if_obytes, if_omcasts.

  o mlx4(4), igb(4), em(4), vxge(4), oce(4) and  ixv(4) no longer
    use drbr_stats_update(), and update ifnet stats theirselves.

  o bxe(4) was the most correct driver, it didn't call
    drbr_stats_update(), thus it was the only driver accurate under
    moderate load. Now it also maintains stats itself.

  o ixgbe(4) had already taken stats from hardware, so just
    - drop software stats updating.
    - take multicast packet count from hardware as well.

  o mxge(4) just no longer needs NO_SLOW_STATS define.

  o cxgb(4), cxgbe(4) need no change, since they obtain stats
    from hardware.

  Reviewed by:  jfv, gnn

git-svn-id: svn://svn.freebsd.org/base/stable/9@243440 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/dev/bxe/if_bxe.c
sys/dev/e1000/if_em.c
sys/dev/e1000/if_igb.c
sys/dev/ixgbe/ixgbe.c
sys/dev/ixgbe/ixv.c
sys/dev/mxge/if_mxge.c
sys/dev/oce/oce_if.c
sys/dev/vxge/vxge.c
sys/net/if_var.h
sys/ofed/drivers/net/mlx4/en_tx.c
sys/sys/buf_ring.h