I’m writing to share the progress update for my project on upgrading and extending the AQM Evaluation Suite in ns-3. Below is a summary of work completed during the Community Bonding Period through Week 2, along with next steps discussed in our recent project meeting.
Community Bonding Period (May 8–31, 2025)Migrated the legacy AQM Evaluation Suite codebase from GitHub to the new GitLab repository for centralized and collaborative development.
Conducted a thorough review of the original AQM Evaluation Suite paper, extracting key insights and compiling a structured action plan aligned with recent ns-3 advancements.
Identified behavioral discrepancies in the AggressiveSender scenario from ns-3.41 onward, where aggressive TCP variants (BIC, HighSpeed, YeAH) diverged from previous outputs. Traced the root cause to pacing settings and restored expected behaviour. Notably, TCP NewReno remains unaffected.
Migrated the build system from Waf to CMake to ensure compatibility with the latest ns-3 versions. Validated successful builds across platforms and ensured test suite integrity.
Replaced deprecated TCP BIC with TCP CUBIC (now supported in ns-3) as the default for aggressive senders, addressing original limitations and aligning with [RFC 7928].
Validated that TCP NewReno is explicitly configured in all relevant scenarios to avoid future regressions, as ns-3 now defaults to TCP CUBIC.
Implemented Explicit Congestion Notification (ECN) support as recommended in RFC 7928 §4.5. ECN is now configurable via --ecn=true and activates both at the TCP sender and AQM queue level (e.g., RED).
Performance evaluation showed that ECN-enabled scenarios yield more concentrated ellipsoids in queue delay vs. goodput plots, indicating reduced variance and improved stability. As expected, Pfifo remains unaffected due to lack of ECN support.
Please feel free to review the GitLab repository and the Wiki, and reach out with any questions or suggestions. I’ll follow up again after the Week 4 milestone with further updates.
Best,Hi everyone!
Apologies for the typos in the previous versions, here’s a quick update on the progress for the AQM Evaluation Suite over the past weeks:
Week 5 (June 29–July 5, 2025)
Week 6 (July 6–July 12, 2025)
Next Steps
Feel free to take a look at the MR and share any feedback or questions. More updates to follow!
Best,
David
David, inline below.
Hi everyone!
Unfortunately I was sick since this Wednesday and wasn't been able to make significant progress, but I would still like to give some quick updates as I've been catching up.
- The MR that contains the major upgrade to the aqm-eval-suite has been merged in the contributed module repository, which is a big milestone.
- The MR for the central AQM registry is ready for review, after fixing a few bugs related to how the AQM was registered in the registry, I though I'd reflect on why it was designed this way. As previously described it was hard to modify the AQM algorithms, as they are scattered around. The design principles originally was to allow the user to add custom AQM algorithms with flexibility, ideally at the example level. I've considered multiple designs such as using a config file, however it might require parsing structured files which then requires external dependencies, there is also one main difficulty to achieve the example level registry without config file is that the aqm-eval-runner runs child processes and the aqm registry needs to be synchronized for correct processing. The current design, we simply treat the aqm registered in aqm-registry.cc as source of truth for all registered algorithms, and is the only place where change is needed, sort of like a config file. I'm open to suggestions here if anyone has idea for a better design.
- Started the investigation of multi-bottleneck topology upgrade, the changes is also harder than anticipated. I've tried some simple approaches and the current challenges is that the current EvalutionTopology class is fixed to the dumbbell topology and is used in all examples, which leads to another problem of how we should present this option to the user, should it be additional examples with the multi-bottleneck topology or should it also be a flag like how we enable ECN. Additionally, the current tracing are also based on the assumption of single bottleneck such as the queue delay, if we have multiple queues how should we present this visually, maybe potentially with multiple graphs? Nevertheless I've been working on creating a good abstraction as the BaseEvaluationTopology which can be derived to either DumbbellTopology or MultiBottleneck, I think this is a good starting point as it can provide a standardized API to use in the examples in the future. This is mainly the next step, and I'm also open for any ideas if anyone has done something similar.
Can you point to where a multi-bottleneck topology is defined? I did not see it defined in the AQM evaulation IETF draft.
- Tom
[cut]
Can you point to where a multi-bottleneck topology is defined? I did not see it defined in the AQM evaulation IETF draft.