Back to GSoC 2020 projects
- 1 Project Overview
- 2 Milestones and Deliverables
- 3 Weekly Reports
- 3.1 Community Bonding Period
- 3.2 Week 1: 1st June - 7th June
- 3.3 Week 2: 8th June - 14th June
- 3.4 Week 3: 15th June - 21st June
- 3.5 Week 4: 22nd June - 28th June
- 3.6 Week 5: 29th June - 5th July
- 3.7 Week 6: 6th July - 12th July
- 3.8 Week 7: 13th July - 19th July
- 3.9 Week 8: 20th July - 26th July
- 3.10 Week 9: 27th July - 2nd August
- 3.11 Week 10: 3rd August - 9th August
- 3.12 Week 11: 10th August - 16th August
- 3.13 Week 12: 17th August - 23rd August
- Project Name: SCE AQMs and TCP along with CNQ-CoDelAF and LFQ
- Student: Bhaskar Kataria
- Mentors: Tom Henderson, Vivek Jain, Ankit Deepak, Mohit P. Tahiliani
- Project Goals: The project originally aimed to implement the Some Congestion Experienced (SCE) marking feature which uses ECT(1) codepoint of Explicit Congestion Notification (ECN) to deliver the earlier notification of congestion than the Congestion Experienced (CE) mark along with the TCP which responds appropriately to the SCE feedback. The project also intends to implement Controlled Delay Approximate Fairness (CoDelAF) AQM with Cheap Nasty Queueing (CNQ) and Lightweight Fair Queueing (LFQ) with SCE support. As simulation models already exist for many of the Low Latency, Low Loss, Scalable throughput (L4S) components, the project ultimately aims to provide the feature to experiment with SCE and L4S to the ns-3 community. In light of the IETF tsvwg decision to select ECT(1) as an input signal, we decided to change the focus of this project to adding L4S support to other queues.
- Repository: https://gitlab.com/bhaskar792/ns-3-dev
- About Me: I am a second-year Computer Science and Engineering undergraduate student at National Institute of Technology Karnataka, Surathkal, India. I have deep interests in networking, systems, and security. I have experience with C, C++, Python, and tools like Wireshark, GDB.
Milestones and Deliverables
Note: In light of the IETF tsvwg decision to select ECT(1) as an input signal, we decided to change the focus of this projeect to adding L4S support to queues of interest.
The whole GSoC period is divided into 3 phases. The deliverables of each phase are mentioned below:
- Add L4S to ns-3 FqCoDel: ECT(1) traffic gets marked at CE_threshold, ECT(0) is marked at the normal CoDel threshold. For now, avoid the possibility of hash collisions causing both types to share a flow queue.
Phase 1 work is also resolving an ambiguity in how to handle the request to mark an already marked packet (see issue 225). We have agreed to mention, in the documentation, the following items for further work:
- what to do if ECT(1) and either/both ECT(0) and NotECT are in the same flow queue (hash collisions or tunnels)-- our L4S traffic flows will avoid this situation by supporting AccECN and ECN++ (and if it happens in practice, the CoDel logic will just apply two separate thresholds)
- adding a ramp marking response instead of step threshold
- adding a floor value (to suppress marks if the queue length is below a certain number of bytes or packets)
- adding a heuristic such as in PIE to avoid marking a packet if it arrived to an empty flow queue (check on ingress, remember at egress time)
Phase 1 will be completed once the following two items are handled:
- an example, based on the AQM Evaluation Suite, showing the operation of this new code under a mix of L4S and non-L4S flows
- Sphinx documentation extensions to the FqCoDel section
Phase 1 also had this milestone, originally:
Add FQ scheduling to IETF dual queue modelThis goal was decided to no longer be relevant to IETF studies.
Phase 2 had an original plan of implementing CodelAF:
- CodelAF draft-morton-tsvwg-codel-approx-fair-01
We may consider to continue with this if the draft will still be pursued. Other possible topics for Phase 2:
- FQ/Cobalt with L4S support
- FQ/PIE with L4S support
- enhancements to FQ/Codel with L4S discussed above
Revised plan for Phase 2
- BLUE enhancement (upper threshold based on sojourn time)
- FQ/Cobalt with L4S support
Phase 3 had the following original plan:
- Support TCP Prague with overload signal (Jake Holland's proposal)
Revised plan for phase 3:
- FQ/PIE with L4S support
- Extend the AQM evaluation suite to include these queues and some relevant tests
Community Bonding Period
- Started with wiki page for the project.
- Generated merge request CoDel and FqCoDelfor adding the test support for ECN operation supporting the existing ECN patch for CoDel and FqCoDel queue disc. merged into the mainline of ns-3.
- Generated merge request COBALT for adding test support for ECN operation for COBALT queue disc.
- Generated merge request typedef to include typedef for int64_t and uint64_t in the core.
- Generated merge request PIE for some work done before the community bonding period started and completed during community bonding period which adds the test support to the existing patch that aligns PIE queue disc with RFC 8033 and Linux
Week 1: 1st June - 7th June
- Worked on proposing the implementation of L4S mode for FqCoDel and made modifications based on suggestions. Details can be found in the doc
- Discussed about the current marking implementation which can mark the packet twice. Details can be found on the GitLab issue
Week 2: 8th June - 14th June
- Worked on implementation of L4S mode for FqCoDel queue disc
- Worked on adding tests for L4S mode for FqCoDel queue disc
- Implementation can be found here and details can be found here
Week 3: 15th June - 21st June
- Worked on revising Mark method and generated merge request but after certain comments, the implementation idea was changed. Details can be found here
- For writing the example, read WNS3 2017 paper on Design and Implementation of AQM Evaluation Suite for ns-3 which can be found here.
- Worked on understanding the code of aqm-eval-suite for ns3, aqm-eval-suite webpage can found here.
Week 4: 22nd June - 28th June
- Added 3 scenarios for FqCoDel Queue Disc L4S mode examples using AQM Evaluation Suite
The 3 Scenarios are: 1) Traditional ECN 2) DCTCP without L4S mode 3) DCTCP and BIC flows with L4S mode
Work done for AQM-Evaluation-Suite includes: 1) Implementing Queue Delay Per Flow model which now provides queue delay per-flow graphs. 2) Implementing ECN with the help of existing pull request 3) Removed usage of Timestamp tag
Implementation can be found at the GitLab repository Work on the refinement of examples is in progress.
- Added documentation to the FqCoDel section which includes possible next steps available at GitLab repository
Week 5: 29th June - 5th July
- Worked on Tuning the examples written using AQM Evaluation Suite, the examples are available on my GitLab repository.
- For better understanding, separate plots Queue delay per-flow, Congestion Windows plots were added.
- Results of the examples can be found on the google drive and the test number mapping and configuration can be found on the spreadsheet
Week 6: 6th July - 12th July
- worked on the example written using Tom sir's script for L4S evaluation available here
- worked on cleaning up the example written using AQM evaluation suite available here
Week 7: 13th July - 19th July
- Worked on the tuning and documentation of the example written using Tom sir's script for L4S evaluation available here and results are available here with the configuration file.
- Worked on updating PIE merge request
- Worked on updating Cobalt merge request
- Started working on FqCobalt.
Week 8: 20th July - 26th July
Action items from meeting on 21 July
- All to review current example for FqCoDel-L4S branch and help to finalize Bhaskar's Merge Request
- Mohit to provide Bhaskar with example attribute declaration for BLUE enhancement, and pointer to Jonathan's code. Bhaskar to create separate feature branch for this issue
- Bhaskar to post a FqCobalt-L4S branch that integrates FQ, Cobalt (with enhancement), set associative hash, and L4S extensions
- Bhaskar to provide a MR for AQM evaluation suite extensions
- Tom to ask Stefano to approve the Cobalt-ECN and FQ-PIE MRs
- Bhaskar to review the ACK filtering MR
Phase 3 project definition will be informed by any IETF tsvwg outcomes from the next week's IETF 108 meeting.
Work done in this week (available at my Gitlab repository)
- Implementation of FqCobalt Queue Disc with L4S mode, ECN, and set-associative hash using the existing implementation of FqCoDel.
- Implementation of CE threshold marking and L4S mode Cobalt Queue disc.
- Addition of unit test cases for FqCobalt Queue disc.
- Addition of the CE threshold marking test for Cobalt Queue Disc.
- Review of ACK filtering Merge Request
After the meet on 28th July it was decided that Phase 3 will consists of the inclusion of FqPIE to the mainline ns-3 and inclusion of AQM Evaluation Suite to the ns-3 Appstore.
Week 9: 27th July - 2nd August
Work done this week includes
- Implementing Blue Enhancement (Enables Blue at BlueThreshold) for Cobalt and FqCobalt Queue disc.
- Updating unit test cases for FqCobalt
- Documentation of FqCobalt.
- Opened a merge request for the work done in phase 1 (L4S extension to FqCoDel)
- Opened a merge request for the work done in phase 2 (Added FqCobalt)
Week 10: 3rd August - 9th August
- Added L4S mode to PIE queue disc.
- Started work on FqPIE.
- Added basic test cases for FqPIE.
- Whole work is available on GitLab repository
Week 11: 10th August - 16th August
- In the meet on 11th August it was decided that only L4S mode will be implemented for FqPIE, not the threshold which is used for DCTCP. For L4S mode it was decided that if the packet is ECT1 and L4S is enabled then the packet would bypass PIE and get marked based on CE threshold and other packets would go through PIE.
Work done in this week includes:
- Implementing L4S mode for FqPIE Queue disc.
- Adding unit test cases for FqPIE
- Documentation of FqPIE, work for FqPIE available on my GitLab repository.
- Implementing Active/Inactive feature for PIE available on my GitLab repository
Week 12: 17th August - 23rd August
- Worked on writing document for extensive testing of the Fq queue disciplines and performance of the simulator.