From Nsnam
Revision as of 19:23, 2 July 2020 by BhaskarK (Talk | contribs) (Week 4: 22nd June - 28th June)

Jump to: navigation, search

Main Page - Current Development - Developer FAQ - Tools - Related Projects - Project Ideas - Summer Projects

Installation - Troubleshooting - User FAQ - HOWTOs - Samples - Models - Education - Contributed Code - Papers

Back to GSoC 2020 projects

Project Overview

  • 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 aims 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.
  • Repository:
  • 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

The whole GSoC period is divided into 3 phases. The deliverables of each phase are mentioned below:

Phase 1

  • 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 model This goal was decided to no longer be relevant to IETF studies.

Phase 2

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
  • Add ack filtering (developed by other students) to the configurations

Phase 3

  • Support TCP Prague with overload signal (Jake Holland's proposal)

Weekly Reports

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

  • to be added

Week 6: 6th July - 12th July

  • to be added

Week 7: 13th July - 19th July

  • to be added

Week 8: 20th July - 26th July

  • to be added

Week 9: 27th July - 2nd August

  • to be added

Week 10: 3rd August - 9th August

  • to be added

Week 11: 10th August - 16th August

  • to be added

Week 12: 17th August - 23rd August

  • to be added