====== 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, [[https://reviews.freebsd.org/D3425|D3425]]) * **June5 - June14 (1.5 weeks)**: Add the hooks to each layer of the network stack to collect the statistics. (Done, [[https://reviews.freebsd.org/D3415|D3415]], [[https://reviews.freebsd.org/D3416|D3416]], [[https://reviews.freebsd.org/D3417|D3417]], [[https://reviews.freebsd.org/D3418|D3418]], [[https://reviews.freebsd.org/D3421|D3421]]) * **June15 - June28 (2 weeks)**: Extend netstat(1) and related tools to report on these couters. (Done, [[https://reviews.freebsd.org/D3422|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, [[https://reviews.freebsd.org/D3426|D3426]], [[https://reviews.freebsd.org/D3427|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