On Wed, Jun 22, 2016 at 3:03 AM, Florian Westphal <f...@strlen.de> wrote: > Currently classification and enqueue is done in a single step. > > core acquires the qdisc lock, then calls the ->enqueue() function > of the qdisc. > > Its the job of the qdisc and its attached classifiers to figure out what > to do next. > > Typically the enqueue function will call tc_classify() to lookup a > child class, then call ->enqueue of the child qdisc. > > This can repeat a number of times until a leaf qdisc is reached; this leaf > will do the real enqueue operation (pfifo for example). > > While this approach gives qdiscs and the classifier/action subsystem > a lot of control, it has one major drawback: The root qdisc lock > is held for a prolonged period of time while we recurse through > the qdisc hierarchy from root to leaf. > > This (unfinished!) hack splits classification and enqueue into > two steps. > > Before enqueueing the packet and *before* acquiring the root qdisc lock, > the new qdisc ->classify() function is invoked.
I believe John is finalizing his lockless qdisc patches... would this split still be needed after qdiscs become lockless?