-
RFC 8033, Proportional Integral Controller Enhanced (PIE) https://tools.ietf.org/html/rfc8033
-
RFC 8290, Fq-Codel https://tools.ietf.org/html/rfc8290
-
NS3 documentation (Doxygen), https://www.nsnam.org/doxygen/
-
Algorithm for PIE followed, https://tools.ietf.org/html/rfc8033#appendix-A
Implementation Details (details)
-
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
- 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 valueh
is not present in the list of flows, a new flow is created with a new queue discqd
, 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 functioncalculateP
which performs the PIE variant of calculation of probability except that this is done to every flowACTIVE
.
-
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
- Only when TCP packets are present in the Network :
Drops | PIE | FQ-PIE |
---|---|---|
Random Drops | 204 | 0 |
Queue limit Drops | 0 | 0 |
- When both TCP and UDP packets are present in the Network:
Drops | PIE | FQ-PIE |
---|---|---|
Random Drops | 3512 | 483 |
Queue limit Drops | 454 | 0 |
- 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.
- 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