SoonyangZhang / Drainqueuecongestion
Labels
Projects that are alternatives of or similar to Drainqueuecongestion
DrainQueueCongestion
Algorithms
Congestion control algorithms evaluation on ns3
code is referenced from quic protocol for simulation purpose.
Implemented congestion control algorithms:
- [x] Reno cubic veno westwood c2tcp elastic
- [x] vegas tcp-lp copa
- [x] BBR PCC BBRv2(ecn)
- [x] DCTCP(ecn)
Supported multipath congstion control algorithms:
- [x] lia wvegas olia balia
- [x] 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)):
one way transmission delay
BBR with the parameter (drain_to_target_(true)):
./waf --run "scratch/dqc-test --it=1 --cc=bbrd"
rate dynamic:
one way transmission delay:
BBRv2:
rate dynamic:
one way transmission delay:
Cubic simulation results:
bandwidth fairness:
one way delay
The paper on copa: Copa: Practical Delay-Based Congestion Control for the Internet.
Copa simulation results:
bandwidth fairness:
one way delay
There is a review papar to evaluate the performance of these algorithms(https://arxiv.org/abs/1909.03673).