* David S. Miller <20050705.142210.14973612.davem@xxxxxxxxxxxxx> 2005-07-05 14:22 The patch must be changed to use __qdisc_dequeue_head() instead of __skb_dequeue() or we screw up the backlog.
* David S. Miller <20050705.142210.14973612.davem@xxxxxxxxxxxxx> 2005-07-05 14:22 So I'll apply the original unrolling patch for now. The patch must be changed to use __qdisc_dequeue_head() instead
* Eric Dumazet <42CB14B2.5090601@xxxxxxxxxxxxx> 2005-07-06 01:16 Ok, this clarifies a lot for me, I was under the impression you knew about these changes. It is very unlikely to change within mainlin
But the branch prediction is where I personally think a lot of the lossage is coming from. These can cost upwards of 20 or 30 processor cycles, easily. That's getting close to the cost of a L2 cache
* David S. Miller <20050705.164503.104035718.davem@xxxxxxxxxxxxx> 2005-07-05 16:45 Absolutely. I think what happens is that we produce predicion failures due to the logic within qdisc_dequeue_head(),
Thomas Graf a écrit : I still think we can fix this performance issue without manually unrolling the loop or we should at least try to. In the end gcc should notice the constant part of the loop and
* Eric Dumazet <42CB2698.2080904@xxxxxxxxxxxxx> 2005-07-06 02:32 Correct. The !expr implies an unlikely so the prediction should be right and equal to your unrolling version. This would break the who
Eric Dumazet a écrit : Maybe we can rewrite the whole thing without branches, examining prio from PFIFO_FAST_BANDS-1 down to 0, at least for modern cpu with conditional mov (cmov) struct sk_buff_head
* Eric Dumazet <42CB2B84.50702@xxxxxxxxxxxxx> 2005-07-06 02:53 I think you got me wrong, the whole point of this qdisc is to prioritize which means that we cannot dequeue from prio 1 as long as the q
Thomas Graf a écrit : Maybe we can rewrite the whole thing without branches, examining prio from PFIFO_FAST_BANDS-1 down to 0, at least for modern cpu with conditional mov (cmov) This would break the
* Eric Dumazet <42CB2E24.6010303@xxxxxxxxxxxxx> 2005-07-06 03:04 Ahh... sorry, I misread your patch, interesting idea. I'll be waiting for your numbers.
Thomas Graf a écrit : I think you got me wrong, the whole point of this qdisc is to prioritize which means that we cannot dequeue from prio 1 as long as the queue in prio 0 is not empty. if prio 0 is
* Eric Dumazet <42CB2B84.50702@xxxxxxxxxxxxx> 2005-07-06 02:53 A short recap after some coffee and sleep: The inital issue you brought up which you backed up with numbers is probably the cause of mul
As an aside, this reminds me that as part of my quest to make sk_buff smaller, I intend to walk across the tree and change all tests of the form: if (!skb_queue_len(list)) into: if (skb_queue_empty(l
* David S. Miller <20050707.141718.85410359.davem@xxxxxxxxxxxxx> 2005-07-07 14:17 Since I'm changing the classful qdiscs to use a generic API for queue management anyway I could take care of this if
Ok. I'm going to check something like the following into my tree. It takes care of the obvious cases of direct binary test of queue length being zero vs. non-zero. This uncovered some seriously quest
Distributions enable all of the ifdefs, and that is thus the size and resultant performance most users see. That's why I'm working on shrinking the size assuming all the config options are enabled, b
About making sk_buff smaller, I use this patch to declare 'struct sec_path *sp' only ifdef CONFIG_XFRM, what do you think ? I also use a patch to declare nfcache, nfctinfo and nfct only if CONFIG_NE