200705 Meeting of the Network Stack Cabal
The FreeBSD network stack is one of the most active areas of development in the FreeBSD kernel. However, it has been observed that we have many point specialists: experts in Netgraph, TCP, BPF, etc, but relatively few generalists. The goal of this meeting is to perform structured discussion and code-reading of critical sections of the network stack in order to improve knowledge of the many stack components among the network developer community, and to motivate thinking about overall architectural issues in the stack. A set of possible themes for cross-stack consideration can be found below.
All participants in the meeting are asked to prepare brief presentations and code walk-throughs of specific sections of the stack -- most frequently, areas in which they have special expertise. Presentations will be short, and this is not an attempt to read all code. Rather, to identify critical paths and allow them to shed light on the structure of components and their integration. Sessions will be recorded for future reference.
The basic day structure is something along the following lines:
- Network stack infrastructure: mbufs, allocators, link layer, ifnet abstraction, netisr abstraction, BPF, device drivers.
- Higher level abstractions and services: firewalls, protocols and sockets.
- Discuss cross-components themes, review notes, set goals.
This meeting is by invitation only. Please contact EdMaste and RobertWatson for details.
Contents
Format
Presentation slots for the network stack cabal are limited to 30 minutes, with at most 10 minutes for slides (approximately five slides maximum). The remaining 20 minutes or more is reserved for code walk through and discussion. We want to keep a fairly tight schedule as we have a lot of material to get through. Sessions may run significantly shorter, but should not run longer. Sessions will be interactive, and asking questions to guide reading is encouraged (subject to time limitations).
Please post your name and your topic, and if you have them, your slides. Try to be interesting, or this will be a really boring day!
Permanent Record
This session will be video recorded, and slides will be collected. One of the important outputs of this meeting will be content that can be reused for educational purposes in the future.
Attendees
This is an invitation-only event. Please contact EdMaste and RobertWatson for more information; do not add yourself to this list without contacting them first. Current partial list of attendees:
Themes to Discuss
As we review key components of the network stack, we should be looking not just at the details of the component, but also issues the span many components. This will provide the opportunities to identify common elements, and especially common requirements. Some areas we may want to focus our questions on:
- Granularity of locking, locking strategies
- Opportunities for increased concurrency
- Cache friendliness of data structures and data flow model
- Scalability at high speeds (packets/second)
- Scalability to large packet sizes (such as TSO/LRO generated chains)
- Scalability to large numbers of network interfaces and peers
- Copy reduction opportunities
- Opportunities to reduce context switches
- Interactions between the network stack and scheduler, especially relating to queueing, wakeups, and dispatch models
- Interactions between the network stack and device drivers
- How to handle layer-violating constructs, such as TOE
Schedule
Time |
Presenter |
Topic |
Presentation Materials |
09:10-09:15 |
Introduction |
||
09:15-09:45 |
mbufs and mbuf allocator |
||
09:45-10:00 |
netisr dispatch |
||
10:00-10:20 |
ifnet API |
||
10:20-10:50 |
wireless networking |
||
10:50-11:00 |
|
Break |
|
11:00-11:30 |
BPF |
||
11:30-11:45 |
pfil, firewalls and locking |
||
11:45-12:00 |
pf |
||
12:00-12:30 |
cxgb 10gbps driver optimizations |
||
12:30-13:00 |
|
Lunch |
|
13:00-13:40 |
Sockets and socket buffers |
||
13:40-14:15 |
UNIX Domain Sockets |
|
|
14:15-15:15 |
Routing, ARP, IPv6 ND6 |
|
|
15:15-15:30 |
|
Break |
|
15:30-15:50 |
ip_input(), ip_output(), ip_forward() |
||
15:50-16:05 |
ip6_{in,out,..}* |
||
16:05-16:35 |
FAST_IPSEC |
||
16:35-16:50 |
|
Break |
|
16:50-17:20 |
Netgraph |
||
17:20-17:40 |
accept filters |
||
17:40-18:50 |
TCP Syncache, PCB, input, output |
|
|
18:50-19:00 |
|
Day recap |
|
19:00 |
|
Dinner |
Topics Looking for Owners
Here are some things we'd really like to have people signed up to talk about and walk through:
- Kqueue
- Sample ethernet device driver
- Ethernet link layer (if_ethersubr, if_vlan, etc)
- IPFW2
- DUMMYNET
- IP address management
- IP multicast
- IPv6 MLD6
- GIF
- netatm
- natatalk
- netipx
- netnatm
- Bluetooth
- PPP
- i4b