[Cerowrt-devel] bulk packet transmission
David Lang
david at lang.hm
Fri Oct 10 23:15:53 EDT 2014
I've been watching Linux kernel development for a long time and they add locks
only when benchmarks show that a lock is causing a bottleneck. They don't just
add them because they can.
They do also spend a lot of time working to avoid locks.
One thing that you are missing is that you are thinking of the TCP/IP system as
a single thread of execution, but there's far more going on than that,
especially when you have multiple NICs and cores and have lots of interrupts
going on.
Each TCP/IP stream is not a separate queue of packets in the kernel, instead
the details of what threads exist is just a table of information. The packets
are all put in a small number of queues to be sent out, and the low-level driver
picks the next packet to send from these queues without caring about what TCP/IP
stream it's from.
David Lang
On Fri, 10 Oct 2014, dpreed at reed.com wrote:
> The best approach to dealing with "locking overhead" is to stop thinking that
> if locks are good, more locking (finer grained locking) is better. OS
> designers (and Linux designers in particular) are still putting in way too
> much locking. I deal with this in my day job (we support systems with very
> large numbers of cpus and because of the "fine grained" locking obsession, the
> parallelized capacity is limited). If you do a thoughtful design of your
> network code, you don't need lots of locking - because TCP/IP streams don't
> have to interact much - they are quite independent. But instead OS designers
> spend all their time thinking about doing "one thing at a time".
>
> There are some really good ideas out there (e.g. RCU) but you have to think
> about the big picture of networking to understand how to use them. I'm not
> impressed with the folks who do the Linux networking stacks.
>
>
> On Thursday, October 9, 2014 3:48pm, "Dave Taht" <dave.taht at gmail.com> said:
>
>
>
>> I have some hope that the skb->xmit_more API could be used to make
>> aggregating packets in wifi on an AP saner. (my vision for it was that
>> the overlying qdisc would set xmit_more while it still had packets
>> queued up for a given station and then stop and switch to the next.
>> But the rest of the infrastructure ended up pretty closely tied to
>> BQL....)
>>
>> Jesper just wrote a nice piece about it also.
>> http://netoptimizer.blogspot.com/2014/10/unlocked-10gbps-tx-wirespeed-smallest.html
>>
>> It was nice to fool around at 10GigE for a while! And netperf-wrapper
>> scales to this speed also! :wow:
>>
>> I do worry that once sch_fq and fq_codel support is added that there
>> will be side effects. I would really like - now that there are al
>> these people profiling things at this level to see profiles including
>> those qdiscs.
>>
>> /me goes grumbling back to thinking about wifi.
>>
>> On Thu, Oct 9, 2014 at 12:40 PM, David Lang <david at lang.hm> wrote:
>> > lwn.net has an article about a set of new patches that avoid some locking
>> > overhead by transmitting multiple packets at once.
>> >
>> > It doesn't work for things with multiple queues (like fq_codel) in it's
>> > current iteration, but it sounds like something that should be looked at and
>> > watched for latency related issues.
>> >
>> > http://lwn.net/Articles/615238/
>> >
>> > David Lang
>> > _______________________________________________
>> > Cerowrt-devel mailing list
>> > Cerowrt-devel at lists.bufferbloat.net
>> > https://lists.bufferbloat.net/listinfo/cerowrt-devel
>>
>>
>>
>> --
>> Dave Täht
>>
>> https://www.bufferbloat.net/projects/make-wifi-fast
>> _______________________________________________
>> Cerowrt-devel mailing list
>> Cerowrt-devel at lists.bufferbloat.net
>> https://lists.bufferbloat.net/listinfo/cerowrt-devel
>>
More information about the Cerowrt-devel
mailing list