netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH v2 00/17] latest qdisc patch series
@ 2017-05-02 15:36 John Fastabend
  2017-05-02 15:36 ` [RFC PATCH v2 01/17] net: sched: cleanup qdisc_run and __qdisc_run semantics John Fastabend
                   ` (17 more replies)
  0 siblings, 18 replies; 22+ messages in thread
From: John Fastabend @ 2017-05-02 15:36 UTC (permalink / raw)
  To: eric.dumazet; +Cc: netdev, john.fastabend

- v2 now hopefully with all patches and uncorrupted -

This is my latest series of patches to remove the locking requirement
from qdisc logic. 

I still have a couple issues to resolve main problem at the moment is
pfifo_fast qdisc without contention running under mq or mqprio is
actually slower by a few 100k pps with pktgen tests. I am trying to
sort out how to get the performance back now.

The main difference in these patches is to recognize that parking
packets on the gso slot and bad txq cases are really edge cases and
can be handled with locked queue operations. This simplifies the
patches and avoids racing with netif scheduler. If you hit these paths
it means either there is a driver overrun, should be very rare with
bql, or a TCP session has migrated cores with outstanding packets.

Patches 16, 17 were an attempt to resolve the performance degradation
in the uncontended case. The idea is to use the qdisc lock around the
dequeue operations so that we only need to take a single lock for the
entire bulk operation and can consume packets out of skb_array without
a spin_lock.

Another potential issue, I think, is if we have multiple packets
on the bad_txq we should bulk out of the bad_txq and not jump to
bulking out of the "normal" dequeue qdisc op.

I've mostly tested with pktgen at this point but have done some basic
netperf tests and both seem to be working.

I am not going to be able to work on this for a few days so I figured
it might be worth getting some feedback if there is any. Any thoughts
on how to squeeze a few extra pps out of this would be very useful. I
would like to avoid having a degradation in the micro-benchmark if
possible. Further, it should be possible best I can tell.

Thanks!
John

---

John Fastabend (17):
      net: sched: cleanup qdisc_run and __qdisc_run semantics
      net: sched: allow qdiscs to handle locking
      net: sched: remove remaining uses for qdisc_qlen in xmit path
      net: sched: provide per cpu qstat helpers
      net: sched: a dflt qdisc may be used with per cpu stats
      net: sched: explicit locking in gso_cpu fallback
      net: sched: drop qdisc_reset from dev_graft_qdisc
      net: sched: support skb_bad_tx with lockless qdisc
      net: sched: check for frozen queue before skb_bad_txq check
      net: sched: qdisc_qlen for per cpu logic
      net: sched: helper to sum qlen
      net: sched: add support for TCQ_F_NOLOCK subqueues to sch_mq
      net: sched: add support for TCQ_F_NOLOCK subqueues to sch_mqprio
      net: skb_array: expose peek API
      net: sched: pfifo_fast use skb_array
      net: skb_array additions for unlocked consumer
      net: sched: lock once per bulk dequeue


 include/linux/skb_array.h |   10 +
 include/net/gen_stats.h   |    3 
 include/net/pkt_sched.h   |   10 +
 include/net/sch_generic.h |   82 ++++++++-
 net/core/dev.c            |   31 +++
 net/core/gen_stats.c      |    9 +
 net/sched/sch_api.c       |    3 
 net/sched/sch_generic.c   |  400 +++++++++++++++++++++++++++++++++------------
 net/sched/sch_mq.c        |   25 ++-
 net/sched/sch_mqprio.c    |   61 ++++---
 10 files changed, 470 insertions(+), 164 deletions(-)

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2017-06-19  9:21 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-05-02 15:36 [RFC PATCH v2 00/17] latest qdisc patch series John Fastabend
2017-05-02 15:36 ` [RFC PATCH v2 01/17] net: sched: cleanup qdisc_run and __qdisc_run semantics John Fastabend
2017-05-02 15:36 ` [RFC PATCH v2 02/17] net: sched: allow qdiscs to handle locking John Fastabend
2017-05-02 15:37 ` [RFC PATCH v2 03/17] net: sched: remove remaining uses for qdisc_qlen in xmit path John Fastabend
2017-05-02 15:37 ` [RFC PATCH v2 04/17] net: sched: provide per cpu qstat helpers John Fastabend
2017-05-02 15:37 ` [RFC PATCH v2 05/17] net: sched: a dflt qdisc may be used with per cpu stats John Fastabend
2017-05-02 15:38 ` [RFC PATCH v2 06/17] net: sched: explicit locking in gso_cpu fallback John Fastabend
2017-05-02 15:38 ` [RFC PATCH v2 07/17] net: sched: drop qdisc_reset from dev_graft_qdisc John Fastabend
2017-05-02 20:00   ` Jesper Dangaard Brouer
2017-05-02 15:38 ` [RFC PATCH v2 08/17] net: sched: support skb_bad_tx with lockless qdisc John Fastabend
2017-05-02 15:39 ` [RFC PATCH v2 09/17] net: sched: check for frozen queue before skb_bad_txq check John Fastabend
2017-05-02 15:39 ` [RFC PATCH v2 10/17] net: sched: qdisc_qlen for per cpu logic John Fastabend
2017-05-02 15:39 ` [RFC PATCH v2 11/17] net: sched: helper to sum qlen John Fastabend
2017-05-02 15:39 ` [RFC PATCH v2 12/17] net: sched: add support for TCQ_F_NOLOCK subqueues to sch_mq John Fastabend
2017-06-19  9:21   ` huaixin chang
2017-05-02 15:40 ` [RFC PATCH v2 13/17] net: sched: add support for TCQ_F_NOLOCK subqueues to sch_mqprio John Fastabend
2017-05-02 15:40 ` [RFC PATCH v2 14/17] net: skb_array: expose peek API John Fastabend
2017-06-06  3:10   ` Michael S. Tsirkin
2017-05-02 15:40 ` [RFC PATCH v2 15/17] net: sched: pfifo_fast use skb_array John Fastabend
2017-05-02 15:41 ` [RFC PATCH v2 16/17] net: skb_array additions for unlocked consumer John Fastabend
2017-05-02 15:41 ` [RFC PATCH v2 17/17] net: sched: lock once per bulk dequeue John Fastabend
2017-06-06  4:30 ` [RFC PATCH v2 00/17] latest qdisc patch series Michael S. Tsirkin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).