Multiqueue Testing Project
- Student: Tiwei Bie (btw@)
- Mentor: Hiren Panchasara (hiren@), George Neville-Neil (gnn@), Robert Watson (rwatson@)
Project description
The aim of this project is to design and implement a infrastructure to validate that a number of the network stack's multiqueue behaviours are as expected.
Approach to solving the problem
- Extending tap(4) to support multiqueue input and provide the same RSS behaviours with the hardware multiqueue network cards.
- Adding hooks in each layer of the network stack to collect the per-ring per-cpu per-layer statistics.
- Extending netstat(1) and related tools to report these statistics.
- Developing simple test applications using multiqueue tap(4) and socket(2) to validate that a number of multiqueue behaviours are as expected.
Deliverables
- A general mechanism to collect the per-ring per-cpu statistics which can be used by all NIC drivers (including the extended netstat(1) which can report these statistics).
- A suite of network stack behavior testing programs which consists of (a) a virtual multiqueue ethernet interface (vme), (b) a UDP packet generator based on vme, (c) a UDP server based on socket(2), (d) a TCP client based on lwip and vme, (e) a TCP server based on socket.
Milestones
May25 - June4 (1.5 weeks): Extend the tap(4)/tun(4) to support multiqueue input. (A new module vme is implemented based on tap(4) to provide the same multiqueue behaviours with the hardware multiqueue NICs, D3425)
June5 - June14 (1.5 weeks): Add the hooks to each layer of the network stack to collect the statistics. (Done, D3415, D3416, D3417, D3418, D3421)
June15 - June28 (2 weeks): Extend netstat(1) and related tools to report on these couters. (Done, D3422)
[June26 - July3: Mid-term Evaluations]: Should be able to print the per-ring, per-cpu, per-layer statistics of the specified interface via netstat(1). (Done)
June29 - July5 (1 week): Extend socket layer to allow querying the RSS affinity of a socket using socket options. (There is an existing way to do this in FreeBSD)
July6 - July19 (2 weeks): Develop simple test applications using multiqueue tap(4)/tun(4) to validate that a number of multiqueue behaviours are as expected. (Done, D3426, D3427)
July20 - August2 (2 weeks): Refine and test the code thoroughly.
August3 - August9 (1 week): Handle unforseen problems if necessary.
August10 - August16 (1 week): Tidy up any loose ends, ensuring the code is integrated and made available in the FreeBSD repositories.
[August17: End of coding (soft)]
Test Plan
(List of steps you plan to use to test your work, as discussed with your mentor)
The Code
https://svnweb.freebsd.org/socsvn/soc2015/btw/
Useful links
Receive Side Scaling - https://msdn.microsoft.com/en-us/library/windows/hardware/ff567236%28v=vs.85%29.aspx
RSS Hashing Types - https://msdn.microsoft.com/en-us/library/windows/hardware/ff570726%28v=vs.85%29.aspx