Merge branch 'lockless-qdisc-opts'
authorDavid S. Miller <davem@davemloft.net>
Wed, 23 Jun 2021 19:17:35 +0000 (12:17 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 23 Jun 2021 19:17:35 +0000 (12:17 -0700)
commite940eb3c1ba8202a73004e6af62508cb9fbb9a0b
treeb0ab80b197393e5574f22a5e595a716b8875175e
parent38f75922a6905b010f597fc70dbb5db28398728e
parentd3e0f57501bde8a9585aff79afcffd99e6a5d91c
Merge branch 'lockless-qdisc-opts'

Yunsheng Lin says:

====================
Some optimization for lockless qdisc

Patch 1: remove unnecessary seqcount operation.
Patch 2: implement TCQ_F_CAN_BYPASS.
Patch 3: remove qdisc->empty.

Performance data for pktgen in queue_xmit mode + dummy netdev
with pfifo_fast:

 threads    unpatched           patched             delta
    1       2.60Mpps            3.21Mpps             +23%
    2       3.84Mpps            5.56Mpps             +44%
    4       5.52Mpps            5.58Mpps             +1%
    8       2.77Mpps            2.76Mpps             -0.3%
   16       2.24Mpps            2.23Mpps             -0.4%

Performance for IP forward testing: 1.05Mpps increases to
1.16Mpps, about 10% improvement.

V3: Add 'Acked-by' from Jakub and 'Tested-by' from Vladimir,
    and resend based on latest net-next.
V2: Adjust the comment and commit log according to discussion
    in V1.
V1: Drop RFC tag, add nolock_qdisc_is_empty() and do the qdisc
    empty checking without the protection of qdisc->seqlock to
    aviod doing unnecessary spin_trylock() for contention case.
RFC v4: Use STATE_MISSED and STATE_DRAINING to indicate non-empty
        qdisc, and add patch 1 and 3.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>