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
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 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.
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.
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).