soonyangzhang / drainqueuecongestion Goto Github PK
View Code? Open in Web Editor NEWCongestion control algorithms evaluation on ns3
License: BSD 3-Clause "New" or "Revised" License
Congestion control algorithms evaluation on ns3
License: BSD 3-Clause "New" or "Revised" License
It seems the recv isn't defined in your code. Maybe the recv should be ret?
The code comes from /dqc/model/thirdparty/src/proto_socket.cc
int UdpSocket::RecvFrom(charbuf,size_t size,SocketAddress &peer){
int ret=0;
su_addr dst;
ret=su_udp_recv(fd_,&dst,(void)buf,(uint32_t)size,0);
if(recv>=0){
char ip[40];
uint16_t port;
su_addr_to_iport(&dst,ip,40,&port);
std::string host(ip,strlen(ip));
peer=SocketAddress(host,port);
}
return ret;
}
您好,非常感谢您这个集合了众多CC的非常棒的项目,我希望利用您的项目来进行一些仿真实验,但是我在使用ns3方面是一个新手,而且您的代码量非常庞大,一时没有理清其内在逻辑。所以我冒昧询问一下,如果我希望比如提取bbr算法(src/dqc/model/thirdparty/congestion/proto_bbr_sender.cc)中的RTT,BW,cwnd等数据用来分析,我该怎么做呢?
我看到您的dqc_trace和dqc_sender中提供了一些记录如BW等的接口,但是没有明白其他数据应该如何获取?以及不太明白如proto_bbr_sender中的DebugState应该如何使用(这个里面看起来提供了很多需要的数据)?proto_bbr_sender中好像也提供了CalculateCongestionWindow类似这样的函数,但是我没有找到在顶层是怎么一路调用到这个函数的,以及这个函数的结果应该如果获取下来?
感谢您百忙之中能够阅读我的issue,非常感谢如果您能够不吝赐教!
伟大的作者您好:
您实现的框架和各类拥塞控制算法非常全面,感谢您的付出和开源精神
下载代码和进行测试时,看到README中和CSDN博客中提到是基于QUIC的,就有点担心该测试程序是不是基于UDP报文的
在粗浅阅读了DqcSender源码后,发现
m_socket = Socket::CreateSocket (GetNode (),UdpSocketFactory::GetTypeId ());
是否意味着您的框架以及全部拥塞控制算法,都是基于UDP实现的?
我的虚拟机是18.04,使用ns-3.30.1,运行这里的测试时找不到头文件的dqc-module.h,我在机器上全局搜索,也确实没有这个文件,请问这是怎么回事呢?
root@rw-vm:/home/workspace/ns-allinone-3.30.1/ns-3.30.1# ./waf --run "scratch/dqc-test --it=1 --cc=bbr"
Waf: Entering directory `/home/workspace/ns-allinone-3.30.1/ns-3.30.1/build'
[2683/2745] Compiling scratch/dqc-test.cc
[2685/2745] Linking build/scratch/subdir/subdir
../scratch/dqc-test.cc:9:10: fatal error: ns3/dqc-module.h: No such file or directory
#include "ns3/dqc-module.h"
^~~~~~~~~~~~~~~~~~
compilation terminated.
Is this project running on Linux?
Hello
My environment is like this.
OS: Ubuntu 16.04
NS3: ns3-3.26
gcc version: 6.5.0
Moreover, I copied your "dqc" under ns3-3.26/src folder.
I also followed your directions about PATH.
In compile process, I got two errors.
The Main Problem was "ProtoTime" that has no default constructor.
Copy constructor became default, so it couldn't create ProtoTime instance without initial params.
So, I added empty constructor like this.
ProtoTime(const ProtoTime& other) = default;
ProtoTime() {} // Added Here
After that, I could compile your src and run the command you gave.
./waf --run "scratch/dqc-test --it=1 --cc=bbr"
or
./waf --run "scratch/dqc-test --it=1 --cc=bbrd"
However, I cannot run "dqc-test.cc" with bbrv2 cc.
I added also this code to use KBBRv2.
else if(cc_tmp==std::string("bbrv2")){
cc=kBBRv2;
cc1=cc;
}
However, Error occured
I can run "bbr-rtt.cc" which uses also "bbrv2" congestion control algorithm.
What is the problem? I tried to resolve this for a long time, but i couldn't
If possible, plz let me know.
Thank you in advance.
sincerely.
您好,在使用本库代码搭建无线网络拓扑对Cubic进行测试的过程中发现,虽然链路丢包基本在5%以上,但Cubic本身吞吐量并未明显下降,且RTT逐渐增高,请问您对这一问题有什么见解嘛?
Now, I've already run your code. But I have a question after read it, can I obtain information such as average send rate, average receive rate, average rtt from a DqcTraceState object directly using C++ interfaces like the code bellow?
DqcTraceState dts;
// data collection...
Info info = dts.Flush(); // change your code so as to compute average link information and get it
dts.reset(); // reset it
// process
抱歉我是個新手,我剛開始嘗試跑你的程式,但出現這個問題,可能是我在建置環境的時候出了問題。
0: fatal error: ns3/dqc-module.h: No such file or directory
想請問能不能給我更詳細的建置過程。
你好,在执行您的这段代码 trace1.Log(log,DqcTraceEnable::E_DQC_OWD|DqcTraceEnable::E_DQC_BW|DqcTraceEnable::E_DQC_GOODPUT);
出现了这个错误bash: syntax error near unexpected token `log,DqcTraceEnable::E_DQC_OWD'。
请问您能给出什么解决方法吗,万分感谢!
Hi,
I copied dqc/ to src directory and rewrite wscript to CMakeLists.txt. But when running ./ns3 configure --enable-examples --enable-tests
, it shows:
-- Configuring done
CMake Error in src/dqc/CMakeLists.txt:
Unable to resolve full path of PCH-header
'/home/me/ns-allinone-3.37/ns-3.37/cmake-cache/CMakeFiles/stdlib_pch.dir/cmake_pch.h'
assigned to target libdqc-obj, although its path is supposed to be known!
-- Generating done
CMake Generate step failed. Build files cannot be regenerated correctly.
Finished executing the following commands:
cd cmake-cache; /usr/bin/cmake -DNS3_EXAMPLES=ON -DNS3_TESTS=ON .. ; cd ..
How to fix it?
The changed CMakeLists.txt:
build_lib(
LIBNAME dqc
SOURCE_FILES
model/thirdparty/src/ack_frame.cc
model/thirdparty/src/alarm.cc
model/thirdparty/src/byte_codec.cc
model/thirdparty/src/flag_config.cc
model/thirdparty/src/flag_impl.cc
model/thirdparty/src/ip_address.cc
model/thirdparty/src/memslice.cc
model/thirdparty/src/ns3_platform.cc
model/thirdparty/src/netutils.cc
model/thirdparty/src/packet_number.cc
model/thirdparty/src/platform_linux.c
model/thirdparty/src/platform_windows.c
model/thirdparty/src/process_alarm_factory.cc
model/thirdparty/src/proto_bandwidth.cc
model/thirdparty/src/proto_con.cc
model/thirdparty/src/proto_connection_stats.cc
model/thirdparty/src/proto_error_codes.cc
model/thirdparty/src/proto_framer.cc
model/thirdparty/src/proto_packets.cc
model/thirdparty/src/proto_socket.cc
model/thirdparty/src/proto_stream.cc
model/thirdparty/src/proto_stream_sequencer.cc
model/thirdparty/src/proto_time.cc
model/thirdparty/src/proto_types.cc
model/thirdparty/src/proto_utils.cc
model/thirdparty/src/random.cc
model/thirdparty/src/received_packet_manager.cc
model/thirdparty/src/rtt_monitor.cc
model/thirdparty/src/rtt_stats.cc
model/thirdparty/src/send_packet_manager.cc
model/thirdparty/src/send_receive.cc
model/thirdparty/src/socket_address.cc
model/thirdparty/src/string_utils.cc
model/thirdparty/src/unacked_packet_map.cc
model/thirdparty/congestion/balia_sender_bytes.cc
model/thirdparty/congestion/couple_bbr_sender.cc
model/thirdparty/congestion/couple_cc_manager.cc
model/thirdparty/congestion/couple_cc_source.cc
model/thirdparty/congestion/cubic_bytes.cc
model/thirdparty/congestion/cubic_plus_bytes.cc
model/thirdparty/congestion/cubic_plus_sender_bytes.cc
model/thirdparty/congestion/dqc_cc_param_config.cc
model/thirdparty/congestion/dwc_sender_bytes.cc
model/thirdparty/congestion/hybrid_slow_start.cc
model/thirdparty/congestion/ledbat_sender_bytes.cc
model/thirdparty/congestion/lia_sender_bytes.cc
model/thirdparty/congestion/lia_sender_enhance.cc
model/thirdparty/congestion/lia_sender_enhance3.cc
model/thirdparty/congestion/lptcp_sender_bytes.cc
model/thirdparty/congestion/nmcc_sender_bytes.cc
model/thirdparty/congestion/mp_veno_sender_bytes.cc
model/thirdparty/congestion/mp_westwood_sender_bytes.cc
model/thirdparty/congestion/olia_sender_bytes.cc
model/thirdparty/congestion/pcc_monitor_interval_queue.cc
model/thirdparty/congestion/pcc_sender.cc
model/thirdparty/congestion/pcc_utility_manager.cc
model/thirdparty/congestion/proto_bandwidth_sampler.cc
model/thirdparty/congestion/proto_bbr_plus_sender.cc
model/thirdparty/congestion/proto_bbr_rand_sender.cc
model/thirdparty/congestion/proto_bbr_sender.cc
model/thirdparty/congestion/proto_copa_sender.cc
model/thirdparty/congestion/proto_dctcp_sender.cc
model/thirdparty/congestion/proto_delay_bbr_sender.cc
model/thirdparty/congestion/proto_highrail_sender.cc
model/thirdparty/congestion/proto_lpbbr_sender.cc
model/thirdparty/congestion/proto_pacing_sender.cc
model/thirdparty/congestion/proto_send_algorithm_interface.cc
model/thirdparty/congestion/proto_tsunami_sender.cc
model/thirdparty/congestion/prr_sender.cc
model/thirdparty/congestion/quic_bandwidth_sampler.cc
model/thirdparty/congestion/quic_bbr_sender.cc
model/thirdparty/congestion/quic_bbr2_drain.cc
model/thirdparty/congestion/quic_bbr2_misc.cc
model/thirdparty/congestion/quic_bbr2_probe_bw.cc
model/thirdparty/congestion/quic_bbr2_probe_rtt.cc
model/thirdparty/congestion/quic_bbr2_sender.cc
model/thirdparty/congestion/quic_bbr2_startup.cc
model/thirdparty/congestion/tcp_c2tcp_sender_bytes.cc
model/thirdparty/congestion/tcp_cubic_sender_bytes.cc
model/thirdparty/congestion/tcp_elastic_sender_bytes.cc
model/thirdparty/congestion/tcp_hunnan_sender_bytes.cc
model/thirdparty/congestion/tcp_learning_sender_bytes.cc
model/thirdparty/congestion/tcp_veno_sender_bytes.cc
model/thirdparty/congestion/tcp_westwood_sender_bytes.cc
model/thirdparty/congestion/vegas_sender_bytes.cc
model/thirdparty/congestion/wvegas_sender_bytes.cc
model/thirdparty/congestion/xmp_sender_bytes.cc
model/dqc_delay_ack_receiver.cc
model/dqc_sender.cc
model/dqc_receiver.cc
model/time_tag.cc
model/dqc_trace.cc
HEADER_FILES
model/dqc_delay_ack_receiver.h
model/dqc_sender.h
model/dqc_receiver.h
model/dqc_clock.h
model/time_tag.h
model/dqc_trace.h
model/thirdparty/include/ack_frame.h
model/thirdparty/include/alarm.h
model/thirdparty/include/basic_constants.h
model/thirdparty/include/basic_macro.h
model/thirdparty/include/byte_codec.h
model/thirdparty/include/byte_order.h
model/thirdparty/include/cf_platform.h
model/thirdparty/include/commandlineflags.h
model/thirdparty/include/flag_config.h
model/thirdparty/include/flag_util_impl.h
model/thirdparty/include/interval.h
model/thirdparty/include/ip_address.h
model/thirdparty/include/linked_hash_map.h
model/thirdparty/include/memslice.h
model/thirdparty/include/netutils.h
model/thirdparty/include/ns3_platform.h
model/thirdparty/include/optional.h
model/thirdparty/include/packet_number.h
model/thirdparty/include/packet_number_indexed_queue.h
model/thirdparty/include/process_alarm_factory.h
model/thirdparty/include/proto_bandwidth.h
model/thirdparty/include/proto_circular_deque.h
model/thirdparty/include/proto_comm.h
model/thirdparty/include/proto_con.h
model/thirdparty/include/proto_con_visitor.h
model/thirdparty/include/proto_connection_stats.h
model/thirdparty/include/proto_constants.h
model/thirdparty/include/proto_error_codes.h
model/thirdparty/include/proto_framer.h
model/thirdparty/include/proto_packets.h
model/thirdparty/include/proto_socket.h
model/thirdparty/include/proto_stream.h
model/thirdparty/include/proto_stream_data_producer.h
model/thirdparty/include/proto_stream_sequencer.h
model/thirdparty/include/proto_time.h
model/thirdparty/include/proto_types.h
model/thirdparty/include/proto_utils.h
model/thirdparty/include/quic_export.h
model/thirdparty/include/quic_logging.h
model/thirdparty/include/random.h
model/thirdparty/include/received_packet_manager.h
model/thirdparty/include/rtt_monitor.h
model/thirdparty/include/rtt_stats.h
model/thirdparty/include/send_packet_manager.h
model/thirdparty/include/send_receive.h
model/thirdparty/include/socket_address.h
model/thirdparty/include/string_utils.h
model/thirdparty/include/unacked_packet_map.h
model/thirdparty/congestion/couple_cc_manager.h
model/thirdparty/congestion/couple_cc_source.h
model/thirdparty/congestion/dqc_cc_param_config.h
model/thirdparty/congestion/proto_pacing_sender.h
model/thirdparty/congestion/proto_send_algorithm_interface.h
model/thirdparty/congestion/unknow_random.h
model/thirdparty/logging/base.h
model/thirdparty/logging/build_config.h
model/thirdparty/logging/logging.h
LIBRARIES_TO_LINK ${libnetwork}
${libinternet}
${libcore}
)
伟大作者您好:
我在ns-3.30中测试您的算法,其余算法均能正常运行,只有在测试bbrv2时,直接报错
terminate called after throwing an instance of 'dmlc::Error'
what(): [15:50:10] ../src/dqc/model/thirdparty/congestion/quic_bandwidth_sampler.cc:336: sent_packet.last_acked_packet_sent_time is zero
您的源码如下
// There might have been no packets acknowledged at the moment when the
// current packet was sent. In that case, there is no bandwidth sample to
// make.
if (sent_packet.last_acked_packet_sent_time == ProtoTime::Zero()) {
LOG(FATAL)<< "sent_packet.last_acked_packet_sent_time is zero";
return QuicBandwidthSample();
}
但是google quic中的源码也有这个主食,但是并没有LOG(FATAL)
https://quiche.googlesource.com/quiche/+/envoy-integration/quic/core/congestion_control/bandwidth_sampler.cc
在我注释了这行代码后,程序也成功正常运行了。请问您加上这一部分有何特别的用意吗
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.