GithubHelp home page GithubHelp logo

26prajval98 / fq-pie-ns-3 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from sumukha-pk/fq-pie-ns-3

1.0 1.0 0.0 356.37 MB

Implementation of the FQ-PIE algorithm in ns-3

Home Page: https://sumukha-pk.github.io/FQ-PIE-ns-3/

Python 59.56% Makefile 0.11% C++ 38.82% C 0.86% Shell 0.17% HTML 0.01% JavaScript 0.01% CSS 0.01% Gnuplot 0.01% MATLAB 0.05% Click 0.02% Perl 0.38% Batchfile 0.01%

fq-pie-ns-3's Introduction

FQ-PIE-ns-3


Resources used:

  1. RFC 8033, Proportional Integral Controller Enhanced (PIE) https://tools.ietf.org/html/rfc8033

  2. RFC 8290, Fq-Codel https://tools.ietf.org/html/rfc8290

  3. NS3 documentation (Doxygen), https://www.nsnam.org/doxygen/

  4. Algorithm for PIE followed, https://tools.ietf.org/html/rfc8033#appendix-A


Implementation Details (details)

Implementation of FQ-PIE was done in NS3

Files

  • fq-pie-queue-disc.h (Click here)
    This file contains the basic definition of the the FqPieFlow class and FqPieQueueDisc class.

  • fq-pie-queue-disc.cc (Click here)
    This file contains all the declarations of the functions in fq-pie-queue-disc.h

  • fq-pie-example-tcp.cc (Click here)
    This file creates an environment where only TCP packets are in the network

  • fq-pie-example-udp.cc (Click here)
    This file creates an environment where only TCP and UDP packets are in the network

Algorithm (important functions)

  • doEnqueue :
    Whenever a packet comes into the node (maybe a router), this function is called.
    For each flow of packet a hash function is used to determine where the packet which flow (or slot) the packet will be added to, There might be hash collisions possible.
    If the hash value h is not present in the list of flows, a new flow is created with a new queue disc qd, else the flow which is already present is selected.
    If flow status is INACTIVE then the flow status is set to NEW_FLOW and a quantum deficit is added
    Then pie algorithm is applied as mentioned in the Resources.
  • doDequeue :
    Here the DRR algorithm is used in order to determine which queue has to dequeue. While checking for flows to dequeue, new flows are checked first. A flow is rendered old right after its checked for a packet to DQ. If there are no appropriate packets in new flow, an old flow is considered.
  • calculatePFlow :
    Simulator::Schedule is used to schedule this function every mt_Update unit of time. It calls another function calculateP which performs the PIE variant of calculation of probability except that this is done to every flow ACTIVE.

Important variables

  • Pie variables for each flow :
    bool m_inMeasurement ( Indicates whether we are in a measurement cycle )
    double m_avgDqRate ( Time averaged dequeue rate )
    double m_dqStart ( Start timestamp of current measurement cycle )
    uint64_t m_dqCount ( Number of bytes departed since current measurement cycle starts )
    double m_dropProb ( Variable used in calculation of drop probability )
    uint32_t m_burstReset ( Used to reset value of burst allowance )
    Time m_qDelayOld ( Old value of queue delay )
    Time m_qDelay ( Current value of queue delay )
    BurstStateT m_burstState ( Used to determine the current state of burst )
    Time m_burstAllowance ( Current max burst value in seconds that is allowed before random drops kick in )

  • Fq-PIE variables :
    Time m_sUpdate ( Start time of the update timer ) Time m_tUpdate ( Time period after which CalculateP () is called ) Time m_qDelayRef ( Desired queue delay ) uint32_t m_meanPktSize ( Average packet size in bytes ) Time m_maxBurst ( Maximum burst allowed before random early dropping kicks in ) double m_a ( Parameter to pie controller ) double m_b ( Parameter to pie controller ) uint32_t m_dqThreshold ( Minimum queue size in bytes before dequeue rate is measured ) uint32_t m_quantum ( Deficit assigned to flows at each round ) uint32_t m_flows ( Number of flow queues ) uint32_t m_perturbation ( hash perturbation value )


Weekly Progress (details)


Result and Analysis (details)

PIE vs FQ-PIE

  1. Only when TCP packets are present in the Network :
Drops PIE FQ-PIE
Random Drops 204 0
Queue limit Drops 0 0
  1. When both TCP and UDP packets are present in the Network:
Drops PIE FQ-PIE
Random Drops 3512 483
Queue limit Drops 454 0

Conclusion

  • Fq-PIE is a drastic increment over the already existing problem and handles the buffer bloat problem really well.
  • As comparision of Fq-PIE with other AQMs is not done it is currently not possible to compare its performance with others.
  • These results are only representative of how better FqPie is with respect to Pie.

Further

  • Comparison with FqCodel and Codel is yet to be done as a test-suite could not be prepared.
  • CAKE implementation and comparison with FqPIE
  • Only Basic FQ-PIE has been implemented. A enhanced version can be used for better results. Enhanced PIE

fq-pie-ns-3's People

Contributors

sumukha-pk avatar 26prajval98 avatar ishaan-rd avatar

Stargazers

 avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.