Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| devsummit:201309:networking [2013/09/26 13:15] – LawrenceStewart | devsummit:201309:networking [2021/04/25 10:00] (current) – Move to DevSummit namespace. JethroNederhof | ||
|---|---|---|---|
| Line 12: | Line 12: | ||
| * MPTCP (Lawrence) | * MPTCP (Lawrence) | ||
| * Deferring mbuf drop on ACK (Scott) | * Deferring mbuf drop on ACK (Scott) | ||
| - | * UI for controlling TCP dynamics (Lawrence, Andre) | + | * UI for controlling TCP/ |
| * Reworking SACK + integrating with reassembly (Andre) | * Reworking SACK + integrating with reassembly (Andre) | ||
| * Pacing (Lawrence) | * Pacing (Lawrence) | ||
| Line 37: | Line 37: | ||
| * MBUFS | * MBUFS | ||
| - | * Ref counting (Gleb, Adrian) \\ Problem: uint32_t' | + | * Ref counting (Gleb, Adrian) \\ Problem: uint32_t' |
| * Batching | * Batching | ||
| - | * Multi-(process|thread) accept (Gleb) Problem: | + | * Multi-(process|thread) accept (Gleb) Problem: |
| - | * | + | * Light weight ref counter based on count(9) (Gleb) |
| - | * Light weight ref counter based on count(9) (Gleb) | + | |
| - | * Testing | + | * Testing/ |
| - | * NSC userpsace | + | * NSC userspace |
| * Testing @ Netflix (Lawrence) | * Testing @ Netflix (Lawrence) | ||
| * Testing @ Orange (Olivier) | * Testing @ Orange (Olivier) | ||
| Line 53: | Line 52: | ||
| //(Add a list or attach slides detailing the achieved results here.)// | //(Add a list or attach slides detailing the achieved results here.)// | ||
| + | |||
| + | ===== Stack/ | ||
| + | |||
| + | To come: | ||
| + | Formal documentation of stack driver boundary | ||
| + | Split of ifnet structure into stack owned and driver owned (evaluate Juniper proposal) | ||
| + | Adjust all drivers to new world order | ||
| + | -- request for feedback to mailinglist messages | ||
| + | |||
| + | Version shims or will all vendors be expected to switch? | ||
| + | -- Shouldn' | ||
| + | -- Clear documentation | ||
| + | |||
| + | Will open projects branch for this. | ||
| + | |||
| + | Technical monitor is Ed Maaste from FF | ||
| + | |||
| + | Can change not be one large commit? #ifdef conditionalized, | ||
| + | |||
| + | One aim is to separate L2 and L3 but that's outside scope here | ||
| + | |||
| + | Changing the way drivers announce capabilities to stack -- idea is to have an area of struct declared by driver | ||
| + | like in setsockopt() -- list of items that the stack will walk. | ||
| + | |||
| + | It's like newbus. | ||
| + | (Has been reinvented twice, not well since). | ||
| + | |||
| + | There can be additional failure possibilities if functions exported as pointers in list have to allocate memory otherwise will be the same as now. | ||
| + | |||
| + | Vendor capabilities, | ||
| + | |||
| + | TCP offload? Is ifnet the right level of abstraction for modern network hardware? | ||
| + | |||
| + | Just in time compilation to improve performance on cache-deep processes? | ||
| + | Not a problem now, but it will be tomorrow. | ||
| + | |||
| + | Automagic export of C code at compile time a la | ||
| + | |||
| + | IFQ interface: pain point | ||
| + | different types of workload need different types of parallelism. | ||
| + | like bind one queue to one core. | ||
| + | Need flexibility to configure via ifconfig or some other method. | ||
| + | ALTQ not working. | ||
| + | |||
| + | Get rid of IFQ and associated softqueue -- most HW has hardware support. | ||
| + | |||
| + | The stack will call down completely lockless, (no ifnet lock or driver lock). | ||
| + | implement optimal approach | ||
| + | |||
| + | Pretty much everything uses iftransmit now, except altq. %%QoS%%? No explicit API for timing. | ||
| + | Intermediary queue discipline? | ||
| + | Stack iftransmit function pointer replaced by altq and will call down into driver iftransmit. | ||
| + | Multiple layers of queue disipline? nterface only supports one layer. | ||
| + | |||
| + | Work is to prepare proposal, documentation and run performance tests so we can make informed decision | ||
| + | |||
| + | Can we pass in other structures than -- eg writing disk blocks directly into network packet? | ||
| + | This is another construction site. Whois looking at busdma? | ||
| + | |||
| + | Once documentation etc. looked at, can update drivers. | ||
| + | |||
| + | sometime in the next 4 months. | ||
| + | |||
| + | Common API for common functions for drivers to use, but not stack. | ||
| + | Driver can benefit automatically from inprovements | ||
| + | |||
| + | Vendor feedback: can we move bufferring up into the stack? | ||
| + | Adaptive behaviour depending on how many packets waiting | ||
| + | |||
| + | Copy-pasting in drivers is not a good thing. | ||
| + | Infrastructure almost in place to remove that (expected 10.1) | ||
| + | |||
| + | Start thinking further into the future. | ||
| + | into .[ch] files at compile time. | ||
| + | |||
| + | ===== Interface dangling pointers -- Gleb ===== | ||
| + | |||
| + | Implement some lightweight ref counting. | ||
| + | |||
| + | ===== Routing performance ===== | ||
| + | |||
| + | Mutex contention kills performance on routing lookup. | ||
| + | |||
| + | Look at killing the need for rtentry locking. Ref counting as proposed by Gleb. | ||
| + | |||
| + | ===== Testing / Development ===== | ||
| + | |||
| + | Developers should communicate with companies able to test with different workloads. | ||
| + | |||
| + | Orange (Olivier) and Yandex (Alexander) have interest in routing/ | ||
| + | |||
| + | Netflix (Lawrence, Adrian, Scott) have access to TCP-heavy production workload. | ||
| + | |||
| + | Netflix looking to host focused mini devsummit events in Los Gatos, CA on a semi-regular basis. | ||
| + | |||
| + | ===== Mbuf refcounting ===== | ||
| + | - cache contention from tightly packed slab | ||
| + | Gleb to continue testing prototype patch and post to list | ||
| + | - cpu stall due to external memory read | ||
| + | Evaluate further after Gleb's patch (which may address this issue) | ||
| + | |||
| + | ===== multi-(process|thread) accept ===== | ||
| + | |||
| + | " | ||
| + | |||
| + | - SO_REUSEPORT molested as in Linux/ | ||
| + | Pros: Currently used in Linux/DFLY, good for small apps | ||
| + | Cons: listen queue migration, annoying to support for larger apps, less flexibility | ||
| + | |||
| + | - Go our own way with e.g. SO_SHAREDQUEUE | ||
| + | Seems to be a leaning towards this direction but a clear proposal should be articularted to a mailing list and a pro/con done later | ||
| + | |||
| + | ===== Routing subsystem ===== | ||
| + | |||
| + | - Multiple cache misses per radix lookup | ||
| + | |||
| + | - Radix is too generic. Could have a super compact v4 only trie along side | ||
| + | |||
| + | - Luigi/ | ||
| + | |||
| + | - Alexander needs to solve API fro RIB->FIB callbacks to deal with MPLS which can be used to support per-protocol specific lookup structures | ||
| + | |||
| + | ===== Ownership ===== | ||
| + | |||
| + | OFED - get Netapp, Isilon, iX, RDMA NIC vendors to talk | ||
| + | |||
| + | ===== Miscellaneous ===== | ||
| + | |||
| + | Andre is carving ipsec out into a pfil based kmod | ||
| + | |||
| + | Andre is working on the final bits of the TCP-AO | ||
| + | |||
| + | TSO doesn' | ||