]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commit
sched: manipulate __QDISC_STATE_RUNNING in qdisc_run_* helpers
authorPaolo Abeni <pabeni@redhat.com>
Tue, 15 May 2018 08:50:31 +0000 (10:50 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 16 May 2018 16:26:25 +0000 (12:26 -0400)
commit32f7b44d0f5661044fcfa84e9ad402ed9d759107
treed2453e21a4187e32c9da74a25bbfee4446e725b5
parent5a63f77af7d69deb02a92b60d61141fe687997f8
sched: manipulate __QDISC_STATE_RUNNING in qdisc_run_* helpers

Currently NOLOCK qdiscs pay a measurable overhead to atomically
manipulate the __QDISC_STATE_RUNNING. Such bit is flipped twice per
packet in the uncontended scenario with packet rate below the
line rate: on packed dequeue and on the next, failing dequeue attempt.

This changeset moves the bit manipulation into the qdisc_run_{begin,end}
helpers, so that the bit is now flipped only once per packet, with
measurable performance improvement in the uncontended scenario.

This also allows simplifying the qdisc teardown code path - since
qdisc_is_running() is now effective for each qdisc type - and avoid a
possible race between qdisc_run() and dev_deactivate_many(), as now
the some_qdisc_is_busy() can properly detect NOLOCK qdiscs being busy
dequeuing packets.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/sch_generic.h
net/core/dev.c
net/sched/sch_generic.c