DrainQueueCongestion Save

Congestion control algorithms evaluation on ns3

Project README

DrainQueueCongestion

Algorithms

Congestion control algorithms evaluation on ns3
code is referenced from quic protocol for simulation purpose.
Implemented congestion control algorithms:

  • Reno cubic veno westwood c2tcp elastic
  • vegas tcp-lp copa
  • BBR PCC BBRv2(ecn)
  • DCTCP(ecn)

Supported multipath congstion control algorithms:

  • lia wvegas olia balia
  • couple BBR

Configuration

As for ns3 test case, the wscript gives clear hint how to arrange this file
in the right position in ns3.
And add the CPLUS_INCLUDE_PATH flag in /etc/profile, for example:

export DQC=/home/zsy/C_Test/ns-allinone-3.xx/ns-3.xx/src/dqc/model/thirdparty  
export CPLUS_INCLUDE_PATH=CPLUS_INCLUDE_PATH:$DQC/include/:$DQC/congestion/:$DQC/logging/  

The path /home/zsy/C_Test/ is where I put ns-allinone-3.xx under, substituting it with your ns3 path.
Create a file named "traces" under /xx/xx/ns-allinone-3.xx/ns-3.xx/ for data collection.

Run

Run simulation on ns3.26:

sudo su  
source /etc/profile  
./waf --run "scratch/bbr-var-eva-3.26 --it=1 --cc=bbr"  

Of cource, the project can be running on newer version of ns3,
as long as the topology is built. For example, on ns3.30.

sudo su  
source /etc/profile  
./waf --run "scratch/bbr-var-eva-3.30 --it=1 --cc=bbr"  

The difference is only in BuildExampleTopo function.

Trace

The code in dqc/model/dqc_trace.cc is used to collect send rate (E_DQC_BW),
one way delay (E_DQC_OWD), raceived rate (E_DQC_GOODPUT).
In bbr-var-eva-3.30.cc, the enable trace flag is:

trace1.Log(log,DqcTraceEnable::E_DQC_OWD|DqcTraceEnable::E_DQC_BW|DqcTraceEnable::E_DQC_GOODPUT);  

The E_DQC_OWD will create file to collect data.
The callback function (DqcTrace::OnOwd) is registered in InstallDqc function to write data to file.

recvApp->SetOwdTraceFuc(MakeCallback(&DqcTrace::OnOwd,trace));  

The meaning of data in it_bbr_flowid_owd.txt can be found in DqcTrace::OnOwd.

void DqcTrace::OnOwd(uint32_t seq,uint32_t owd,uint32_t size){
    if(m_owd.is_open()){  
        char line [256];  
        memset(line,0,256);  
        float now=Simulator::Now().GetSeconds();  
        sprintf (line, "%f %16d %16d %16d",  
                now,seq,owd,size);  
        m_owd<<line<<std::endl;  
    }    
}  

the receipt time of a packet, packet number, owd, packet size.

Results

BBR simulation results:
Test with 3 flow in a point to point channel(3Mbps, one way delay 100ms, max queue length 300ms).
bandwidth fairness(drain_to_target_(false)):
avatar
one way transmission delay
avatar
BBR with the parameter (drain_to_target_(true)):

./waf --run "scratch/dqc-test --it=1 --cc=bbrd"  

rate dynamic:
avatar
one way transmission delay:
avatar
BBRv2:
rate dynamic:
avatar
one way transmission delay:
avatar
Cubic simulation results:
bandwidth fairness:
avatar
one way delay
avatar
The paper on copa: Copa: Practical Delay-Based Congestion Control for the Internet.
Copa simulation results:
bandwidth fairness:
avatar
one way delay
avatar
There is a review papar to evaluate the performance of these algorithms(https://arxiv.org/abs/1909.03673).

Open Source Agenda is not affiliated with "DrainQueueCongestion" Project. README Source: SoonyangZhang/DrainQueueCongestion
Stars
80
Open Issues
1
Last Commit
1 year ago
License

Open Source Agenda Badge

Open Source Agenda Rating